aboutsummaryrefslogtreecommitdiff
path: root/22.02/namespacearmnn.xhtml
diff options
context:
space:
mode:
authorNikhil Raj <nikhil.raj@arm.com>2022-03-08 20:01:38 +0000
committerNikhil Raj <nikhil.raj@arm.com>2022-03-09 12:26:14 +0000
commitf4019872c1134c6fcc1d6993e5746f55c1e79208 (patch)
treeb07ea8bdd70d696adfa3814344e210ea67be1e8c /22.02/namespacearmnn.xhtml
parent0d75c02b21b919b81035205f3914ee273b93b30c (diff)
downloadarmnn-f4019872c1134c6fcc1d6993e5746f55c1e79208.tar.gz
IVGCVSW-6819 Fix the directory structure and broken link to latest docu
Signed-off-by: Nikhil Raj <nikhil.raj@arm.com> Change-Id: I05b559d15faf92c76ff536719693b361316be4f3
Diffstat (limited to '22.02/namespacearmnn.xhtml')
-rw-r--r--22.02/namespacearmnn.xhtml29667
1 files changed, 29667 insertions, 0 deletions
diff --git a/22.02/namespacearmnn.xhtml b/22.02/namespacearmnn.xhtml
new file mode 100644
index 0000000000..93bcb3d51a
--- /dev/null
+++ b/22.02/namespacearmnn.xhtml
@@ -0,0 +1,29667 @@
+<!-- Copyright (c) 2020 ARM Limited. -->
+<!-- -->
+<!-- SPDX-License-Identifier: MIT -->
+<!-- -->
+<!-- HTML header for doxygen 1.8.13-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="robots" content="NOINDEX, NOFOLLOW" />
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>ArmNN: armnn Namespace Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/x-mathjax-config">
+ MathJax.Hub.Config({
+ extensions: ["tex2jax.js"],
+ jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="stylesheet.css" rel="stylesheet" type="text/css"/>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <img alt="ArmNN" src="Arm_NN_horizontal_blue.png" style="max-width: 10rem; margin-top: .5rem; margin-left 10px"/>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">
+ &#160;<span id="projectnumber">22.02</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('namespacearmnn.xhtml','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="summary">
+<a href="#namespaces">Namespaces</a> &#124;
+<a href="#nested-classes">Classes</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#enum-members">Enumerations</a> &#124;
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<div class="title">armnn Namespace Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Copyright (c) 2021 ARM Limited and Contributors.
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="namespaces"></a>
+Namespaces</h2></td></tr>
+<tr class="memitem:namespacearmnn_1_1experimental"><td class="memItemLeft" align="right" valign="top"> &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn_1_1experimental.xhtml">experimental</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:namespacearmnn_1_1gatordmock"><td class="memItemLeft" align="right" valign="top"> &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn_1_1gatordmock.xhtml">gatordmock</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:namespacearmnn_1_1optimizations"><td class="memItemLeft" align="right" valign="top"> &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn_1_1optimizations.xhtml">optimizations</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:namespacearmnn_1_1profiling"><td class="memItemLeft" align="right" valign="top"> &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn_1_1profiling.xhtml">profiling</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:namespacearmnn_1_1string_utils"><td class="memItemLeft" align="right" valign="top"> &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn_1_1string_utils.xhtml">stringUtils</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:namespacearmnn_1_1test"><td class="memItemLeft" align="right" valign="top"> &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn_1_1test.xhtml">test</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:namespacearmnn_1_1timelinedecoder"><td class="memItemLeft" align="right" valign="top"> &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn_1_1timelinedecoder.xhtml">timelinedecoder</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:namespacearmnn_1_1utility"><td class="memItemLeft" align="right" valign="top"> &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn_1_1utility.xhtml">utility</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1abs.xhtml">abs</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_abs_layer.xhtml">AbsLayer</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_abs_queue_descriptor.xhtml">AbsQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">An <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml" title="An ActivationDescriptor for the ActivationLayer. ">ActivationDescriptor</a> for the <a class="el" href="classarmnn_1_1_activation_layer.xhtml" title="This layer represents an activation operation with the specified activation function. ">ActivationLayer</a>. <a href="structarmnn_1_1_activation_descriptor.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_activation_layer.xhtml">ActivationLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents an activation operation with the specified activation function. <a href="classarmnn_1_1_activation_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_activation_queue_descriptor.xhtml">ActivationQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_added_layer_observable.xhtml">AddedLayerObservable</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_addition_layer.xhtml">AdditionLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents an addition operation. <a href="classarmnn_1_1_addition_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_addition_queue_descriptor.xhtml">AdditionQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_allocator.xhtml">Allocator</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_arg_min_max_descriptor.xhtml">ArgMinMaxDescriptor</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">An <a class="el" href="structarmnn_1_1_arg_min_max_descriptor.xhtml" title="An ArgMinMaxDescriptor for ArgMinMaxLayer. ">ArgMinMaxDescriptor</a> for <a class="el" href="classarmnn_1_1_arg_min_max_layer.xhtml" title="This layer represents a ArgMinMax operation. ">ArgMinMaxLayer</a>. <a href="structarmnn_1_1_arg_min_max_descriptor.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_arg_min_max_layer.xhtml">ArgMinMaxLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a ArgMinMax operation. <a href="classarmnn_1_1_arg_min_max_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_arg_min_max_queue_descriptor.xhtml">ArgMinMaxQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_backend_capability_exception.xhtml">BackendCapabilityException</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_backend_options.xhtml">BackendOptions</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Struct for the users to pass backend specific options. <a href="structarmnn_1_1_backend_options.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_backend_profiling_exception.xhtml">BackendProfilingException</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_backend_registry.xhtml">BackendRegistry</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_backend_settings.xhtml">BackendSettings</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_backend_unavailable_exception.xhtml">BackendUnavailableException</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Class for non-fatal exceptions raised while initialising a backend. <a href="classarmnn_1_1_backend_unavailable_exception.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_backend_version.xhtml">BackendVersion</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_bad_optional_access_exception.xhtml">BadOptionalAccessException</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_base_descriptor.xhtml">BaseDescriptor</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Base class for all descriptors. <a href="structarmnn_1_1_base_descriptor.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_base_iterator.xhtml">BaseIterator</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_base_memory_manager.xhtml">BaseMemoryManager</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_base_tensor.xhtml">BaseTensor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_base_workload.xhtml">BaseWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_batch_normalization_descriptor.xhtml">BatchNormalizationDescriptor</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_batch_normalization_descriptor.xhtml" title="A BatchNormalizationDescriptor for the BatchNormalizationLayer. ">BatchNormalizationDescriptor</a> for the <a class="el" href="classarmnn_1_1_batch_normalization_layer.xhtml" title="This layer represents a batch normalization operation. ">BatchNormalizationLayer</a>. <a href="structarmnn_1_1_batch_normalization_descriptor.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_batch_normalization_layer.xhtml">BatchNormalizationLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a batch normalization operation. <a href="classarmnn_1_1_batch_normalization_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_batch_normalization_queue_descriptor.xhtml">BatchNormalizationQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_batch_to_space_nd_descriptor.xhtml">BatchToSpaceNdDescriptor</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_batch_to_space_nd_descriptor.xhtml" title="A BatchToSpaceNdDescriptor for the BatchToSpaceNdLayer. ">BatchToSpaceNdDescriptor</a> for the <a class="el" href="classarmnn_1_1_batch_to_space_nd_layer.xhtml" title="This layer represents a BatchToSpaceNd operation. ">BatchToSpaceNdLayer</a>. <a href="structarmnn_1_1_batch_to_space_nd_descriptor.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_batch_to_space_nd_layer.xhtml">BatchToSpaceNdLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a BatchToSpaceNd operation. <a href="classarmnn_1_1_batch_to_space_nd_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_batch_to_space_nd_queue_descriptor.xhtml">BatchToSpaceNdQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_b_float16.xhtml">BFloat16</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_b_float16_decoder.xhtml">BFloat16Decoder</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_b_float16_encoder.xhtml">BFloat16Encoder</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_bias_and_weights_types_compatible.xhtml">BiasAndWeightsTypesCompatible</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_bias_and_weights_types_match.xhtml">BiasAndWeightsTypesMatch</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_bindable_layer.xhtml">BindableLayer</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_boolean_decoder.xhtml">BooleanDecoder</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_boolean_decoder_bool.xhtml">BooleanDecoderBool</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_boolean_encoder.xhtml">BooleanEncoder</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_broadcast_loop.xhtml">BroadcastLoop</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_buffer_storage.xhtml">BufferStorage</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_capability.xhtml">Capability</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="structarmnn_1_1_capability.xhtml" title="Capability of the TensorHandleFactory. ">Capability</a> of the TensorHandleFactory. <a href="structarmnn_1_1_capability.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cast_layer.xhtml">CastLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a cast operation. <a href="classarmnn_1_1_cast_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_cast_queue_descriptor.xhtml">CastQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_channel_shuffle_descriptor.xhtml">ChannelShuffleDescriptor</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_channel_shuffle_descriptor.xhtml" title="A ChannelShuffleDescriptor for the ChannelShuffle operator. ">ChannelShuffleDescriptor</a> for the ChannelShuffle operator. <a href="structarmnn_1_1_channel_shuffle_descriptor.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_channel_shuffle_layer.xhtml">ChannelShuffleLayer</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_channel_shuffle_queue_descriptor.xhtml">ChannelShuffleQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_check_location.xhtml">CheckLocation</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_abs_workload.xhtml">ClAbsWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_activation_workload.xhtml">ClActivationWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_addition_workload.xhtml">ClAdditionWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_arg_min_max_workload.xhtml">ClArgMinMaxWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_backend.xhtml">ClBackend</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_backend_context.xhtml">ClBackendContext</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_backend_default_allocator.xhtml">ClBackendDefaultAllocator</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Default Memory <a class="el" href="structarmnn_1_1_allocator.xhtml">Allocator</a> class returned from IBackendInternal::GetDefaultAllocator(MemorySource) <a href="classarmnn_1_1_cl_backend_default_allocator.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_backend_model_context.xhtml">ClBackendModelContext</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">The <a class="el" href="classarmnn_1_1_cl_backend_model_context.xhtml" title="The ClBackendModelContext is used to pass in CL specific backend ModelOptions. ">ClBackendModelContext</a> is used to pass in CL specific backend ModelOptions. <a href="classarmnn_1_1_cl_backend_model_context.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_base_workload.xhtml">ClBaseWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_batch_normalization_float_workload.xhtml">ClBatchNormalizationFloatWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_batch_to_space_nd_workload.xhtml">ClBatchToSpaceNdWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_cast_workload.xhtml">ClCastWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_channel_shuffle_workload.xhtml">ClChannelShuffleWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_comparison_workload.xhtml">ClComparisonWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_concat_workload.xhtml">ClConcatWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_constant_workload.xhtml">ClConstantWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_cl_context_builder.xhtml">ClContextBuilder</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_context_control.xhtml">ClContextControl</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_context_deserializer.xhtml">ClContextDeserializer</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_context_serializer.xhtml">ClContextSerializer</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_convert_fp16_to_fp32_workload.xhtml">ClConvertFp16ToFp32Workload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_convert_fp32_to_fp16_workload.xhtml">ClConvertFp32ToFp16Workload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_convolution2d_workload.xhtml">ClConvolution2dWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_convolution3d_workload.xhtml">ClConvolution3dWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_depth_to_space_workload.xhtml">ClDepthToSpaceWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_depthwise_convolution_workload.xhtml">ClDepthwiseConvolutionWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_dequantize_workload.xhtml">ClDequantizeWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_division_workload.xhtml">ClDivisionWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_exp_workload.xhtml">ClExpWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_fill_workload.xhtml">ClFillWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_floor_float_workload.xhtml">ClFloorFloatWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_fully_connected_workload.xhtml">ClFullyConnectedWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_gather_workload.xhtml">ClGatherWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_import_sub_tensor_handle.xhtml">ClImportSubTensorHandle</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_import_tensor_handle.xhtml">ClImportTensorHandle</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_import_tensor_handle_factory.xhtml">ClImportTensorHandleFactory</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This factory creates ClImportTensorHandles that refer to imported memory tensors. <a href="classarmnn_1_1_cl_import_tensor_handle_factory.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_instance_normalization_workload.xhtml">ClInstanceNormalizationWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_l2_normalization_float_workload.xhtml">ClL2NormalizationFloatWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_layer_support.xhtml">ClLayerSupport</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_logical_and_workload.xhtml">ClLogicalAndWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_logical_not_workload.xhtml">ClLogicalNotWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_logical_or_workload.xhtml">ClLogicalOrWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_log_softmax_workload.xhtml">ClLogSoftmaxWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_log_workload.xhtml">ClLogWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_lstm_float_workload.xhtml">ClLstmFloatWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_maximum_workload.xhtml">ClMaximumWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_mean_workload.xhtml">ClMeanWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_memory_manager.xhtml">ClMemoryManager</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_minimum_workload.xhtml">ClMinimumWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_multiplication_workload.xhtml">ClMultiplicationWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_neg_workload.xhtml">ClNegWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_normalization_float_workload.xhtml">ClNormalizationFloatWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_pad_workload.xhtml">ClPadWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_permute_workload.xhtml">ClPermuteWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_pooling2d_workload.xhtml">ClPooling2dWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_prelu_workload.xhtml">ClPreluWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_q_lstm_workload.xhtml">ClQLstmWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_quantized_lstm_workload.xhtml">ClQuantizedLstmWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_quantize_workload.xhtml">ClQuantizeWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_cl_rank_workload.xhtml">ClRankWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_reduce_workload.xhtml">ClReduceWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_reshape_workload.xhtml">ClReshapeWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_resize_workload.xhtml">ClResizeWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_rsqrt_workload.xhtml">ClRsqrtWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_runtime_unavailable_exception.xhtml">ClRuntimeUnavailableException</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_sin_workload.xhtml">ClSinWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_slice_workload.xhtml">ClSliceWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_softmax_workload.xhtml">ClSoftmaxWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_space_to_batch_nd_workload.xhtml">ClSpaceToBatchNdWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_space_to_depth_workload.xhtml">ClSpaceToDepthWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_splitter_workload.xhtml">ClSplitterWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_stack_workload.xhtml">ClStackWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_strided_slice_workload.xhtml">ClStridedSliceWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_sub_tensor_handle.xhtml">ClSubTensorHandle</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_subtraction_workload.xhtml">ClSubtractionWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_tensor_handle.xhtml">ClTensorHandle</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_tensor_handle_factory.xhtml">ClTensorHandleFactory</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_transpose_convolution2d_workload.xhtml">ClTransposeConvolution2dWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_transpose_workload.xhtml">ClTransposeWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_tuned_parameters.xhtml">ClTunedParameters</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_cl_workload_factory.xhtml">ClWorkloadFactory</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_comparison_descriptor.xhtml">ComparisonDescriptor</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_comparison_descriptor.xhtml" title="A ComparisonDescriptor for the ComparisonLayer. ">ComparisonDescriptor</a> for the <a class="el" href="classarmnn_1_1_comparison_layer.xhtml" title="This layer represents a comparison operation. ">ComparisonLayer</a>. <a href="structarmnn_1_1_comparison_descriptor.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_comparison_layer.xhtml">ComparisonLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a comparison operation. <a href="classarmnn_1_1_comparison_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_comparison_queue_descriptor.xhtml">ComparisonQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_concat_layer.xhtml">ConcatLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a merge operation. <a href="classarmnn_1_1_concat_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_concat_queue_descriptor.xhtml">ConcatQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_constant_layer.xhtml">ConstantLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A layer that the constant data can be bound to. <a href="classarmnn_1_1_constant_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_constant_memory_strategy.xhtml">ConstantMemoryStrategy</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_constant_queue_descriptor.xhtml">ConstantQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_const_passthrough_tensor_handle.xhtml">ConstPassthroughTensorHandle</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_construct_in_place.xhtml">ConstructInPlace</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Disambiguation tag that can be passed to the constructor to indicate that the contained object should be constructed in-place. <a href="structarmnn_1_1_construct_in_place.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_const_tensor.xhtml">ConstTensor</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A tensor defined by a <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> (shape and data type) and an immutable backing store. <a href="classarmnn_1_1_const_tensor.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_const_tensor_handle.xhtml">ConstTensorHandle</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_convert_bf16_to_fp32_layer.xhtml">ConvertBf16ToFp32Layer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer converts data type <a class="el" href="classarmnn_1_1_b_float16.xhtml">BFloat16</a> to Float32. <a href="classarmnn_1_1_convert_bf16_to_fp32_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_convert_bf16_to_fp32_queue_descriptor.xhtml">ConvertBf16ToFp32QueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_convert_fp16_to_fp32_layer.xhtml">ConvertFp16ToFp32Layer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer converts data type Float 16 to Float 32. <a href="classarmnn_1_1_convert_fp16_to_fp32_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_convert_fp16_to_fp32_queue_descriptor.xhtml">ConvertFp16ToFp32QueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_convert_fp32_to_bf16_layer.xhtml">ConvertFp32ToBf16Layer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer converts data type Float32 to <a class="el" href="classarmnn_1_1_b_float16.xhtml">BFloat16</a>. <a href="classarmnn_1_1_convert_fp32_to_bf16_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_convert_fp32_to_bf16_queue_descriptor.xhtml">ConvertFp32ToBf16QueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_convert_fp32_to_fp16_layer.xhtml">ConvertFp32ToFp16Layer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer converts data type Float 32 to Float 16. <a href="classarmnn_1_1_convert_fp32_to_fp16_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_convert_fp32_to_fp16_queue_descriptor.xhtml">ConvertFp32ToFp16QueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_convolution2d_descriptor.xhtml">Convolution2dDescriptor</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_convolution2d_descriptor.xhtml" title="A Convolution2dDescriptor for the Convolution2dLayer. ">Convolution2dDescriptor</a> for the <a class="el" href="classarmnn_1_1_convolution2d_layer.xhtml" title="This layer represents a convolution 2d operation. ">Convolution2dLayer</a>. <a href="structarmnn_1_1_convolution2d_descriptor.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_convolution2d_layer.xhtml">Convolution2dLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a convolution 2d operation. <a href="classarmnn_1_1_convolution2d_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_convolution2d_queue_descriptor.xhtml">Convolution2dQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_convolution3d_descriptor.xhtml">Convolution3dDescriptor</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_convolution3d_descriptor.xhtml" title="A Convolution3dDescriptor for the Convolution3dLayer. ">Convolution3dDescriptor</a> for the <a class="el" href="classarmnn_1_1_convolution3d_layer.xhtml" title="This layer represents a convolution 3d operation. ">Convolution3dLayer</a>. <a href="structarmnn_1_1_convolution3d_descriptor.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_convolution3d_layer.xhtml">Convolution3dLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a convolution 3d operation. <a href="classarmnn_1_1_convolution3d_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_convolution3d_queue_descriptor.xhtml">Convolution3dQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_copy_mem_generic_workload.xhtml">CopyMemGenericWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_debug_layer.xhtml">DebugLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer visualizes the data flowing through the network. <a href="classarmnn_1_1_debug_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_debug_queue_descriptor.xhtml">DebugQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_default_allocator.xhtml">DefaultAllocator</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Default Memory <a class="el" href="structarmnn_1_1_allocator.xhtml">Allocator</a> class returned from IBackendInternal::GetDefaultAllocator(MemorySource) <a href="classarmnn_1_1_default_allocator.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_depth_to_space_layer.xhtml">DepthToSpaceLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a DepthToSpace operation. <a href="classarmnn_1_1_depth_to_space_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_depth_to_space_queue_descriptor.xhtml">DepthToSpaceQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml">DepthwiseConvolution2dDescriptor</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml" title="A DepthwiseConvolution2dDescriptor for the DepthwiseConvolution2dLayer. ">DepthwiseConvolution2dDescriptor</a> for the <a class="el" href="classarmnn_1_1_depthwise_convolution2d_layer.xhtml" title="This layer represents a depthwise convolution 2d operation. ">DepthwiseConvolution2dLayer</a>. <a href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_depthwise_convolution2d_layer.xhtml">DepthwiseConvolution2dLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a depthwise convolution 2d operation. <a href="classarmnn_1_1_depthwise_convolution2d_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_depthwise_convolution2d_queue_descriptor.xhtml">DepthwiseConvolution2dQueueDescriptor</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Depthwise Convolution 2D layer workload data. <a href="structarmnn_1_1_depthwise_convolution2d_queue_descriptor.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_dequantize_layer.xhtml">DequantizeLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer dequantizes the input tensor. <a href="classarmnn_1_1_dequantize_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_dequantize_queue_descriptor.xhtml">DequantizeQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_detection_post_process_descriptor.xhtml">DetectionPostProcessDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_detection_post_process_layer.xhtml">DetectionPostProcessLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a detection postprocess operator. <a href="classarmnn_1_1_detection_post_process_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_detection_post_process_queue_descriptor.xhtml">DetectionPostProcessQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_device_spec.xhtml">DeviceSpec</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_division_layer.xhtml">DivisionLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a division operation. <a href="classarmnn_1_1_division_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_division_queue_descriptor.xhtml">DivisionQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_dot_attribute_set.xhtml">DotAttributeSet</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_dot_base.xhtml">DotBase</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_dot_defaults.xhtml">DotDefaults</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_dot_edge.xhtml">DotEdge</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_dot_graph.xhtml">DotGraph</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_dot_node.xhtml">DotNode</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_dynamic_backend.xhtml">DynamicBackend</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_dynamic_backend_utils.xhtml">DynamicBackendUtils</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_elementwise_base_layer.xhtml">ElementwiseBaseLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">NOTE: this is an abstract class to encapsulate the element wise operations, it does not implement: std::unique_ptr&lt;IWorkload&gt; <a class="el" href="classarmnn_1_1_layer.xhtml#a08d1e10a45f15cd0bd02557be35a3864">Layer::CreateWorkload(const IWorkloadFactory&amp; factory) const </a>= 0; Layer* <a class="el" href="classarmnn_1_1_layer.xhtml#ae89ff455503aa106d00bf34103d2f2e0" title="Creates a dynamically-allocated copy of this layer. ">Clone(Graph&amp; graph) const </a>= 0;. <a href="classarmnn_1_1_elementwise_base_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_elementwise_binary_function.xhtml">ElementwiseBinaryFunction</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_elementwise_unary_descriptor.xhtml">ElementwiseUnaryDescriptor</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_elementwise_unary_descriptor.xhtml" title="A ElementwiseUnaryDescriptor for the ElementwiseUnaryLayer. ">ElementwiseUnaryDescriptor</a> for the <a class="el" href="classarmnn_1_1_elementwise_unary_layer.xhtml" title="This layer represents a elementwiseUnary operation. ">ElementwiseUnaryLayer</a>. <a href="structarmnn_1_1_elementwise_unary_descriptor.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_elementwise_unary_function.xhtml">ElementwiseUnaryFunction</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_elementwise_unary_layer.xhtml">ElementwiseUnaryLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a elementwiseUnary operation. <a href="classarmnn_1_1_elementwise_unary_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_elementwise_unary_queue_descriptor.xhtml">ElementwiseUnaryQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_empty_optional.xhtml">EmptyOptional</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="structarmnn_1_1_empty_optional.xhtml" title="EmptyOptional is used to initialize the Optional class in case we want to have default value for an O...">EmptyOptional</a> is used to initialize the <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> class in case we want to have default value for an <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> in a function declaration. <a href="structarmnn_1_1_empty_optional.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_equal_queue_descriptor.xhtml">EqualQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_erased_layer_names_observable.xhtml">ErasedLayerNamesObservable</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_event.xhtml">Event</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="classarmnn_1_1_event.xhtml" title="Event class records measurements reported by BeginEvent()/EndEvent() and returns measurements when Ev...">Event</a> class records measurements reported by BeginEvent()/EndEvent() and returns measurements when <a class="el" href="classarmnn_1_1_event.xhtml#aa75e3a38ab9fee7b2ad5522e746ad0af" title="Get the recorded measurements calculated between Start() and Stop() ">Event::GetMeasurements()</a> is called. <a href="classarmnn_1_1_event.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_exception.xhtml">Exception</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Base class for all ArmNN exceptions so that users can filter to just those. <a href="classarmnn_1_1_exception.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_execution_frame.xhtml">ExecutionFrame</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1exp.xhtml">exp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_fake_quantization_descriptor.xhtml">FakeQuantizationDescriptor</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_fake_quantization_descriptor.xhtml" title="A FakeQuantizationDescriptor for the FakeQuantizationLayer. ">FakeQuantizationDescriptor</a> for the <a class="el" href="classarmnn_1_1_fake_quantization_layer.xhtml" title="This layer represents a fake quantization operation. ">FakeQuantizationLayer</a>. <a href="structarmnn_1_1_fake_quantization_descriptor.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_fake_quantization_layer.xhtml">FakeQuantizationLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a fake quantization operation. <a href="classarmnn_1_1_fake_quantization_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_fake_quantization_queue_descriptor.xhtml">FakeQuantizationQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_file_not_found_exception.xhtml">FileNotFoundException</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_fill_descriptor.xhtml">FillDescriptor</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_fill_descriptor.xhtml" title="A FillDescriptor for the FillLayer. ">FillDescriptor</a> for the <a class="el" href="classarmnn_1_1_fill_layer.xhtml" title="This layer represents a fill operation. ">FillLayer</a>. <a href="structarmnn_1_1_fill_descriptor.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_fill_layer.xhtml">FillLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a fill operation. <a href="classarmnn_1_1_fill_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_fill_queue_descriptor.xhtml">FillQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_first_input_typed_workload.xhtml">FirstInputTypedWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_f_l_a_t_b_u_f_f_e_r_s___f_i_n_a_l___c_l_a_s_s.xhtml">FLATBUFFERS_FINAL_CLASS</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_float16_decoder.xhtml">Float16Decoder</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_float16_encoder.xhtml">Float16Encoder</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_float32_decoder.xhtml">Float32Decoder</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_float32_encoder.xhtml">Float32Encoder</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_floor_layer.xhtml">FloorLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a floor operation. <a href="classarmnn_1_1_floor_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_floor_queue_descriptor.xhtml">FloorQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_fully_connected_descriptor.xhtml">FullyConnectedDescriptor</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_fully_connected_descriptor.xhtml" title="A FullyConnectedDescriptor for the FullyConnectedLayer. ">FullyConnectedDescriptor</a> for the <a class="el" href="classarmnn_1_1_fully_connected_layer.xhtml" title="This layer represents a fully connected operation. ">FullyConnectedLayer</a>. <a href="structarmnn_1_1_fully_connected_descriptor.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_fully_connected_layer.xhtml">FullyConnectedLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a fully connected operation. <a href="classarmnn_1_1_fully_connected_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_fully_connected_queue_descriptor.xhtml">FullyConnectedQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_gather_descriptor.xhtml">GatherDescriptor</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_gather_descriptor.xhtml" title="A GatherDescriptor for the GatherLayer. ">GatherDescriptor</a> for the <a class="el" href="classarmnn_1_1_gather_layer.xhtml" title="This layer represents a Gather operator. ">GatherLayer</a>. <a href="structarmnn_1_1_gather_descriptor.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_gather_layer.xhtml">GatherLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a Gather operator. <a href="classarmnn_1_1_gather_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_gather_queue_descriptor.xhtml">GatherQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph.xhtml">Graph</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph_observable.xhtml">GraphObservable</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph_validation_exception.xhtml">GraphValidationException</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_greater_queue_descriptor.xhtml">GreaterQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_html_bold.xhtml">HtmlBold</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_html_font.xhtml">HtmlFont</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_html_section.xhtml">HtmlSection</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_html_simple_tag.xhtml">HtmlSimpleTag</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_acl_tensor_handle.xhtml">IAclTensorHandle</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_backend.xhtml">IBackend</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Each backend should implement an <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a>. <a href="classarmnn_1_1_i_backend.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_backend_context.xhtml">IBackendContext</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_backend_internal.xhtml">IBackendInternal</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_backend_model_context.xhtml">IBackendModelContext</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_cl_tensor_handle.xhtml">IClTensorHandle</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_c_l_tensor_proxy.xhtml">ICLTensorProxy</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Interface for a layer that is connectable to other layers via InputSlots and OutputSlots. <a href="classarmnn_1_1_i_connectable_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_custom_allocator.xhtml">ICustomAllocator</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Custom <a class="el" href="structarmnn_1_1_allocator.xhtml">Allocator</a> interface. <a href="classarmnn_1_1_i_custom_allocator.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_device_spec.xhtml">IDeviceSpec</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Device specific knowledge to be passed to the optimizer. <a href="classarmnn_1_1_i_device_spec.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_execution_frame.xhtml">IExecutionFrame</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="classarmnn_1_1_execution_frame.xhtml">ExecutionFrame</a> interface to enqueue a workload computation. <a href="classarmnn_1_1_i_execution_frame.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_gpu_acc_tuned_parameters.xhtml">IGpuAccTunedParameters</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Manages a set of GpuAcc parameters which have been tuned for maximum performance. <a href="classarmnn_1_1_i_gpu_acc_tuned_parameters.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_graph_observable.xhtml">IGraphObservable</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_input_slot.xhtml">IInputSlot</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">An input connection slot for a layer. <a href="classarmnn_1_1_i_input_slot.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_memory_manager.xhtml">IMemoryManager</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_memory_optimizer_strategy.xhtml">IMemoryOptimizerStrategy</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_i_memory_optimizer_strategy_factory.xhtml">IMemoryOptimizerStrategyFactory</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_import_mem_generic_workload.xhtml">ImportMemGenericWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_network.xhtml">INetwork</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Main network class which provides the interface for building up a neural network. <a href="classarmnn_1_1_i_network.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_i_network_properties.xhtml">INetworkProperties</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A layer user-provided data can be bound to (e.g. inputs, outputs). <a href="classarmnn_1_1_input_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_input_slot.xhtml">InputSlot</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_instance_normalization_descriptor.xhtml">InstanceNormalizationDescriptor</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">An <a class="el" href="structarmnn_1_1_instance_normalization_descriptor.xhtml" title="An InstanceNormalizationDescriptor for InstanceNormalizationLayer. ">InstanceNormalizationDescriptor</a> for <a class="el" href="classarmnn_1_1_instance_normalization_layer.xhtml" title="This layer represents an instance normalization operation. ">InstanceNormalizationLayer</a>. <a href="structarmnn_1_1_instance_normalization_descriptor.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_instance_normalization_layer.xhtml">InstanceNormalizationLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents an instance normalization operation. <a href="classarmnn_1_1_instance_normalization_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_instance_normalization_queue_descriptor.xhtml">InstanceNormalizationQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_instrument.xhtml">Instrument</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_int32_decoder.xhtml">Int32Decoder</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_int32_encoder.xhtml">Int32Encoder</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_int32_to_int32t_decoder.xhtml">Int32ToInt32tDecoder</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_int32_to_int32t_encoder.xhtml">Int32ToInt32tEncoder</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_optimized_network.xhtml">IOptimizedNetwork</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_output_slot.xhtml">IOutputSlot</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">An output connection slot for a layer. <a href="classarmnn_1_1_i_output_slot.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_profiler.xhtml">IProfiler</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_runtime.xhtml">IRuntime</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_is_half_type.xhtml">IsHalfType</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_is_memory_source.xhtml">IsMemorySource</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_is_memory_source_3_01_memory_source_01_4.xhtml">IsMemorySource&lt; MemorySource &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_strategy.xhtml">IStrategy</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_subgraph_view_converter.xhtml">ISubgraphViewConverter</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_tensor_handle_factory.xhtml">ITensorHandleFactory</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_workload.xhtml">IWorkload</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Workload interface to enqueue a layer computation. <a href="classarmnn_1_1_i_workload.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_workload_factory.xhtml">IWorkloadFactory</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_json_child_object.xhtml">JsonChildObject</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_json_printer.xhtml">JsonPrinter</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_json_utils.xhtml">JsonUtils</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_l2_normalization_descriptor.xhtml">L2NormalizationDescriptor</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_l2_normalization_descriptor.xhtml" title="A L2NormalizationDescriptor for the L2NormalizationLayer. ">L2NormalizationDescriptor</a> for the <a class="el" href="classarmnn_1_1_l2_normalization_layer.xhtml" title="This layer represents a L2 normalization operation. ">L2NormalizationLayer</a>. <a href="structarmnn_1_1_l2_normalization_descriptor.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_l2_normalization_layer.xhtml">L2NormalizationLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a L2 normalization operation. <a href="classarmnn_1_1_l2_normalization_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_l2_normalization_queue_descriptor.xhtml">L2NormalizationQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_layer.xhtml">Layer</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_layer_support_base.xhtml">LayerSupportBase</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_layer_support_handle.xhtml">LayerSupportHandle</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl.xhtml">LayerTypeOfImpl</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_activation_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::Activation &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_addition_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::Addition &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_arg_min_max_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::ArgMinMax &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_batch_normalization_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::BatchNormalization &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_batch_to_space_nd_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::BatchToSpaceNd &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_cast_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::Cast &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_channel_shuffle_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::ChannelShuffle &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_comparison_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::Comparison &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_concat_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::Concat &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_constant_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::Constant &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_convert_bf16_to_fp32_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::ConvertBf16ToFp32 &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_convert_fp16_to_fp32_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::ConvertFp16ToFp32 &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_convert_fp32_to_bf16_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::ConvertFp32ToBf16 &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_convert_fp32_to_fp16_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::ConvertFp32ToFp16 &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_convolution2d_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::Convolution2d &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_convolution3d_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::Convolution3d &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_debug_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::Debug &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_depth_to_space_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::DepthToSpace &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_depthwise_convolution2d_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::DepthwiseConvolution2d &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_dequantize_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::Dequantize &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_detection_post_process_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::DetectionPostProcess &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_division_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::Division &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_elementwise_unary_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::ElementwiseUnary &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_fake_quantization_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::FakeQuantization &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_fill_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::Fill &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_floor_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::Floor &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_fully_connected_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::FullyConnected &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_gather_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::Gather &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_input_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::Input &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_instance_normalization_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::InstanceNormalization &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_l2_normalization_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::L2Normalization &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_logical_binary_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::LogicalBinary &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_log_softmax_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::LogSoftmax &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_lstm_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::Lstm &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_map_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::Map &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_maximum_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::Maximum &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_mean_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::Mean &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_mem_copy_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::MemCopy &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_mem_import_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::MemImport &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_merge_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::Merge &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_minimum_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::Minimum &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_multiplication_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::Multiplication &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_normalization_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::Normalization &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_output_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::Output &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_pad_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::Pad &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_permute_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::Permute &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_pooling2d_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::Pooling2d &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_pooling3d_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::Pooling3d &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_pre_compiled_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::PreCompiled &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_prelu_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::Prelu &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_q_lstm_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::QLstm &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_quantize_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::Quantize &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_quantized_lstm_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::QuantizedLstm &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_rank_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::Rank &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_reduce_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::Reduce &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_reshape_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::Reshape &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_resize_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::Resize &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_shape_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::Shape &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_slice_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::Slice &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_softmax_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::Softmax &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_space_to_batch_nd_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::SpaceToBatchNd &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_space_to_depth_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::SpaceToDepth &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_splitter_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::Splitter &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_stack_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::Stack &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_stand_in_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::StandIn &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_strided_slice_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::StridedSlice &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_subtraction_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::Subtraction &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_switch_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::Switch &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_transpose_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::Transpose &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_transpose_convolution2d_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::TransposeConvolution2d &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_unidirectional_sequence_lstm_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::UnidirectionalSequenceLstm &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_unmap_01_4.xhtml">LayerTypeOfImpl&lt; LayerType::Unmap &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_layer_validation_exception.xhtml">LayerValidationException</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_layer_visitor_base.xhtml">LayerVisitorBase</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Visitor base class with empty implementations. <a href="classarmnn_1_1_layer_visitor_base.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_layer_with_parameters.xhtml">LayerWithParameters</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_loaded_network.xhtml">LoadedNetwork</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1log.xhtml">log</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_logical_binary_descriptor.xhtml">LogicalBinaryDescriptor</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_logical_binary_descriptor.xhtml" title="A LogicalBinaryDescriptor for the LogicalBinaryLayer. ">LogicalBinaryDescriptor</a> for the <a class="el" href="classarmnn_1_1_logical_binary_layer.xhtml" title="This layer represents a Logical Binary operation. ">LogicalBinaryLayer</a>. <a href="structarmnn_1_1_logical_binary_descriptor.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_logical_binary_function.xhtml">LogicalBinaryFunction</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_logical_binary_layer.xhtml">LogicalBinaryLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a Logical Binary operation. <a href="classarmnn_1_1_logical_binary_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_logical_binary_queue_descriptor.xhtml">LogicalBinaryQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_logical_unary_function.xhtml">LogicalUnaryFunction</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_log_sink.xhtml">LogSink</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_log_softmax_layer.xhtml">LogSoftmaxLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a log softmax operation. <a href="classarmnn_1_1_log_softmax_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_log_softmax_queue_descriptor.xhtml">LogSoftmaxQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_lstm_basic_parameters.xhtml">LstmBasicParameters</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_lstm_descriptor.xhtml">LstmDescriptor</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">An <a class="el" href="structarmnn_1_1_lstm_descriptor.xhtml" title="An LstmDescriptor for the LstmLayer. ">LstmDescriptor</a> for the <a class="el" href="classarmnn_1_1_lstm_layer.xhtml" title="This layer represents a LSTM operation. ">LstmLayer</a>. <a href="structarmnn_1_1_lstm_descriptor.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_lstm_input_params.xhtml">LstmInputParams</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_lstm_input_params_info.xhtml">LstmInputParamsInfo</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_lstm_layer.xhtml">LstmLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a LSTM operation. <a href="classarmnn_1_1_lstm_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_lstm_opt_cifg_parameters.xhtml">LstmOptCifgParameters</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_lstm_opt_layer_norm_parameters.xhtml">LstmOptLayerNormParameters</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_lstm_opt_peephole_parameters.xhtml">LstmOptPeepholeParameters</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_lstm_opt_projection_parameters.xhtml">LstmOptProjectionParameters</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_lstm_queue_descriptor.xhtml">LstmQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_lstm_visitor.xhtml">LstmVisitor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_managed_const_tensor_handle.xhtml">ManagedConstTensorHandle</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_map_layer.xhtml">MapLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a memory copy operation. <a href="classarmnn_1_1_map_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_map_queue_descriptor.xhtml">MapQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_map_workload.xhtml">MapWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1maximum.xhtml">maximum</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_maximum_layer.xhtml">MaximumLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a maximum operation. <a href="classarmnn_1_1_maximum_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_maximum_queue_descriptor.xhtml">MaximumQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_mean_descriptor.xhtml">MeanDescriptor</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_mean_descriptor.xhtml" title="A MeanDescriptor for the MeanLayer. ">MeanDescriptor</a> for the <a class="el" href="classarmnn_1_1_mean_layer.xhtml" title="This layer represents a mean operation. ">MeanLayer</a>. <a href="structarmnn_1_1_mean_descriptor.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_mean_layer.xhtml">MeanLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a mean operation. <a href="classarmnn_1_1_mean_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_mean_queue_descriptor.xhtml">MeanQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_measurement.xhtml">Measurement</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_mem_bin.xhtml">MemBin</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_mem_block.xhtml">MemBlock</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_mem_copy_layer.xhtml">MemCopyLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a memory copy operation. <a href="classarmnn_1_1_mem_copy_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_mem_copy_queue_descriptor.xhtml">MemCopyQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_mem_import_layer.xhtml">MemImportLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a memory import operation. <a href="classarmnn_1_1_mem_import_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_mem_import_queue_descriptor.xhtml">MemImportQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_memory_export_exception.xhtml">MemoryExportException</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_memory_import_exception.xhtml">MemoryImportException</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_memory_manager.xhtml">MemoryManager</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_memory_validation_exception.xhtml">MemoryValidationException</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_mem_sync_queue_descriptor.xhtml">MemSyncQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_merge_layer.xhtml">MergeLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer dequantizes the input tensor. <a href="classarmnn_1_1_merge_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_merge_queue_descriptor.xhtml">MergeQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1minimum.xhtml">minimum</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_minimum_layer.xhtml">MinimumLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a minimum operation. <a href="classarmnn_1_1_minimum_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_minimum_queue_descriptor.xhtml">MinimumQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_mock_backend.xhtml">MockBackend</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_mock_backend_initialiser.xhtml">MockBackendInitialiser</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_mock_backend_profiling_context.xhtml">MockBackendProfilingContext</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_mock_backend_profiling_service.xhtml">MockBackendProfilingService</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_mock_import_backend.xhtml">MockImportBackend</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_mock_import_backend_initialiser.xhtml">MockImportBackendInitialiser</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_mock_import_layer_support.xhtml">MockImportLayerSupport</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_mock_layer_support.xhtml">MockLayerSupport</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_mock_memory_manager.xhtml">MockMemoryManager</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_mock_tensor_handle.xhtml">MockTensorHandle</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_mock_tensor_handle_factory.xhtml">MockTensorHandleFactory</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_mock_workload_factory.xhtml">MockWorkloadFactory</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_multiplication_layer.xhtml">MultiplicationLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a multiplication operation. <a href="classarmnn_1_1_multiplication_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_multiplication_queue_descriptor.xhtml">MultiplicationQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_multi_typed_workload.xhtml">MultiTypedWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_abs_workload.xhtml">NeonAbsWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_activation_workload.xhtml">NeonActivationWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_addition_workload.xhtml">NeonAdditionWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_arg_min_max_workload.xhtml">NeonArgMinMaxWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_backend.xhtml">NeonBackend</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_backend_model_context.xhtml">NeonBackendModelContext</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">The <a class="el" href="classarmnn_1_1_neon_backend_model_context.xhtml" title="The NeonBackendModelContext is used to pass in Neon specific backend ModelOptions. ">NeonBackendModelContext</a> is used to pass in Neon specific backend ModelOptions. <a href="classarmnn_1_1_neon_backend_model_context.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_base_workload.xhtml">NeonBaseWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_batch_normalization_workload.xhtml">NeonBatchNormalizationWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_batch_to_space_nd_workload.xhtml">NeonBatchToSpaceNdWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_cast_workload.xhtml">NeonCastWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_channel_shuffle_workload.xhtml">NeonChannelShuffleWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_comparison_workload.xhtml">NeonComparisonWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_concat_workload.xhtml">NeonConcatWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_constant_workload.xhtml">NeonConstantWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_convert_bf16_to_fp32_workload.xhtml">NeonConvertBf16ToFp32Workload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_convert_fp16_to_fp32_workload.xhtml">NeonConvertFp16ToFp32Workload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_convert_fp32_to_bf16_workload.xhtml">NeonConvertFp32ToBf16Workload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_convert_fp32_to_fp16_workload.xhtml">NeonConvertFp32ToFp16Workload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_convolution2d_workload.xhtml">NeonConvolution2dWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_convolution3d_workload.xhtml">NeonConvolution3dWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_depth_to_space_workload.xhtml">NeonDepthToSpaceWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_depthwise_convolution_workload.xhtml">NeonDepthwiseConvolutionWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_dequantize_workload.xhtml">NeonDequantizeWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_detection_post_process_workload.xhtml">NeonDetectionPostProcessWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_division_workload.xhtml">NeonDivisionWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_exp_workload.xhtml">NeonExpWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_fill_workload.xhtml">NeonFillWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_floor_float_workload.xhtml">NeonFloorFloatWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_fully_connected_workload.xhtml">NeonFullyConnectedWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_gather_workload.xhtml">NeonGatherWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_instance_normalization_workload.xhtml">NeonInstanceNormalizationWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_interceptor_scheduler.xhtml">NeonInterceptorScheduler</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_l2_normalization_float_workload.xhtml">NeonL2NormalizationFloatWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_layer_support.xhtml">NeonLayerSupport</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_logical_and_workload.xhtml">NeonLogicalAndWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_logical_not_workload.xhtml">NeonLogicalNotWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_logical_or_workload.xhtml">NeonLogicalOrWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_log_softmax_workload.xhtml">NeonLogSoftmaxWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_log_workload.xhtml">NeonLogWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_lstm_float_workload.xhtml">NeonLstmFloatWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_maximum_workload.xhtml">NeonMaximumWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_mean_workload.xhtml">NeonMeanWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_memory_manager.xhtml">NeonMemoryManager</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_minimum_workload.xhtml">NeonMinimumWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_multiplication_workload.xhtml">NeonMultiplicationWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_neg_workload.xhtml">NeonNegWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_normalization_float_workload.xhtml">NeonNormalizationFloatWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_pad_workload.xhtml">NeonPadWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_permute_workload.xhtml">NeonPermuteWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_pooling2d_workload.xhtml">NeonPooling2dWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_prelu_workload.xhtml">NeonPreluWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_q_lstm_workload.xhtml">NeonQLstmWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_quantized_lstm_workload.xhtml">NeonQuantizedLstmWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_quantize_workload.xhtml">NeonQuantizeWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_neon_rank_workload.xhtml">NeonRankWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_reduce_workload.xhtml">NeonReduceWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_reshape_workload.xhtml">NeonReshapeWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_resize_workload.xhtml">NeonResizeWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_rsqrt_workload.xhtml">NeonRsqrtWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_sin_workload.xhtml">NeonSinWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_slice_workload.xhtml">NeonSliceWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_softmax_workload.xhtml">NeonSoftmaxWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_space_to_batch_nd_workload.xhtml">NeonSpaceToBatchNdWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_space_to_depth_workload.xhtml">NeonSpaceToDepthWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_splitter_workload.xhtml">NeonSplitterWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_stack_workload.xhtml">NeonStackWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_strided_slice_workload.xhtml">NeonStridedSliceWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_sub_tensor_handle.xhtml">NeonSubTensorHandle</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_subtraction_workload.xhtml">NeonSubtractionWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_tensor_handle.xhtml">NeonTensorHandle</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_tensor_handle_factory.xhtml">NeonTensorHandleFactory</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_timer.xhtml">NeonTimer</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_transpose_convolution2d_workload.xhtml">NeonTransposeConvolution2dWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_transpose_workload.xhtml">NeonTransposeWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_neon_workload_factory.xhtml">NeonWorkloadFactory</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_network_impl.xhtml">NetworkImpl</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Private implementation of <a class="el" href="classarmnn_1_1_i_network.xhtml" title="Main network class which provides the interface for building up a neural network. ...">INetwork</a>. <a href="classarmnn_1_1_network_impl.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_node_content.xhtml">NodeContent</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_normalization_descriptor.xhtml">NormalizationDescriptor</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_normalization_descriptor.xhtml" title="A NormalizationDescriptor for the NormalizationLayer. ">NormalizationDescriptor</a> for the <a class="el" href="classarmnn_1_1_normalization_layer.xhtml" title="This layer represents a normalization operation. ">NormalizationLayer</a>. <a href="structarmnn_1_1_normalization_descriptor.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_normalization_layer.xhtml">NormalizationLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a normalization operation. <a href="classarmnn_1_1_normalization_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_normalization_queue_descriptor.xhtml">NormalizationQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_no_throw_strategy.xhtml">NoThrowStrategy</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_null_descriptor.xhtml">NullDescriptor</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Null Descriptor used as a return value from the <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml" title="Interface for a layer that is connectable to other layers via InputSlots and OutputSlots. ">IConnectableLayer</a> GetParameters method by layers which do not have a descriptor. <a href="structarmnn_1_1_null_descriptor.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_null_pointer_exception.xhtml">NullPointerException</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_null_workload.xhtml">NullWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_open_cl_timer.xhtml">OpenClTimer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="classarmnn_1_1_open_cl_timer.xhtml" title="OpenClTimer instrument that times all OpenCl kernels executed between calls to Start() and Stop()...">OpenClTimer</a> instrument that times all OpenCl kernels executed between calls to <a class="el" href="classarmnn_1_1_open_cl_timer.xhtml#a156f3866ca69d98b4d9e6e1c1b3ec7da" title="Start the OpenCl timer. ">Start()</a> and <a class="el" href="classarmnn_1_1_open_cl_timer.xhtml#a634c58de2126b4a4e6a2a093e60e1290" title="Stop the OpenCl timer. ">Stop()</a>. <a href="classarmnn_1_1_open_cl_timer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_optimization.xhtml">Optimization</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_optimization_result.xhtml">OptimizationResult</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_optimization_views.xhtml">OptimizationViews</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_optimized_network_impl.xhtml">OptimizedNetworkImpl</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_optimize_for_connection.xhtml">OptimizeForConnection</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_optimize_for_connection_impl.xhtml">OptimizeForConnectionImpl</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Wrapper <a class="el" href="classarmnn_1_1_optimization.xhtml">Optimization</a> class that calls Wrapped::Run for every connection BaseType -&gt; ChildType. <a href="classarmnn_1_1_optimize_for_connection_impl.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_optimize_for_exclusive_connection.xhtml">OptimizeForExclusiveConnection</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_optimize_for_exclusive_connection_impl.xhtml">OptimizeForExclusiveConnectionImpl</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Wrapper <a class="el" href="classarmnn_1_1_optimization.xhtml">Optimization</a> class that calls Wrapped::Run for every connection BaseType -&gt; ChildType. <a href="classarmnn_1_1_optimize_for_exclusive_connection_impl.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_optimize_for_type.xhtml">OptimizeForType</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_optimize_for_type_impl.xhtml">OptimizeForTypeImpl</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Wrapper <a class="el" href="classarmnn_1_1_optimization.xhtml">Optimization</a> base class that calls Wrapped::Run() for every layer of type BaseType. <a href="classarmnn_1_1_optimize_for_type_impl.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_optimize_for_type_impl_3_01_layer_00_01_wrapped_01_4.xhtml">OptimizeForTypeImpl&lt; Layer, Wrapped &gt;</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Specialization that calls Wrapped::Run() for any layer type. <a href="classarmnn_1_1_optimize_for_type_impl_3_01_layer_00_01_wrapped_01_4.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_optimizer.xhtml">Optimizer</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_optimizer_options.xhtml">OptimizerOptions</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">ArmNN performs an optimization on each model/network before it gets loaded for execution. <a href="structarmnn_1_1_optimizer_options.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_optional_base.xhtml">OptionalBase</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="classarmnn_1_1_optional_base.xhtml" title="OptionalBase is the common functionality between reference and non-reference optional types...">OptionalBase</a> is the common functionality between reference and non-reference optional types. <a href="classarmnn_1_1_optional_base.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_optional_reference_switch.xhtml">OptionalReferenceSwitch</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">The default implementation is the non-reference case. <a href="classarmnn_1_1_optional_reference_switch.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_optional_reference_switch_3_01true_00_01_t_01_4.xhtml">OptionalReferenceSwitch&lt; true, T &gt;</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This is the special case for reference types. <a href="classarmnn_1_1_optional_reference_switch_3_01true_00_01_t_01_4.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_origins_descriptor.xhtml">OriginsDescriptor</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">An <a class="el" href="structarmnn_1_1_origins_descriptor.xhtml" title="An OriginsDescriptor for the ConcatLayer. ">OriginsDescriptor</a> for the <a class="el" href="classarmnn_1_1_concat_layer.xhtml" title="This layer represents a merge operation. ">ConcatLayer</a>. <a href="structarmnn_1_1_origins_descriptor.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_output_handler.xhtml">OutputHandler</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A layer user-provided data can be bound to (e.g. inputs, outputs). <a href="classarmnn_1_1_output_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_output_slot.xhtml">OutputSlot</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_pad_descriptor.xhtml">PadDescriptor</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_pad_descriptor.xhtml" title="A PadDescriptor for the PadLayer. ">PadDescriptor</a> for the <a class="el" href="classarmnn_1_1_pad_layer.xhtml" title="This layer represents a pad operation. ">PadLayer</a>. <a href="structarmnn_1_1_pad_descriptor.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_pad_layer.xhtml">PadLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a pad operation. <a href="classarmnn_1_1_pad_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_pad_queue_descriptor.xhtml">PadQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_passthrough_tensor_handle.xhtml">PassthroughTensorHandle</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_per_axis_iterator.xhtml">PerAxisIterator</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="classarmnn_1_1_per_axis_iterator.xhtml" title="PerAxisIterator for per-axis quantization. ">PerAxisIterator</a> for per-axis quantization. <a href="classarmnn_1_1_per_axis_iterator.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_permutation_vector.xhtml">PermutationVector</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_permute_descriptor.xhtml">PermuteDescriptor</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_permute_descriptor.xhtml" title="A PermuteDescriptor for the PermuteLayer. ">PermuteDescriptor</a> for the <a class="el" href="classarmnn_1_1_permute_layer.xhtml" title="This layer represents a permutation operation. ">PermuteLayer</a>. <a href="structarmnn_1_1_permute_descriptor.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_permute_layer.xhtml">PermuteLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a permutation operation. <a href="classarmnn_1_1_permute_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_permute_queue_descriptor.xhtml">PermuteQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_polymorphic_downcast_exception.xhtml">PolymorphicDowncastException</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_pooling2d_descriptor.xhtml">Pooling2dDescriptor</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_pooling2d_descriptor.xhtml" title="A Pooling2dDescriptor for the Pooling2dLayer. ">Pooling2dDescriptor</a> for the <a class="el" href="classarmnn_1_1_pooling2d_layer.xhtml" title="This layer represents a pooling 2d operation. ">Pooling2dLayer</a>. <a href="structarmnn_1_1_pooling2d_descriptor.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_pooling2d_layer.xhtml">Pooling2dLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a pooling 2d operation. <a href="classarmnn_1_1_pooling2d_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_pooling2d_queue_descriptor.xhtml">Pooling2dQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_pooling3d_descriptor.xhtml">Pooling3dDescriptor</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_pooling3d_descriptor.xhtml" title="A Pooling3dDescriptor for the Pooling3dLayer. ">Pooling3dDescriptor</a> for the <a class="el" href="classarmnn_1_1_pooling3d_layer.xhtml" title="This layer represents a pooling 3d operation. ">Pooling3dLayer</a>. <a href="structarmnn_1_1_pooling3d_descriptor.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_pooling3d_layer.xhtml">Pooling3dLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a pooling 3d operation. <a href="classarmnn_1_1_pooling3d_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_pooling3d_queue_descriptor.xhtml">Pooling3dQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_pre_compiled_descriptor.xhtml">PreCompiledDescriptor</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_pre_compiled_descriptor.xhtml" title="A PreCompiledDescriptor for the PreCompiledLayer. ">PreCompiledDescriptor</a> for the <a class="el" href="classarmnn_1_1_pre_compiled_layer.xhtml">PreCompiledLayer</a>. <a href="structarmnn_1_1_pre_compiled_descriptor.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_pre_compiled_layer.xhtml">PreCompiledLayer</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_pre_compiled_queue_descriptor.xhtml">PreCompiledQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_predicate_result.xhtml">PredicateResult</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_prelu_layer.xhtml">PreluLayer</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_prelu_queue_descriptor.xhtml">PreluQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_profiler_impl.xhtml">ProfilerImpl</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_profiler_manager.xhtml">ProfilerManager</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_profiling_details.xhtml">ProfilingDetails</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="classarmnn_1_1_profiling_details.xhtml" title="ProfilingDetails class records any details associated with the operator and passes on for outputting ...">ProfilingDetails</a> class records any details associated with the operator and passes on for outputting to the user. <a href="classarmnn_1_1_profiling_details.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_program_builder.xhtml">ProgramBuilder</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_q_a_symm8_decoder.xhtml">QASymm8Decoder</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_q_a_symm8_encoder.xhtml">QASymm8Encoder</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_q_a_symm_s8_decoder.xhtml">QASymmS8Decoder</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_q_a_symm_s8_encoder.xhtml">QASymmS8Encoder</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_q_lstm_basic_parameters.xhtml">QLstmBasicParameters</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_q_lstm_descriptor.xhtml">QLstmDescriptor</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_q_lstm_descriptor.xhtml" title="A QLstmDescriptor for the QLstmLayer. ">QLstmDescriptor</a> for the <a class="el" href="classarmnn_1_1_q_lstm_layer.xhtml" title="This layer represents a QLstm operation. ">QLstmLayer</a>. <a href="structarmnn_1_1_q_lstm_descriptor.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_q_lstm_layer.xhtml">QLstmLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a QLstm operation. <a href="classarmnn_1_1_q_lstm_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_q_lstm_opt_cifg_parameters.xhtml">QLstmOptCifgParameters</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_q_lstm_opt_layer_norm_parameters.xhtml">QLstmOptLayerNormParameters</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_q_lstm_opt_peephole_parameters.xhtml">QLstmOptPeepholeParameters</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_q_lstm_opt_projection_parameters.xhtml">QLstmOptProjectionParameters</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_q_lstm_queue_descriptor.xhtml">QLstmQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_q_symm16_decoder.xhtml">QSymm16Decoder</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_q_symm16_encoder.xhtml">QSymm16Encoder</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_q_symm8_per_axis_decoder.xhtml">QSymm8PerAxisDecoder</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_q_symm8_per_axis_encoder.xhtml">QSymm8PerAxisEncoder</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_q_symm_s8_decoder.xhtml">QSymmS8Decoder</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_q_symm_s8_encoder.xhtml">QSymmS8Encoder</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_quantization_parameters_are_equal.xhtml">QuantizationParametersAreEqual</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_quantized_lstm_input_params.xhtml">QuantizedLstmInputParams</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_quantized_lstm_input_params_info.xhtml">QuantizedLstmInputParamsInfo</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_quantized_lstm_layer.xhtml">QuantizedLstmLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a QuantizedLstm operation. <a href="classarmnn_1_1_quantized_lstm_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_quantized_lstm_parameters.xhtml">QuantizedLstmParameters</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_quantized_lstm_queue_descriptor.xhtml">QuantizedLstmQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_quantized_multiplier_smaller_than_one.xhtml">QuantizedMultiplierSmallerThanOne</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Performs multiplication of an integer with a multiplier which is less than one, using quantized integer arithmetic which is consistent with AndroidNN's CPU executor. <a href="structarmnn_1_1_quantized_multiplier_smaller_than_one.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_quantize_layer.xhtml">QuantizeLayer</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_quantize_queue_descriptor.xhtml">QuantizeQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_queue_descriptor.xhtml">QueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml">QueueDescriptorWithParameters</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_range_tracker.xhtml">RangeTracker</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_rank_layer.xhtml">RankLayer</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_rank_queue_descriptor.xhtml">RankQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_reduce_descriptor.xhtml">ReduceDescriptor</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_reduce_descriptor.xhtml" title="A ReduceDescriptor for the REDUCE operators. ">ReduceDescriptor</a> for the REDUCE operators. <a href="structarmnn_1_1_reduce_descriptor.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_reduce_layer.xhtml">ReduceLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a reduction operation. <a href="classarmnn_1_1_reduce_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_reduce_queue_descriptor.xhtml">ReduceQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_activation_workload.xhtml">RefActivationWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_arg_min_max_workload.xhtml">RefArgMinMaxWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_backend.xhtml">RefBackend</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_base_workload.xhtml">RefBaseWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_batch_normalization_workload.xhtml">RefBatchNormalizationWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_batch_to_space_nd_workload.xhtml">RefBatchToSpaceNdWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_cast_workload.xhtml">RefCastWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_channel_shuffle_workload.xhtml">RefChannelShuffleWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_comparison_workload.xhtml">RefComparisonWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_concat_workload.xhtml">RefConcatWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_constant_workload.xhtml">RefConstantWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_convert_bf16_to_fp32_workload.xhtml">RefConvertBf16ToFp32Workload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_convert_fp16_to_fp32_workload.xhtml">RefConvertFp16ToFp32Workload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_convert_fp32_to_bf16_workload.xhtml">RefConvertFp32ToBf16Workload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_convert_fp32_to_fp16_workload.xhtml">RefConvertFp32ToFp16Workload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_convolution2d_workload.xhtml">RefConvolution2dWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_convolution3d_workload.xhtml">RefConvolution3dWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_debug_workload.xhtml">RefDebugWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_depth_to_space_workload.xhtml">RefDepthToSpaceWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_depthwise_convolution2d_workload.xhtml">RefDepthwiseConvolution2dWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_dequantize_workload.xhtml">RefDequantizeWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_detection_post_process_workload.xhtml">RefDetectionPostProcessWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_elementwise_unary_workload.xhtml">RefElementwiseUnaryWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_elementwise_workload.xhtml">RefElementwiseWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_fake_quantization_float32_workload.xhtml">RefFakeQuantizationFloat32Workload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_fill_workload.xhtml">RefFillWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_floor_workload.xhtml">RefFloorWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_fully_connected_workload.xhtml">RefFullyConnectedWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_gather_workload.xhtml">RefGatherWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_instance_normalization_workload.xhtml">RefInstanceNormalizationWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_l2_normalization_workload.xhtml">RefL2NormalizationWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_layer_support.xhtml">RefLayerSupport</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_logical_binary_workload.xhtml">RefLogicalBinaryWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_logical_unary_workload.xhtml">RefLogicalUnaryWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_log_softmax_workload.xhtml">RefLogSoftmaxWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_lstm_workload.xhtml">RefLstmWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_mean_workload.xhtml">RefMeanWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_memory_manager.xhtml">RefMemoryManager</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_normalization_workload.xhtml">RefNormalizationWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_pad_workload.xhtml">RefPadWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_permute_workload.xhtml">RefPermuteWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_pooling2d_workload.xhtml">RefPooling2dWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_pooling3d_workload.xhtml">RefPooling3dWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_prelu_workload.xhtml">RefPreluWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_q_lstm_workload.xhtml">RefQLstmWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_quantize_workload.xhtml">RefQuantizeWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_ref_rank_workload.xhtml">RefRankWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_reduce_workload.xhtml">RefReduceWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_reshape_workload.xhtml">RefReshapeWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_resize_workload.xhtml">RefResizeWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_ref_shape_workload.xhtml">RefShapeWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_slice_workload.xhtml">RefSliceWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_softmax_workload.xhtml">RefSoftmaxWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_space_to_batch_nd_workload.xhtml">RefSpaceToBatchNdWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_space_to_depth_workload.xhtml">RefSpaceToDepthWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_splitter_workload.xhtml">RefSplitterWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_stack_workload.xhtml">RefStackWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_strided_slice_workload.xhtml">RefStridedSliceWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_tensor_handle.xhtml">RefTensorHandle</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_tensor_handle_factory.xhtml">RefTensorHandleFactory</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_transpose_convolution2d_workload.xhtml">RefTransposeConvolution2dWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_transpose_workload.xhtml">RefTransposeWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_unidirectional_sequence_lstm_workload.xhtml">RefUnidirectionalSequenceLstmWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_ref_workload_factory.xhtml">RefWorkloadFactory</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_reshape_descriptor.xhtml">ReshapeDescriptor</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_reshape_descriptor.xhtml" title="A ReshapeDescriptor for the ReshapeLayer. ">ReshapeDescriptor</a> for the <a class="el" href="classarmnn_1_1_reshape_layer.xhtml" title="This layer represents a reshape operation. ">ReshapeLayer</a>. <a href="structarmnn_1_1_reshape_descriptor.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_reshape_layer.xhtml">ReshapeLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a reshape operation. <a href="classarmnn_1_1_reshape_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_reshape_queue_descriptor.xhtml">ReshapeQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_resize_descriptor.xhtml">ResizeDescriptor</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A ResizeBilinearDescriptor for the ResizeBilinearLayer. <a href="structarmnn_1_1_resize_descriptor.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_resize_layer.xhtml">ResizeLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a resize operation. <a href="classarmnn_1_1_resize_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_resize_queue_descriptor.xhtml">ResizeQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_resolve_type_impl.xhtml">ResolveTypeImpl</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_resolve_type_impl_3_01_data_type_1_1_b_float16_01_4.xhtml">ResolveTypeImpl&lt; DataType::BFloat16 &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_resolve_type_impl_3_01_data_type_1_1_boolean_01_4.xhtml">ResolveTypeImpl&lt; DataType::Boolean &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_resolve_type_impl_3_01_data_type_1_1_float16_01_4.xhtml">ResolveTypeImpl&lt; DataType::Float16 &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_resolve_type_impl_3_01_data_type_1_1_float32_01_4.xhtml">ResolveTypeImpl&lt; DataType::Float32 &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_resolve_type_impl_3_01_data_type_1_1_q_asymm_s8_01_4.xhtml">ResolveTypeImpl&lt; DataType::QAsymmS8 &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_resolve_type_impl_3_01_data_type_1_1_q_asymm_u8_01_4.xhtml">ResolveTypeImpl&lt; DataType::QAsymmU8 &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_resolve_type_impl_3_01_data_type_1_1_q_symm_s16_01_4.xhtml">ResolveTypeImpl&lt; DataType::QSymmS16 &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_resolve_type_impl_3_01_data_type_1_1_q_symm_s8_01_4.xhtml">ResolveTypeImpl&lt; DataType::QSymmS8 &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_resolve_type_impl_3_01_data_type_1_1_signed32_01_4.xhtml">ResolveTypeImpl&lt; DataType::Signed32 &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_resolve_type_impl_3_01_data_type_1_1_signed64_01_4.xhtml">ResolveTypeImpl&lt; DataType::Signed64 &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1rsqrt.xhtml">rsqrt</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_rsqrt_layer.xhtml">RsqrtLayer</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_rsqrt_queue_descriptor.xhtml">RsqrtQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_rule.xhtml">Rule</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_runtime_exception.xhtml">RuntimeException</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_runtime_impl.xhtml">RuntimeImpl</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_scaled_int32_decoder.xhtml">ScaledInt32Decoder</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_scaled_int32_per_axis_decoder.xhtml">ScaledInt32PerAxisDecoder</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_scoped_profiling_event.xhtml">ScopedProfilingEvent</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_scoped_record.xhtml">ScopedRecord</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_scoped_tensor_handle.xhtml">ScopedTensorHandle</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_shape_layer.xhtml">ShapeLayer</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_shape_queue_descriptor.xhtml">ShapeQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_shapes_are_broadcast_compatible.xhtml">ShapesAreBroadcastCompatible</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_shapes_are_same_rank.xhtml">ShapesAreSameRank</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_shapes_are_same_total_size.xhtml">ShapesAreSameTotalSize</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_simple_logger.xhtml">SimpleLogger</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1sin.xhtml">sin</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_single_axis_priority_list.xhtml">SingleAxisPriorityList</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="classarmnn_1_1_single_axis_priority_list.xhtml" title="SingleAxisPriorityList sorts the MemBlocks according to some priority, then trys to place them into a...">SingleAxisPriorityList</a> sorts the MemBlocks according to some priority, then trys to place them into as few bins as possible. <a href="classarmnn_1_1_single_axis_priority_list.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_slice_descriptor.xhtml">SliceDescriptor</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_slice_descriptor.xhtml" title="A SliceDescriptor for the SliceLayer. ">SliceDescriptor</a> for the <a class="el" href="classarmnn_1_1_slice_layer.xhtml">SliceLayer</a>. <a href="structarmnn_1_1_slice_descriptor.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_slice_layer.xhtml">SliceLayer</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_slice_queue_descriptor.xhtml">SliceQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_softmax_descriptor.xhtml">SoftmaxDescriptor</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_softmax_descriptor.xhtml" title="A SoftmaxDescriptor for the SoftmaxLayer. ">SoftmaxDescriptor</a> for the <a class="el" href="classarmnn_1_1_softmax_layer.xhtml" title="This layer represents a softmax operation. ">SoftmaxLayer</a>. <a href="structarmnn_1_1_softmax_descriptor.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_softmax_layer.xhtml">SoftmaxLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a softmax operation. <a href="classarmnn_1_1_softmax_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_softmax_queue_descriptor.xhtml">SoftmaxQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_space_to_batch_nd_descriptor.xhtml">SpaceToBatchNdDescriptor</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_space_to_batch_nd_descriptor.xhtml" title="A SpaceToBatchNdDescriptor for the SpaceToBatchNdLayer. ">SpaceToBatchNdDescriptor</a> for the <a class="el" href="classarmnn_1_1_space_to_batch_nd_layer.xhtml" title="This layer represents a SpaceToBatchNd operation. ">SpaceToBatchNdLayer</a>. <a href="structarmnn_1_1_space_to_batch_nd_descriptor.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_space_to_batch_nd_layer.xhtml">SpaceToBatchNdLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a SpaceToBatchNd operation. <a href="classarmnn_1_1_space_to_batch_nd_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_space_to_batch_nd_queue_descriptor.xhtml">SpaceToBatchNdQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_space_to_depth_descriptor.xhtml">SpaceToDepthDescriptor</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_space_to_depth_descriptor.xhtml" title="A SpaceToDepthDescriptor for the SpaceToDepthLayer. ">SpaceToDepthDescriptor</a> for the <a class="el" href="classarmnn_1_1_space_to_depth_layer.xhtml" title="This layer represents a SpaceToDepth operation. ">SpaceToDepthLayer</a>. <a href="structarmnn_1_1_space_to_depth_descriptor.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_space_to_depth_layer.xhtml">SpaceToDepthLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a SpaceToDepth operation. <a href="classarmnn_1_1_space_to_depth_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_space_to_depth_queue_descriptor.xhtml">SpaceToDepthQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_splitter_layer.xhtml">SplitterLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a split operation. <a href="classarmnn_1_1_splitter_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_splitter_queue_descriptor.xhtml">SplitterQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1sqrt.xhtml">sqrt</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stack_descriptor.xhtml">StackDescriptor</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_stack_descriptor.xhtml" title="A StackDescriptor for the StackLayer. ">StackDescriptor</a> for the <a class="el" href="classarmnn_1_1_stack_layer.xhtml" title="This layer represents a stack operation. ">StackLayer</a>. <a href="structarmnn_1_1_stack_descriptor.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_stack_layer.xhtml">StackLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a stack operation. <a href="classarmnn_1_1_stack_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stack_queue_descriptor.xhtml">StackQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_standard_output_sink.xhtml">StandardOutputSink</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stand_in_descriptor.xhtml">StandInDescriptor</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_stand_in_descriptor.xhtml" title="A StandInDescriptor for the StandIn layer. ">StandInDescriptor</a> for the StandIn layer. <a href="structarmnn_1_1_stand_in_descriptor.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_stand_in_layer.xhtml">StandInLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents an unknown operation in the input graph. <a href="classarmnn_1_1_stand_in_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_strategy_base.xhtml">StrategyBase</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Strategy base class with empty implementations. <a href="classarmnn_1_1_strategy_base.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_strategy_factory.xhtml">StrategyFactory</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_strategy_validator.xhtml">StrategyValidator</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_strided_slice_descriptor.xhtml">StridedSliceDescriptor</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_strided_slice_descriptor.xhtml" title="A StridedSliceDescriptor for the StridedSliceLayer. ">StridedSliceDescriptor</a> for the <a class="el" href="classarmnn_1_1_strided_slice_layer.xhtml" title="This layer represents a strided slice operation. ">StridedSliceLayer</a>. <a href="structarmnn_1_1_strided_slice_descriptor.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_strided_slice_layer.xhtml">StridedSliceLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a strided slice operation. <a href="classarmnn_1_1_strided_slice_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_strided_slice_queue_descriptor.xhtml">StridedSliceQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters.xhtml">StringifyLayerParameters</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="structarmnn_1_1_stringify_layer_parameters.xhtml" title="StringifyLayerParameters allows serializing layer parameters to string. ">StringifyLayerParameters</a> allows serializing layer parameters to string. <a href="structarmnn_1_1_stringify_layer_parameters.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_activation_descriptor_01_4.xhtml">StringifyLayerParameters&lt; ActivationDescriptor &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_batch_normalization_descriptor_01_4.xhtml">StringifyLayerParameters&lt; BatchNormalizationDescriptor &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_batch_to_space_nd_descriptor_01_4.xhtml">StringifyLayerParameters&lt; BatchToSpaceNdDescriptor &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_channel_shuffle_descriptor_01_4.xhtml">StringifyLayerParameters&lt; ChannelShuffleDescriptor &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_comparison_descriptor_01_4.xhtml">StringifyLayerParameters&lt; ComparisonDescriptor &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_convolution2d_descriptor_01_4.xhtml">StringifyLayerParameters&lt; Convolution2dDescriptor &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_convolution3d_descriptor_01_4.xhtml">StringifyLayerParameters&lt; Convolution3dDescriptor &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_depthwise_convolution2d_descriptor_01_4.xhtml">StringifyLayerParameters&lt; DepthwiseConvolution2dDescriptor &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_detection_post_process_descriptor_01_4.xhtml">StringifyLayerParameters&lt; DetectionPostProcessDescriptor &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_elementwise_unary_descriptor_01_4.xhtml">StringifyLayerParameters&lt; ElementwiseUnaryDescriptor &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_fake_quantization_descriptor_01_4.xhtml">StringifyLayerParameters&lt; FakeQuantizationDescriptor &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_fully_connected_descriptor_01_4.xhtml">StringifyLayerParameters&lt; FullyConnectedDescriptor &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_l2_normalization_descriptor_01_4.xhtml">StringifyLayerParameters&lt; L2NormalizationDescriptor &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_lstm_descriptor_01_4.xhtml">StringifyLayerParameters&lt; LstmDescriptor &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_mean_descriptor_01_4.xhtml">StringifyLayerParameters&lt; MeanDescriptor &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_normalization_descriptor_01_4.xhtml">StringifyLayerParameters&lt; NormalizationDescriptor &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_origins_descriptor_01_4.xhtml">StringifyLayerParameters&lt; OriginsDescriptor &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_pad_descriptor_01_4.xhtml">StringifyLayerParameters&lt; PadDescriptor &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_permute_descriptor_01_4.xhtml">StringifyLayerParameters&lt; PermuteDescriptor &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_pooling2d_descriptor_01_4.xhtml">StringifyLayerParameters&lt; Pooling2dDescriptor &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_pooling3d_descriptor_01_4.xhtml">StringifyLayerParameters&lt; Pooling3dDescriptor &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_pre_compiled_descriptor_01_4.xhtml">StringifyLayerParameters&lt; PreCompiledDescriptor &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_reduce_descriptor_01_4.xhtml">StringifyLayerParameters&lt; ReduceDescriptor &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_reshape_descriptor_01_4.xhtml">StringifyLayerParameters&lt; ReshapeDescriptor &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_resize_descriptor_01_4.xhtml">StringifyLayerParameters&lt; ResizeDescriptor &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_softmax_descriptor_01_4.xhtml">StringifyLayerParameters&lt; SoftmaxDescriptor &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_space_to_batch_nd_descriptor_01_4.xhtml">StringifyLayerParameters&lt; SpaceToBatchNdDescriptor &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_space_to_depth_descriptor_01_4.xhtml">StringifyLayerParameters&lt; SpaceToDepthDescriptor &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_stack_descriptor_01_4.xhtml">StringifyLayerParameters&lt; StackDescriptor &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_strided_slice_descriptor_01_4.xhtml">StringifyLayerParameters&lt; StridedSliceDescriptor &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_transpose_convolution2d_descriptor_01_4.xhtml">StringifyLayerParameters&lt; TransposeConvolution2dDescriptor &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_transpose_descriptor_01_4.xhtml">StringifyLayerParameters&lt; TransposeDescriptor &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_stringify_layer_parameters_3_01_views_descriptor_01_4.xhtml">StringifyLayerParameters&lt; ViewsDescriptor &gt;</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_string_mapping.xhtml">StringMapping</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="structarmnn_1_1_string_mapping.xhtml" title="StringMapping is helper class to be able to use strings as template parameters, so this allows simpli...">StringMapping</a> is helper class to be able to use strings as template parameters, so this allows simplifying code which only differs in a string, such as a debug string literal. <a href="structarmnn_1_1_string_mapping.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_subgraph_view.xhtml">SubgraphView</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">The <a class="el" href="classarmnn_1_1_subgraph_view.xhtml" title="The SubgraphView class represents a subgraph of a Graph. ">SubgraphView</a> class represents a subgraph of a <a class="el" href="classarmnn_1_1_graph.xhtml">Graph</a>. <a href="classarmnn_1_1_subgraph_view.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_subgraph_view_selector.xhtml">SubgraphViewSelector</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Algorithm that splits a <a class="el" href="classarmnn_1_1_graph.xhtml">Graph</a> into Subgraphs based on a filtering of layers (e.g. <a href="classarmnn_1_1_subgraph_view_selector.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_subtraction_layer.xhtml">SubtractionLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a subtraction operation. <a href="classarmnn_1_1_subtraction_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_subtraction_queue_descriptor.xhtml">SubtractionQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_switch_layer.xhtml">SwitchLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer calculates both true and false outputs for input. <a href="classarmnn_1_1_switch_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_switch_queue_descriptor.xhtml">SwitchQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_sync_mem_generic_workload.xhtml">SyncMemGenericWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_tensor.xhtml">Tensor</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A tensor defined by a <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> (shape and data type) and a mutable backing store. <a href="classarmnn_1_1_tensor.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_tensor_buffer_array_view.xhtml">TensorBufferArrayView</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_tensor_handle.xhtml">TensorHandle</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_tensor_handle_factory_registry.xhtml">TensorHandleFactoryRegistry</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_tensor_memory.xhtml">TensorMemory</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_tensor_num_dimensions_are_correct.xhtml">TensorNumDimensionsAreCorrect</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_test_batch_normalization_layer_visitor.xhtml">TestBatchNormalizationLayerVisitor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_test_constant_layer_visitor.xhtml">TestConstantLayerVisitor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_test_convolution2d_layer_visitor.xhtml">TestConvolution2dLayerVisitor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_test_depthwise_convolution2d_layer_visitor.xhtml">TestDepthwiseConvolution2dLayerVisitor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_test_fully_connected_layer_vistor.xhtml">TestFullyConnectedLayerVistor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_test_input_layer_visitor.xhtml">TestInputLayerVisitor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_test_layer_visitor.xhtml">TestLayerVisitor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_test_lstm_layer_visitor.xhtml">TestLstmLayerVisitor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_test_output_layer_visitor.xhtml">TestOutputLayerVisitor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_test_q_lstm_layer_visitor.xhtml">TestQLstmLayerVisitor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_test_quantized_lstm_layer_visitor.xhtml">TestQuantizedLstmLayerVisitor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_test_strategy.xhtml">TestStrategy</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_throwing_strategy.xhtml">ThrowingStrategy</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_timeout_exception.xhtml">TimeoutException</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_transform_iterator.xhtml">TransformIterator</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_transpose_convolution2d_descriptor.xhtml">TransposeConvolution2dDescriptor</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_transpose_convolution2d_descriptor.xhtml" title="A TransposeConvolution2dDescriptor for the TransposeConvolution2dLayer. ">TransposeConvolution2dDescriptor</a> for the <a class="el" href="classarmnn_1_1_transpose_convolution2d_layer.xhtml" title="This layer represents a 2D transpose convolution operation. ">TransposeConvolution2dLayer</a>. <a href="structarmnn_1_1_transpose_convolution2d_descriptor.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_transpose_convolution2d_layer.xhtml">TransposeConvolution2dLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a 2D transpose convolution operation. <a href="classarmnn_1_1_transpose_convolution2d_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_transpose_convolution2d_queue_descriptor.xhtml">TransposeConvolution2dQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_transpose_descriptor.xhtml">TransposeDescriptor</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_transpose_descriptor.xhtml" title="A TransposeDescriptor for the TransposeLayer. ">TransposeDescriptor</a> for the <a class="el" href="classarmnn_1_1_transpose_layer.xhtml" title="This layer represents a transpose operation. ">TransposeLayer</a>. <a href="structarmnn_1_1_transpose_descriptor.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_transpose_layer.xhtml">TransposeLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a transpose operation. <a href="classarmnn_1_1_transpose_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_transpose_queue_descriptor.xhtml">TransposeQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_type_any_of.xhtml">TypeAnyOf</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_typed_iterator.xhtml">TypedIterator</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_typed_workload.xhtml">TypedWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_type_is.xhtml">TypeIs</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_type_not_per_axis_quantized.xhtml">TypeNotPerAxisQuantized</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_types_are_equal.xhtml">TypesAreEqual</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_unidirectional_sequence_lstm_layer.xhtml">UnidirectionalSequenceLstmLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a LSTM operation. <a href="classarmnn_1_1_unidirectional_sequence_lstm_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_unidirectional_sequence_lstm_queue_descriptor.xhtml">UnidirectionalSequenceLstmQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_unimplemented_exception.xhtml">UnimplementedException</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_unmap_layer.xhtml">UnmapLayer</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This layer represents a memory copy operation. <a href="classarmnn_1_1_unmap_layer.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_unmap_queue_descriptor.xhtml">UnmapQueueDescriptor</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_unmap_workload.xhtml">UnmapWorkload</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_views_descriptor.xhtml">ViewsDescriptor</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_views_descriptor.xhtml" title="A ViewsDescriptor for the SplitterLayer. ">ViewsDescriptor</a> for the <a class="el" href="classarmnn_1_1_splitter_layer.xhtml" title="This layer represents a split operation. ">SplitterLayer</a>. <a href="structarmnn_1_1_views_descriptor.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_visitor_no_throw_policy.xhtml">VisitorNoThrowPolicy</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_visitor_throwing_policy.xhtml">VisitorThrowingPolicy</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_wall_clock_timer.xhtml">WallClockTimer</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_workload_data_collector.xhtml">WorkloadDataCollector</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_workload_factory_base.xhtml">WorkloadFactoryBase</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Contains information about TensorInfos of a layer. <a href="structarmnn_1_1_workload_info.xhtml#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ac858d91eedb7b4dba1bcd0aa760ab510"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ac858d91eedb7b4dba1bcd0aa760ab510">BackendIdVector</a> = std::vector&lt; <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &gt;</td></tr>
+<tr class="separator:ac858d91eedb7b4dba1bcd0aa760ab510"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1854d9cda81304325664363c1fd0fb27"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a1854d9cda81304325664363c1fd0fb27">BackendIdSet</a> = std::unordered_set&lt; <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &gt;</td></tr>
+<tr class="separator:a1854d9cda81304325664363c1fd0fb27"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4de71c3661093e5c4ae7775114f43413"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a4de71c3661093e5c4ae7775114f43413">NetworkOptions</a> = std::vector&lt; <a class="el" href="structarmnn_1_1_backend_options.xhtml">BackendOptions</a> &gt;</td></tr>
+<tr class="separator:a4de71c3661093e5c4ae7775114f43413"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5b6893cda5b69359a4244c06054da18f"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a5b6893cda5b69359a4244c06054da18f">ModelOptions</a> = std::vector&lt; <a class="el" href="structarmnn_1_1_backend_options.xhtml">BackendOptions</a> &gt;</td></tr>
+<tr class="separator:a5b6893cda5b69359a4244c06054da18f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa9c506b558b8aa33a228b15164f40dc3"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aa9c506b558b8aa33a228b15164f40dc3">BackendCapabilities</a> = <a class="el" href="structarmnn_1_1_backend_options.xhtml">BackendOptions</a></td></tr>
+<tr class="separator:aa9c506b558b8aa33a228b15164f40dc3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ade0af9dacaa52cafdd701bef2e901c77"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ade0af9dacaa52cafdd701bef2e901c77">IBackendInternalUniquePtr</a> = std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_i_backend_internal.xhtml">IBackendInternal</a> &gt;</td></tr>
+<tr class="separator:ade0af9dacaa52cafdd701bef2e901c77"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abb25db39e8d7f30b3736701b65ce514b"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#abb25db39e8d7f30b3736701b65ce514b">MemoryOptimizerStrategiesMapRef</a> = std::unordered_map&lt; <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a>, std::shared_ptr&lt; <a class="el" href="classarmnn_1_1_i_memory_optimizer_strategy.xhtml">IMemoryOptimizerStrategy</a> &gt; &gt;</td></tr>
+<tr class="separator:abb25db39e8d7f30b3736701b65ce514b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a754d43dc24a0fe36ecb3044d8f13a413"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a754d43dc24a0fe36ecb3044d8f13a413">DynamicBackendPtr</a> = std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_dynamic_backend.xhtml">DynamicBackend</a> &gt;</td></tr>
+<tr class="separator:a754d43dc24a0fe36ecb3044d8f13a413"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a65a0ad0a7b807e70295481a7b9cb93ac"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a65a0ad0a7b807e70295481a7b9cb93ac">IBackendContextUniquePtr</a> = std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_i_backend_context.xhtml">IBackendContext</a> &gt;</td></tr>
+<tr class="separator:a65a0ad0a7b807e70295481a7b9cb93ac"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a11fa919c11fe46aad613b2e960fcfe90"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a11fa919c11fe46aad613b2e960fcfe90">ILayerSupportSharedPtr</a> = std::shared_ptr&lt; <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> &gt;</td></tr>
+<tr class="separator:a11fa919c11fe46aad613b2e960fcfe90"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a12bff6d51d63dac1375c89bc8415dc46"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a12bff6d51d63dac1375c89bc8415dc46">IMemoryManagerUniquePtr</a> = std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_i_memory_manager.xhtml">IMemoryManager</a> &gt;</td></tr>
+<tr class="separator:a12bff6d51d63dac1375c89bc8415dc46"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a546bd17050a4147165f295e365d56171"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a546bd17050a4147165f295e365d56171">instead</a> = <a class="el" href="classarmnn_1_1_const_tensor_handle.xhtml">ConstTensorHandle</a></td></tr>
+<tr class="separator:a546bd17050a4147165f295e365d56171"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abaedcfd0ae08790c03bfe8ba7586dd84"><td class="memTemplParams" colspan="2">template&lt;typename QueueDescriptor &gt; </td></tr>
+<tr class="memitem:abaedcfd0ae08790c03bfe8ba7586dd84"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#abaedcfd0ae08790c03bfe8ba7586dd84">FloatWorkload</a> = <a class="el" href="classarmnn_1_1_typed_workload.xhtml">TypedWorkload</a>&lt; <a class="el" href="structarmnn_1_1_queue_descriptor.xhtml">QueueDescriptor</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">armnn::DataType::Float16</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a> &gt;</td></tr>
+<tr class="separator:abaedcfd0ae08790c03bfe8ba7586dd84"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0493144f15b35804a133c9aa0b63fcc9"><td class="memTemplParams" colspan="2">template&lt;typename QueueDescriptor &gt; </td></tr>
+<tr class="memitem:a0493144f15b35804a133c9aa0b63fcc9"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a0493144f15b35804a133c9aa0b63fcc9">Float32Workload</a> = <a class="el" href="classarmnn_1_1_typed_workload.xhtml">TypedWorkload</a>&lt; <a class="el" href="structarmnn_1_1_queue_descriptor.xhtml">QueueDescriptor</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a> &gt;</td></tr>
+<tr class="separator:a0493144f15b35804a133c9aa0b63fcc9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad4d53881107428c301d43b5aad16bfe0"><td class="memTemplParams" colspan="2">template&lt;typename QueueDescriptor &gt; </td></tr>
+<tr class="memitem:ad4d53881107428c301d43b5aad16bfe0"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ad4d53881107428c301d43b5aad16bfe0">Uint8Workload</a> = <a class="el" href="classarmnn_1_1_typed_workload.xhtml">TypedWorkload</a>&lt; <a class="el" href="structarmnn_1_1_queue_descriptor.xhtml">QueueDescriptor</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">armnn::DataType::QAsymmU8</a> &gt;</td></tr>
+<tr class="separator:ad4d53881107428c301d43b5aad16bfe0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3e4b88b993c90b274e0bd268c35d798e"><td class="memTemplParams" colspan="2">template&lt;typename QueueDescriptor &gt; </td></tr>
+<tr class="memitem:a3e4b88b993c90b274e0bd268c35d798e"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a3e4b88b993c90b274e0bd268c35d798e">Int32Workload</a> = <a class="el" href="classarmnn_1_1_typed_workload.xhtml">TypedWorkload</a>&lt; <a class="el" href="structarmnn_1_1_queue_descriptor.xhtml">QueueDescriptor</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">armnn::DataType::Signed32</a> &gt;</td></tr>
+<tr class="separator:a3e4b88b993c90b274e0bd268c35d798e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab539ef5a0c152536da71c8fcc065efb5"><td class="memTemplParams" colspan="2">template&lt;typename QueueDescriptor &gt; </td></tr>
+<tr class="memitem:ab539ef5a0c152536da71c8fcc065efb5"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ab539ef5a0c152536da71c8fcc065efb5">BooleanWorkload</a> = <a class="el" href="classarmnn_1_1_typed_workload.xhtml">TypedWorkload</a>&lt; <a class="el" href="structarmnn_1_1_queue_descriptor.xhtml">QueueDescriptor</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">armnn::DataType::Boolean</a> &gt;</td></tr>
+<tr class="separator:ab539ef5a0c152536da71c8fcc065efb5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a20d2055c37fedf3f39db9facf2c8c697"><td class="memTemplParams" colspan="2">template&lt;typename QueueDescriptor &gt; </td></tr>
+<tr class="memitem:a20d2055c37fedf3f39db9facf2c8c697"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a20d2055c37fedf3f39db9facf2c8c697">BaseFloat32ComparisonWorkload</a> = <a class="el" href="classarmnn_1_1_multi_typed_workload.xhtml">MultiTypedWorkload</a>&lt; <a class="el" href="structarmnn_1_1_queue_descriptor.xhtml">QueueDescriptor</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">armnn::DataType::Boolean</a> &gt;</td></tr>
+<tr class="separator:a20d2055c37fedf3f39db9facf2c8c697"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9cbc0957cf0637cc3fd9702086117cc0"><td class="memTemplParams" colspan="2">template&lt;typename QueueDescriptor &gt; </td></tr>
+<tr class="memitem:a9cbc0957cf0637cc3fd9702086117cc0"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a9cbc0957cf0637cc3fd9702086117cc0">BaseUint8ComparisonWorkload</a> = <a class="el" href="classarmnn_1_1_multi_typed_workload.xhtml">MultiTypedWorkload</a>&lt; <a class="el" href="structarmnn_1_1_queue_descriptor.xhtml">QueueDescriptor</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">armnn::DataType::QAsymmU8</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">armnn::DataType::Boolean</a> &gt;</td></tr>
+<tr class="separator:a9cbc0957cf0637cc3fd9702086117cc0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a96b023ab3b395df841cc706f77c236cc"><td class="memTemplParams" colspan="2">template&lt;typename QueueDescriptor &gt; </td></tr>
+<tr class="memitem:a96b023ab3b395df841cc706f77c236cc"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a96b023ab3b395df841cc706f77c236cc">BFloat16ToFloat32Workload</a> = <a class="el" href="classarmnn_1_1_multi_typed_workload.xhtml">MultiTypedWorkload</a>&lt; <a class="el" href="structarmnn_1_1_queue_descriptor.xhtml">QueueDescriptor</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">armnn::DataType::BFloat16</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a> &gt;</td></tr>
+<tr class="separator:a96b023ab3b395df841cc706f77c236cc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6ef601b454db749320636d9425b1f4c2"><td class="memTemplParams" colspan="2">template&lt;typename QueueDescriptor &gt; </td></tr>
+<tr class="memitem:a6ef601b454db749320636d9425b1f4c2"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a6ef601b454db749320636d9425b1f4c2">Float32ToBFloat16Workload</a> = <a class="el" href="classarmnn_1_1_multi_typed_workload.xhtml">MultiTypedWorkload</a>&lt; <a class="el" href="structarmnn_1_1_queue_descriptor.xhtml">QueueDescriptor</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">armnn::DataType::BFloat16</a> &gt;</td></tr>
+<tr class="separator:a6ef601b454db749320636d9425b1f4c2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a827d59b5a779a8089017802172817f3c"><td class="memTemplParams" colspan="2">template&lt;typename QueueDescriptor &gt; </td></tr>
+<tr class="memitem:a827d59b5a779a8089017802172817f3c"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a827d59b5a779a8089017802172817f3c">Float16ToFloat32Workload</a> = <a class="el" href="classarmnn_1_1_multi_typed_workload.xhtml">MultiTypedWorkload</a>&lt; <a class="el" href="structarmnn_1_1_queue_descriptor.xhtml">QueueDescriptor</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">armnn::DataType::Float16</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a> &gt;</td></tr>
+<tr class="separator:a827d59b5a779a8089017802172817f3c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6486138451112140f98516c0bee18615"><td class="memTemplParams" colspan="2">template&lt;typename QueueDescriptor &gt; </td></tr>
+<tr class="memitem:a6486138451112140f98516c0bee18615"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a6486138451112140f98516c0bee18615">Float32ToFloat16Workload</a> = <a class="el" href="classarmnn_1_1_multi_typed_workload.xhtml">MultiTypedWorkload</a>&lt; <a class="el" href="structarmnn_1_1_queue_descriptor.xhtml">QueueDescriptor</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">armnn::DataType::Float16</a> &gt;</td></tr>
+<tr class="separator:a6486138451112140f98516c0bee18615"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6d4fbf927a9d8e68cab1d7965c7dbc44"><td class="memTemplParams" colspan="2">template&lt;typename QueueDescriptor &gt; </td></tr>
+<tr class="memitem:a6d4fbf927a9d8e68cab1d7965c7dbc44"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a6d4fbf927a9d8e68cab1d7965c7dbc44">Uint8ToFloat32Workload</a> = <a class="el" href="classarmnn_1_1_multi_typed_workload.xhtml">MultiTypedWorkload</a>&lt; <a class="el" href="structarmnn_1_1_queue_descriptor.xhtml">QueueDescriptor</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">armnn::DataType::QAsymmU8</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a> &gt;</td></tr>
+<tr class="separator:a6d4fbf927a9d8e68cab1d7965c7dbc44"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2231ac018fe2c465f2d42fef597d67e7"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a2231ac018fe2c465f2d42fef597d67e7">InputQueueDescriptor</a> = <a class="el" href="structarmnn_1_1_mem_copy_queue_descriptor.xhtml">MemCopyQueueDescriptor</a></td></tr>
+<tr class="separator:a2231ac018fe2c465f2d42fef597d67e7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a37a1a6b381ccc76df203fee023234996"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a37a1a6b381ccc76df203fee023234996">OutputQueueDescriptor</a> = <a class="el" href="structarmnn_1_1_mem_copy_queue_descriptor.xhtml">MemCopyQueueDescriptor</a></td></tr>
+<tr class="separator:a37a1a6b381ccc76df203fee023234996"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a308ba160745ba35e1de8d698d0139eb4"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a308ba160745ba35e1de8d698d0139eb4">MergerQueueDescriptor</a> = <a class="el" href="structarmnn_1_1_concat_queue_descriptor.xhtml">ConcatQueueDescriptor</a></td></tr>
+<tr class="separator:a308ba160745ba35e1de8d698d0139eb4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac14705405cbcdd580df613de6766fe65"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ac14705405cbcdd580df613de6766fe65">LogSoftmaxDescriptor</a> = <a class="el" href="structarmnn_1_1_softmax_descriptor.xhtml">SoftmaxDescriptor</a></td></tr>
+<tr class="memdesc:ac14705405cbcdd580df613de6766fe65"><td class="mdescLeft">&#160;</td><td class="mdescRight">A LogSoftmaxDescriptor for the <a class="el" href="classarmnn_1_1_log_softmax_layer.xhtml" title="This layer represents a log softmax operation. ">LogSoftmaxLayer</a>. <a href="#ac14705405cbcdd580df613de6766fe65">More...</a><br /></td></tr>
+<tr class="separator:ac14705405cbcdd580df613de6766fe65"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3647f60510bc8ddaced01c51b0ee8714"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a3647f60510bc8ddaced01c51b0ee8714">DepthToSpaceDescriptor</a> = <a class="el" href="structarmnn_1_1_space_to_depth_descriptor.xhtml">SpaceToDepthDescriptor</a></td></tr>
+<tr class="memdesc:a3647f60510bc8ddaced01c51b0ee8714"><td class="mdescLeft">&#160;</td><td class="mdescRight">A DepthToSpaceDescriptor for the <a class="el" href="classarmnn_1_1_depth_to_space_layer.xhtml" title="This layer represents a DepthToSpace operation. ">DepthToSpaceLayer</a>. <a href="#a3647f60510bc8ddaced01c51b0ee8714">More...</a><br /></td></tr>
+<tr class="separator:a3647f60510bc8ddaced01c51b0ee8714"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae6c5f1b51bd32133c4dcc632045d6b58"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ae6c5f1b51bd32133c4dcc632045d6b58">UnidirectionalSequenceLstmDescriptor</a> = <a class="el" href="structarmnn_1_1_lstm_descriptor.xhtml">LstmDescriptor</a></td></tr>
+<tr class="separator:ae6c5f1b51bd32133c4dcc632045d6b58"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7863c179ff92feec660c48ab7b95ae55"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a7863c179ff92feec660c48ab7b95ae55">ConcatDescriptor</a> = <a class="el" href="structarmnn_1_1_origins_descriptor.xhtml">OriginsDescriptor</a></td></tr>
+<tr class="separator:a7863c179ff92feec660c48ab7b95ae55"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a003d213dd28b0b8c0f26fbf268ccb975"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a003d213dd28b0b8c0f26fbf268ccb975">MergerDescriptor</a> = <a class="el" href="structarmnn_1_1_origins_descriptor.xhtml">OriginsDescriptor</a></td></tr>
+<tr class="memdesc:a003d213dd28b0b8c0f26fbf268ccb975"><td class="mdescLeft">&#160;</td><td class="mdescRight">MergerDescriptor is deprecated, use ConcatDescriptor instead. <a href="#a003d213dd28b0b8c0f26fbf268ccb975">More...</a><br /></td></tr>
+<tr class="separator:a003d213dd28b0b8c0f26fbf268ccb975"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a60291543fe872b795e71e05bcd835fd1"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a60291543fe872b795e71e05bcd835fd1">SplitterDescriptor</a> = <a class="el" href="structarmnn_1_1_views_descriptor.xhtml">ViewsDescriptor</a></td></tr>
+<tr class="separator:a60291543fe872b795e71e05bcd835fd1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ace74f6f9feb95a964a49d79458232703"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ace74f6f9feb95a964a49d79458232703">INetworkPtr</a> = std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_i_network.xhtml">INetwork</a>, void(*)(<a class="el" href="classarmnn_1_1_i_network.xhtml">INetwork</a> *network)&gt;</td></tr>
+<tr class="separator:ace74f6f9feb95a964a49d79458232703"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a674efcf6cbdb9e831d653ff0e821fb38"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a674efcf6cbdb9e831d653ff0e821fb38">IOptimizedNetworkPtr</a> = std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_i_optimized_network.xhtml">IOptimizedNetwork</a>, void(*)(<a class="el" href="classarmnn_1_1_i_optimized_network.xhtml">IOptimizedNetwork</a> *network)&gt;</td></tr>
+<tr class="separator:a674efcf6cbdb9e831d653ff0e821fb38"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af244057f8225833d8e9dc03949a6f0a2"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#af244057f8225833d8e9dc03949a6f0a2">CompiledBlobDeleter</a> = std::function&lt; void(const void *)&gt;</td></tr>
+<tr class="separator:af244057f8225833d8e9dc03949a6f0a2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af362583b7b4c471c434cb0fdb86c2ae2"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#af362583b7b4c471c434cb0fdb86c2ae2">CompiledBlobPtr</a> = std::unique_ptr&lt; void, <a class="el" href="namespacearmnn.xhtml#af244057f8225833d8e9dc03949a6f0a2">CompiledBlobDeleter</a> &gt;</td></tr>
+<tr class="separator:af362583b7b4c471c434cb0fdb86c2ae2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0d8160388a127c1a23b37bc88dc6e2ec"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a0d8160388a127c1a23b37bc88dc6e2ec">NetworkId</a> = int</td></tr>
+<tr class="separator:a0d8160388a127c1a23b37bc88dc6e2ec"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a150468a02bd7b2d2d061c4aaaee939f0"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a150468a02bd7b2d2d061c4aaaee939f0">IRuntimePtr</a> = std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_i_runtime.xhtml">IRuntime</a>, void(*)(<a class="el" href="classarmnn_1_1_i_runtime.xhtml">IRuntime</a> *runtime)&gt;</td></tr>
+<tr class="separator:a150468a02bd7b2d2d061c4aaaee939f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2d3a708a26ac6d77bf8f15506e89a25a"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a2d3a708a26ac6d77bf8f15506e89a25a">IGpuAccTunedParametersPtr</a> = std::shared_ptr&lt; <a class="el" href="classarmnn_1_1_i_gpu_acc_tuned_parameters.xhtml">IGpuAccTunedParameters</a> &gt;</td></tr>
+<tr class="memdesc:a2d3a708a26ac6d77bf8f15506e89a25a"><td class="mdescLeft">&#160;</td><td class="mdescRight">The following API is replaced by the backend options API. <a href="#a2d3a708a26ac6d77bf8f15506e89a25a">More...</a><br /></td></tr>
+<tr class="separator:a2d3a708a26ac6d77bf8f15506e89a25a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5b05f3b7208ec7cea3338e30057c0bac"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a5b05f3b7208ec7cea3338e30057c0bac">MemorySourceFlags</a> = unsigned int</td></tr>
+<tr class="separator:a5b05f3b7208ec7cea3338e30057c0bac"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a280670a263dc4fd40491f6d0a2737f44"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a280670a263dc4fd40491f6d0a2737f44">BindingPointInfo</a> = std::pair&lt; <a class="el" href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">armnn::LayerBindingId</a>, <a class="el" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> &gt;</td></tr>
+<tr class="separator:a280670a263dc4fd40491f6d0a2737f44"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa01bce88f89975a5a031db4cc8861527"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aa01bce88f89975a5a031db4cc8861527">InputTensors</a> = std::vector&lt; std::pair&lt; <a class="el" href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">LayerBindingId</a>, class <a class="el" href="classarmnn_1_1_const_tensor.xhtml">ConstTensor</a> &gt; &gt;</td></tr>
+<tr class="separator:aa01bce88f89975a5a031db4cc8861527"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8f091a512915d1cb29a4ebf13dfc53ea"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a8f091a512915d1cb29a4ebf13dfc53ea">OutputTensors</a> = std::vector&lt; std::pair&lt; <a class="el" href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">LayerBindingId</a>, class <a class="el" href="classarmnn_1_1_tensor.xhtml">Tensor</a> &gt; &gt;</td></tr>
+<tr class="separator:a8f091a512915d1cb29a4ebf13dfc53ea"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae18caa7ee6287aa7f8c2a5ce6bc92382"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ae18caa7ee6287aa7f8c2a5ce6bc92382">IBackendSharedPtr</a> = std::shared_ptr&lt; <a class="el" href="classarmnn_1_1_i_backend.xhtml">IBackend</a> &gt;</td></tr>
+<tr class="separator:ae18caa7ee6287aa7f8c2a5ce6bc92382"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5a665483e56a688e9f8180accdf72d80"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a5a665483e56a688e9f8180accdf72d80">IBackendUniquePtr</a> = std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_i_backend.xhtml">IBackend</a>, void(*)(<a class="el" href="classarmnn_1_1_i_backend.xhtml">IBackend</a> *backend)&gt;</td></tr>
+<tr class="separator:a5a665483e56a688e9f8180accdf72d80"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab8cf8f9fb6792e654c2d8d8382f6f01b"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">LayerBindingId</a> = int</td></tr>
+<tr class="memdesc:ab8cf8f9fb6792e654c2d8d8382f6f01b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Type of identifiers for bindable layers (inputs, outputs). <a href="#ab8cf8f9fb6792e654c2d8d8382f6f01b">More...</a><br /></td></tr>
+<tr class="separator:ab8cf8f9fb6792e654c2d8d8382f6f01b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1c5ec805688cb558465a82a8d9f56a90"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a1c5ec805688cb558465a82a8d9f56a90">ImportedInputId</a> = unsigned int</td></tr>
+<tr class="separator:a1c5ec805688cb558465a82a8d9f56a90"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac68a434f0e78e33726bfb22a39ec813f"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ac68a434f0e78e33726bfb22a39ec813f">ImportedOutputId</a> = unsigned int</td></tr>
+<tr class="separator:ac68a434f0e78e33726bfb22a39ec813f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afad4088a9a058114ee5f87246f87bf49"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#afad4088a9a058114ee5f87246f87bf49">LayerGuid</a> = profiling::ProfilingGuid</td></tr>
+<tr class="memdesc:afad4088a9a058114ee5f87246f87bf49"><td class="mdescLeft">&#160;</td><td class="mdescRight">Define LayerGuid type. <a href="#afad4088a9a058114ee5f87246f87bf49">More...</a><br /></td></tr>
+<tr class="separator:afad4088a9a058114ee5f87246f87bf49"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a15f3ad9b5e4e3d46b0a6dda246a7bc28"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a15f3ad9b5e4e3d46b0a6dda246a7bc28">DebugCallbackFunction</a> = std::function&lt; void(<a class="el" href="namespacearmnn.xhtml#afad4088a9a058114ee5f87246f87bf49">LayerGuid</a> guid, unsigned int slotIndex, <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> *tensorHandle)&gt;</td></tr>
+<tr class="memdesc:a15f3ad9b5e4e3d46b0a6dda246a7bc28"><td class="mdescLeft">&#160;</td><td class="mdescRight">Define the type of callback for the Debug layer to call. <a href="#a15f3ad9b5e4e3d46b0a6dda246a7bc28">More...</a><br /></td></tr>
+<tr class="separator:a15f3ad9b5e4e3d46b0a6dda246a7bc28"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4b3cb628c15e1eea1b09ec848e9ae8c4"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a4b3cb628c15e1eea1b09ec848e9ae8c4">HighResolutionClock</a> = std::chrono::high_resolution_clock::time_point</td></tr>
+<tr class="memdesc:a4b3cb628c15e1eea1b09ec848e9ae8c4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Define a timer and associated inference ID for recording execution times. <a href="#a4b3cb628c15e1eea1b09ec848e9ae8c4">More...</a><br /></td></tr>
+<tr class="separator:a4b3cb628c15e1eea1b09ec848e9ae8c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a51611ed886390df47733157d0c105453"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a51611ed886390df47733157d0c105453">InferenceTimingPair</a> = std::pair&lt; <a class="el" href="namespacearmnn.xhtml#a4b3cb628c15e1eea1b09ec848e9ae8c4">HighResolutionClock</a>, <a class="el" href="namespacearmnn.xhtml#a4b3cb628c15e1eea1b09ec848e9ae8c4">HighResolutionClock</a> &gt;</td></tr>
+<tr class="separator:a51611ed886390df47733157d0c105453"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a14275495042ea02d0348dd70eeaf3d68"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a14275495042ea02d0348dd70eeaf3d68">TensorInfos</a> = std::vector&lt; <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &gt;</td></tr>
+<tr class="separator:a14275495042ea02d0348dd70eeaf3d68"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a15f53f26b8495b51d0bba3d1bc4efc80"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a15f53f26b8495b51d0bba3d1bc4efc80">WorkloadQueue</a> = std::vector&lt; std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_i_workload.xhtml">IWorkload</a> &gt; &gt;</td></tr>
+<tr class="separator:a15f53f26b8495b51d0bba3d1bc4efc80"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac6e86c1def7f674d3c4cb7f577874aa6"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">Coordinates</a> = std::array&lt; unsigned int, <a class="el" href="namespacearmnn.xhtml#abdcd184ed3bd648bb31d385040cafd5d">MaxNumOfTensorDimensions</a> &gt;</td></tr>
+<tr class="separator:ac6e86c1def7f674d3c4cb7f577874aa6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a293695a94110c1a0eb77e29c22dce79a"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a293695a94110c1a0eb77e29c22dce79a">Dimensions</a> = std::array&lt; unsigned int, <a class="el" href="namespacearmnn.xhtml#abdcd184ed3bd648bb31d385040cafd5d">MaxNumOfTensorDimensions</a> &gt;</td></tr>
+<tr class="separator:a293695a94110c1a0eb77e29c22dce79a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a419086ecb4dc9d0f9e5d8933c87e2ea2"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a419086ecb4dc9d0f9e5d8933c87e2ea2">LayerPriority</a> = unsigned int</td></tr>
+<tr class="separator:a419086ecb4dc9d0f9e5d8933c87e2ea2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2a5caf3721af872f43c7642fec9449bc"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a2a5caf3721af872f43c7642fec9449bc">AdditionalInfoObjectPtr</a> = std::shared_ptr&lt; void &gt;</td></tr>
+<tr class="separator:a2a5caf3721af872f43c7642fec9449bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae73bf7cb78cc552c5511431b0d583f14"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ae73bf7cb78cc552c5511431b0d583f14">PreCompiledObjectDeleter</a> = std::function&lt; void(const void *)&gt;</td></tr>
+<tr class="separator:ae73bf7cb78cc552c5511431b0d583f14"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae3bff3986cb5a50637c9b3238d821f54"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ae3bff3986cb5a50637c9b3238d821f54">PreCompiledObjectPtr</a> = std::unique_ptr&lt; void, <a class="el" href="namespacearmnn.xhtml#ae73bf7cb78cc552c5511431b0d583f14">PreCompiledObjectDeleter</a> &gt;</td></tr>
+<tr class="separator:ae3bff3986cb5a50637c9b3238d821f54"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6b5db6cc9aad8ec0ac7b14f859aacdab"><td class="memTemplParams" colspan="2">template&lt;LayerType Type&gt; </td></tr>
+<tr class="memitem:a6b5db6cc9aad8ec0ac7b14f859aacdab"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a6b5db6cc9aad8ec0ac7b14f859aacdab">LayerTypeOf</a> = typename <a class="el" href="structarmnn_1_1_layer_type_of_impl.xhtml">LayerTypeOfImpl</a>&lt; Type &gt;::Type</td></tr>
+<tr class="separator:a6b5db6cc9aad8ec0ac7b14f859aacdab"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a08eb5e20e6b0ce43c5729e8f88b6a910"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a08eb5e20e6b0ce43c5729e8f88b6a910">NetworkImplPtr</a> = std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_network_impl.xhtml">NetworkImpl</a>, void(*)(<a class="el" href="classarmnn_1_1_network_impl.xhtml">NetworkImpl</a> *network)&gt;</td></tr>
+<tr class="separator:a08eb5e20e6b0ce43c5729e8f88b6a910"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9173495a61a0092b5f38b855f02c3585"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a> = std::map&lt; <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a>, std::unique_ptr&lt; class <a class="el" href="classarmnn_1_1_i_backend_internal.xhtml">IBackendInternal</a> &gt; &gt;</td></tr>
+<tr class="separator:a9173495a61a0092b5f38b855f02c3585"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0743ed5e860c316a20b68ca96301b411"><td class="memTemplParams" colspan="2">template&lt;DataType DT&gt; </td></tr>
+<tr class="memitem:a0743ed5e860c316a20b68ca96301b411"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a0743ed5e860c316a20b68ca96301b411">ResolveType</a> = typename <a class="el" href="structarmnn_1_1_resolve_type_impl.xhtml">ResolveTypeImpl</a>&lt; DT &gt;::Type</td></tr>
+<tr class="separator:a0743ed5e860c316a20b68ca96301b411"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a12f6b97ee3f1060ecb6240e022678a8b"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a12f6b97ee3f1060ecb6240e022678a8b">LoadedNetworks</a> = std::unordered_map&lt; <a class="el" href="namespacearmnn.xhtml#a0d8160388a127c1a23b37bc88dc6e2ec">NetworkId</a>, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_loaded_network.xhtml">LoadedNetwork</a> &gt; &gt;</td></tr>
+<tr class="separator:a12f6b97ee3f1060ecb6240e022678a8b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af55a349b17603163f3dc948928501c00"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#af55a349b17603163f3dc948928501c00">IReportStructure</a> = <a class="el" href="classarmnn_1_1profiling_1_1_i_report_structure.xhtml">profiling::IReportStructure</a></td></tr>
+<tr class="separator:af55a349b17603163f3dc948928501c00"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8c42c6647e31ebe525aeba878d133e45"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a8c42c6647e31ebe525aeba878d133e45">ParameterStringifyFunction</a> = std::function&lt; void(const std::string &amp;name, const std::string &amp;value)&gt;</td></tr>
+<tr class="separator:a8c42c6647e31ebe525aeba878d133e45"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a947e07902b1b5d98b57eeae34053146b"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a947e07902b1b5d98b57eeae34053146b">FactoryId</a> = <a class="el" href="classarmnn_1_1_i_tensor_handle_factory.xhtml#a32f4aa6a7089d877af08928139c2c277">ITensorHandleFactory::FactoryId</a></td></tr>
+<tr class="separator:a947e07902b1b5d98b57eeae34053146b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0f38fa92b2468d5378258a2b074c1a31"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a0f38fa92b2468d5378258a2b074c1a31">Half</a> = half_float::half</td></tr>
+<tr class="separator:a0f38fa92b2468d5378258a2b074c1a31"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afda19bd482bb55233fe27b4c2e044a3d"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#afda19bd482bb55233fe27b4c2e044a3d">CopyAndImportFactoryPairs</a> = std::map&lt; <a class="el" href="classarmnn_1_1_i_tensor_handle_factory.xhtml#a32f4aa6a7089d877af08928139c2c277">ITensorHandleFactory::FactoryId</a>, <a class="el" href="classarmnn_1_1_i_tensor_handle_factory.xhtml#a32f4aa6a7089d877af08928139c2c277">ITensorHandleFactory::FactoryId</a> &gt;</td></tr>
+<tr class="separator:afda19bd482bb55233fe27b4c2e044a3d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af206e37bc077be6083853fd8365b999a"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#af206e37bc077be6083853fd8365b999a">ACLMemManagerOnDemand</a> = std::shared_ptr&lt; arm_compute::MemoryManagerOnDemand &gt;</td></tr>
+<tr class="separator:af206e37bc077be6083853fd8365b999a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab51075960a6cf82a8bb6ee81c9efa97d"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ab51075960a6cf82a8bb6ee81c9efa97d">RefDebugBFloat16Workload</a> = <a class="el" href="classarmnn_1_1_ref_debug_workload.xhtml">RefDebugWorkload</a>&lt; <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a> &gt;</td></tr>
+<tr class="separator:ab51075960a6cf82a8bb6ee81c9efa97d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac8d7aa6e66fb59a839833b160f619228"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ac8d7aa6e66fb59a839833b160f619228">RefDebugFloat16Workload</a> = <a class="el" href="classarmnn_1_1_ref_debug_workload.xhtml">RefDebugWorkload</a>&lt; <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a> &gt;</td></tr>
+<tr class="separator:ac8d7aa6e66fb59a839833b160f619228"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad194629946077375dcce05b2449334c8"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ad194629946077375dcce05b2449334c8">RefDebugFloat32Workload</a> = <a class="el" href="classarmnn_1_1_ref_debug_workload.xhtml">RefDebugWorkload</a>&lt; <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a> &gt;</td></tr>
+<tr class="separator:ad194629946077375dcce05b2449334c8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0c1df21c99a094d2f078ca90047a73ff"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a0c1df21c99a094d2f078ca90047a73ff">RefDebugQAsymmU8Workload</a> = <a class="el" href="classarmnn_1_1_ref_debug_workload.xhtml">RefDebugWorkload</a>&lt; <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a> &gt;</td></tr>
+<tr class="separator:a0c1df21c99a094d2f078ca90047a73ff"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a44ab486f2a7728d75bbf52ffa1025ab5"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a44ab486f2a7728d75bbf52ffa1025ab5">RefDebugQAsymmS8Workload</a> = <a class="el" href="classarmnn_1_1_ref_debug_workload.xhtml">RefDebugWorkload</a>&lt; <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a> &gt;</td></tr>
+<tr class="separator:a44ab486f2a7728d75bbf52ffa1025ab5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae6d1d064ec7d33b2cc5bcc8afafbe193"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ae6d1d064ec7d33b2cc5bcc8afafbe193">RefDebugQSymmS16Workload</a> = <a class="el" href="classarmnn_1_1_ref_debug_workload.xhtml">RefDebugWorkload</a>&lt; <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a> &gt;</td></tr>
+<tr class="separator:ae6d1d064ec7d33b2cc5bcc8afafbe193"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad607a96fafba334ba5bde946947dd0af"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ad607a96fafba334ba5bde946947dd0af">RefDebugQSymmS8Workload</a> = <a class="el" href="classarmnn_1_1_ref_debug_workload.xhtml">RefDebugWorkload</a>&lt; <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">DataType::QSymmS8</a> &gt;</td></tr>
+<tr class="separator:ad607a96fafba334ba5bde946947dd0af"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2b2b0a60cbb51bf3eb9bd2899aee2c86"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a2b2b0a60cbb51bf3eb9bd2899aee2c86">RefDebugSigned32Workload</a> = <a class="el" href="classarmnn_1_1_ref_debug_workload.xhtml">RefDebugWorkload</a>&lt; <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">DataType::Signed32</a> &gt;</td></tr>
+<tr class="separator:a2b2b0a60cbb51bf3eb9bd2899aee2c86"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad6f30c5f3c1297502d240068d97a25b9"><td class="memTemplParams" colspan="2">template&lt;typename DataType = float&gt; </td></tr>
+<tr class="memitem:ad6f30c5f3c1297502d240068d97a25b9"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ad6f30c5f3c1297502d240068d97a25b9">RefAdditionWorkload</a> = <a class="el" href="classarmnn_1_1_ref_elementwise_workload.xhtml">RefElementwiseWorkload</a>&lt; std::plus&lt; <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> &gt;, <a class="el" href="structarmnn_1_1_addition_queue_descriptor.xhtml">AdditionQueueDescriptor</a>, <a class="el" href="structarmnn_1_1_string_mapping.xhtml#a4e7b349a05a558fa6792c71c11a6bf11a5b84f797c82a1ad494549330af517ad5">StringMapping::RefAdditionWorkload_Execute</a> &gt;</td></tr>
+<tr class="separator:ad6f30c5f3c1297502d240068d97a25b9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7d4bff547e5c8ac994932e281ddebda7"><td class="memTemplParams" colspan="2">template&lt;typename DataType = float&gt; </td></tr>
+<tr class="memitem:a7d4bff547e5c8ac994932e281ddebda7"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a7d4bff547e5c8ac994932e281ddebda7">RefSubtractionWorkload</a> = <a class="el" href="classarmnn_1_1_ref_elementwise_workload.xhtml">RefElementwiseWorkload</a>&lt; std::minus&lt; <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> &gt;, <a class="el" href="structarmnn_1_1_subtraction_queue_descriptor.xhtml">SubtractionQueueDescriptor</a>, <a class="el" href="structarmnn_1_1_string_mapping.xhtml#a4e7b349a05a558fa6792c71c11a6bf11a3694ad0341ebb1fe50b78efe13672519">StringMapping::RefSubtractionWorkload_Execute</a> &gt;</td></tr>
+<tr class="separator:a7d4bff547e5c8ac994932e281ddebda7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aeff4433507789642f698fe6873ec4619"><td class="memTemplParams" colspan="2">template&lt;typename DataType = float&gt; </td></tr>
+<tr class="memitem:aeff4433507789642f698fe6873ec4619"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aeff4433507789642f698fe6873ec4619">RefMultiplicationWorkload</a> = <a class="el" href="classarmnn_1_1_ref_elementwise_workload.xhtml">RefElementwiseWorkload</a>&lt; std::multiplies&lt; <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> &gt;, <a class="el" href="structarmnn_1_1_multiplication_queue_descriptor.xhtml">MultiplicationQueueDescriptor</a>, <a class="el" href="structarmnn_1_1_string_mapping.xhtml#a4e7b349a05a558fa6792c71c11a6bf11ab3eb648f0f29bf56db68d80624b9bb6c">StringMapping::RefMultiplicationWorkload_Execute</a> &gt;</td></tr>
+<tr class="separator:aeff4433507789642f698fe6873ec4619"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a49ef5a7147c0b8a89436f1ad110ad2d9"><td class="memTemplParams" colspan="2">template&lt;typename DataType = float&gt; </td></tr>
+<tr class="memitem:a49ef5a7147c0b8a89436f1ad110ad2d9"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a49ef5a7147c0b8a89436f1ad110ad2d9">RefDivisionWorkload</a> = <a class="el" href="classarmnn_1_1_ref_elementwise_workload.xhtml">RefElementwiseWorkload</a>&lt; std::divides&lt; <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> &gt;, <a class="el" href="structarmnn_1_1_division_queue_descriptor.xhtml">DivisionQueueDescriptor</a>, <a class="el" href="structarmnn_1_1_string_mapping.xhtml#a4e7b349a05a558fa6792c71c11a6bf11a69485fd6282ca5ed7d50589f8f759645">StringMapping::RefDivisionWorkload_Execute</a> &gt;</td></tr>
+<tr class="separator:a49ef5a7147c0b8a89436f1ad110ad2d9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a44b17670359a5c896114952e09fcef8d"><td class="memTemplParams" colspan="2">template&lt;typename DataType = float&gt; </td></tr>
+<tr class="memitem:a44b17670359a5c896114952e09fcef8d"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a44b17670359a5c896114952e09fcef8d">RefMaximumWorkload</a> = <a class="el" href="classarmnn_1_1_ref_elementwise_workload.xhtml">RefElementwiseWorkload</a>&lt; <a class="el" href="structarmnn_1_1maximum.xhtml">armnn::maximum</a>&lt; <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> &gt;, <a class="el" href="structarmnn_1_1_maximum_queue_descriptor.xhtml">MaximumQueueDescriptor</a>, <a class="el" href="structarmnn_1_1_string_mapping.xhtml#a4e7b349a05a558fa6792c71c11a6bf11aea93564675347f60a80cf699c177a80e">StringMapping::RefMaximumWorkload_Execute</a> &gt;</td></tr>
+<tr class="separator:a44b17670359a5c896114952e09fcef8d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9df214231409eff795bf8ebd3f5e65ca"><td class="memTemplParams" colspan="2">template&lt;typename DataType = float&gt; </td></tr>
+<tr class="memitem:a9df214231409eff795bf8ebd3f5e65ca"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a9df214231409eff795bf8ebd3f5e65ca">RefMinimumWorkload</a> = <a class="el" href="classarmnn_1_1_ref_elementwise_workload.xhtml">RefElementwiseWorkload</a>&lt; <a class="el" href="structarmnn_1_1minimum.xhtml">armnn::minimum</a>&lt; <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> &gt;, <a class="el" href="structarmnn_1_1_minimum_queue_descriptor.xhtml">MinimumQueueDescriptor</a>, <a class="el" href="structarmnn_1_1_string_mapping.xhtml#a4e7b349a05a558fa6792c71c11a6bf11a9bddcf9777d5ca3ab5e40b3a93559625">StringMapping::RefMinimumWorkload_Execute</a> &gt;</td></tr>
+<tr class="separator:a9df214231409eff795bf8ebd3f5e65ca"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aed5e6ff8fdf785380ed4c8ca21702da3"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aed5e6ff8fdf785380ed4c8ca21702da3">RefPermuteBFloat16Workload</a> = <a class="el" href="classarmnn_1_1_ref_permute_workload.xhtml">RefPermuteWorkload</a>&lt; <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a> &gt;</td></tr>
+<tr class="separator:aed5e6ff8fdf785380ed4c8ca21702da3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad1c0fb6bfa580b04574ab56971b6cbc6"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ad1c0fb6bfa580b04574ab56971b6cbc6">RefPermuteFloat16Workload</a> = <a class="el" href="classarmnn_1_1_ref_permute_workload.xhtml">RefPermuteWorkload</a>&lt; <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a> &gt;</td></tr>
+<tr class="separator:ad1c0fb6bfa580b04574ab56971b6cbc6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a54c3f7c7b9909e828a084f68dc78a031"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a54c3f7c7b9909e828a084f68dc78a031">RefPermuteFloat32Workload</a> = <a class="el" href="classarmnn_1_1_ref_permute_workload.xhtml">RefPermuteWorkload</a>&lt; <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a> &gt;</td></tr>
+<tr class="separator:a54c3f7c7b9909e828a084f68dc78a031"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac89a05afd86920754ef682af60ef9d0d"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ac89a05afd86920754ef682af60ef9d0d">RefPermuteQAsymmS8Workload</a> = <a class="el" href="classarmnn_1_1_ref_permute_workload.xhtml">RefPermuteWorkload</a>&lt; <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a> &gt;</td></tr>
+<tr class="separator:ac89a05afd86920754ef682af60ef9d0d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a50ffe5068ecb2fbf7f73b30ef0d753f8"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a50ffe5068ecb2fbf7f73b30ef0d753f8">RefPermuteQAsymm8Workload</a> = <a class="el" href="classarmnn_1_1_ref_permute_workload.xhtml">RefPermuteWorkload</a>&lt; <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a> &gt;</td></tr>
+<tr class="separator:a50ffe5068ecb2fbf7f73b30ef0d753f8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6ffed93fad525ce1d534cec2cdaee6bd"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a6ffed93fad525ce1d534cec2cdaee6bd">RefPermuteQSymm16Workload</a> = <a class="el" href="classarmnn_1_1_ref_permute_workload.xhtml">RefPermuteWorkload</a>&lt; <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a> &gt;</td></tr>
+<tr class="separator:a6ffed93fad525ce1d534cec2cdaee6bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a031a365fb37880a7f015dab159877a72"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a031a365fb37880a7f015dab159877a72">RefTransposeBFloat16Workload</a> = <a class="el" href="classarmnn_1_1_ref_transpose_workload.xhtml">RefTransposeWorkload</a>&lt; <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a> &gt;</td></tr>
+<tr class="separator:a031a365fb37880a7f015dab159877a72"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aefcfe4efab61267262d1e02cb8af739d"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aefcfe4efab61267262d1e02cb8af739d">RefTransposeFloat16Workload</a> = <a class="el" href="classarmnn_1_1_ref_transpose_workload.xhtml">RefTransposeWorkload</a>&lt; <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a> &gt;</td></tr>
+<tr class="separator:aefcfe4efab61267262d1e02cb8af739d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad67165b4639bd5e50e5bc4538d226b35"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ad67165b4639bd5e50e5bc4538d226b35">RefTransposeFloat32Workload</a> = <a class="el" href="classarmnn_1_1_ref_transpose_workload.xhtml">RefTransposeWorkload</a>&lt; <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a> &gt;</td></tr>
+<tr class="separator:ad67165b4639bd5e50e5bc4538d226b35"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae0b590ea0ad58072eec6e30fc4369d98"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ae0b590ea0ad58072eec6e30fc4369d98">RefTransposeQAsymmS8Workload</a> = <a class="el" href="classarmnn_1_1_ref_transpose_workload.xhtml">RefTransposeWorkload</a>&lt; <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a> &gt;</td></tr>
+<tr class="separator:ae0b590ea0ad58072eec6e30fc4369d98"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1d13693cba12d3e406454b852527fb37"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a1d13693cba12d3e406454b852527fb37">RefTransposeQAsymm8Workload</a> = <a class="el" href="classarmnn_1_1_ref_transpose_workload.xhtml">RefTransposeWorkload</a>&lt; <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a> &gt;</td></tr>
+<tr class="separator:a1d13693cba12d3e406454b852527fb37"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4d9e736b0f2d5f6d66ea0a798366935c"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a4d9e736b0f2d5f6d66ea0a798366935c">RefTransposeQSymm16Workload</a> = <a class="el" href="classarmnn_1_1_ref_transpose_workload.xhtml">RefTransposeWorkload</a>&lt; <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a> &gt;</td></tr>
+<tr class="separator:a4d9e736b0f2d5f6d66ea0a798366935c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr class="memitem:ae2f04a162585c0a5222a537efd5456ae"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456ae">Compute</a> { <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a> = 0,
+<a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64">CpuRef</a> = 1,
+<a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea39f8662ca778258e9c6a14f26fec5ec1">CpuAcc</a> = 2,
+<a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeafaa4524e3df19ada32643ce9a222362b">GpuAcc</a> = 3
+ }<tr class="memdesc:ae2f04a162585c0a5222a537efd5456ae"><td class="mdescLeft">&#160;</td><td class="mdescRight">The Compute enum is now deprecated and it is now being replaced by BackendId. <a href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456ae">More...</a><br /></td></tr>
+</td></tr>
+<tr class="separator:ae2f04a162585c0a5222a537efd5456ae"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a10c50bc964cc8cc559eebcd7df5a8af3"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a10c50bc964cc8cc559eebcd7df5a8af3">CapabilityClass</a> { <a class="el" href="namespacearmnn.xhtml#a10c50bc964cc8cc559eebcd7df5a8af3aa47abd1077ef632a38ada05b6edbf389">PaddingRequired</a> = 1,
+<a class="el" href="namespacearmnn.xhtml#a10c50bc964cc8cc559eebcd7df5a8af3a5a3e0409dae79a7940aade8d399dcd5d">FallbackImportDisabled</a> = 2,
+<a class="el" href="namespacearmnn.xhtml#a10c50bc964cc8cc559eebcd7df5a8af3a280957607e14bb2ccc1155ae6569aee1">CapabilityClassMax</a> = 254
+ }<tr class="memdesc:a10c50bc964cc8cc559eebcd7df5a8af3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Capability class to calculate in the GetCapabilities function so that only the capability in the scope can be choose to calculate. <a href="namespacearmnn.xhtml#a10c50bc964cc8cc559eebcd7df5a8af3">More...</a><br /></td></tr>
+</td></tr>
+<tr class="separator:a10c50bc964cc8cc559eebcd7df5a8af3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aff209afc1dc598da399e3e78617ce016"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aff209afc1dc598da399e3e78617ce016">EdgeStrategy</a> { <a class="el" href="namespacearmnn.xhtml#aff209afc1dc598da399e3e78617ce016aec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a>,
+<a class="el" href="namespacearmnn.xhtml#aff209afc1dc598da399e3e78617ce016a78d1be0baa31e083ae8da99aaedaf650">DirectCompatibility</a>,
+<a class="el" href="namespacearmnn.xhtml#aff209afc1dc598da399e3e78617ce016a46e8b7bfd6fd3c0cb34a100478a39189">ExportToTarget</a>,
+<a class="el" href="namespacearmnn.xhtml#aff209afc1dc598da399e3e78617ce016ac366da48cc11956ae377a77751936852">CopyToTarget</a>
+ }</td></tr>
+<tr class="separator:aff209afc1dc598da399e3e78617ce016"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4dc0adc6737b5944e7671bee71788407"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407">BoostLogSeverityMapping</a> { <br />
+&#160;&#160;<a class="el" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407a04a75036e9d520bb983c5ed03b8d0182">trace</a>,
+<a class="el" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407aad42f6697b035b7580e4fef93be20b4d">debug</a>,
+<a class="el" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>,
+<a class="el" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407a7b83d3f08fa392b79e3f553b585971cd">warning</a>,
+<br />
+&#160;&#160;<a class="el" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acb5e100e5a9a3e7f6d1fd97512215282">error</a>,
+<a class="el" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407adf6402fd9ecc60f5a2159fdf45711cd4">fatal</a>
+<br />
+ }</td></tr>
+<tr class="separator:a4dc0adc6737b5944e7671bee71788407"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a67a0db04d321a74b7e7fcfd3f1a3f70b"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">Status</a> { <a class="el" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70ba505a83f220c02df2f85c3810cd9ceb38">Success</a> = 0,
+<a class="el" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70bae139a585510a502bbf1841cf589f5086">Failure</a> = 1
+ }<tr class="memdesc:a67a0db04d321a74b7e7fcfd3f1a3f70b"><td class="mdescLeft">&#160;</td><td class="mdescRight">enumeration <a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">More...</a><br /></td></tr>
+</td></tr>
+<tr class="separator:a67a0db04d321a74b7e7fcfd3f1a3f70b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad8ed01ff3ff33333d8e19db4d2818bb6"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> { <br />
+&#160;&#160;<a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">Float16</a> = 0,
+<a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">Float32</a> = 1,
+<a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">QAsymmU8</a> = 2,
+<a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">Signed32</a> = 3,
+<br />
+&#160;&#160;<a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">Boolean</a> = 4,
+<a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">QSymmS16</a> = 5,
+<a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">QSymmS8</a> = 6,
+<a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">QAsymmS8</a> = 7,
+<br />
+&#160;&#160;<a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">BFloat16</a> = 8,
+<a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6ae1b3c9c6087a93b07c83e0b04f377a8d">Signed64</a> = 9
+<br />
+ }</td></tr>
+<tr class="separator:ad8ed01ff3ff33333d8e19db4d2818bb6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad1d5cce2d9e9a5d61c243e5c989112e0"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> { <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">NCHW</a> = 1,
+<a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">NHWC</a> = 2,
+<a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a4dd0194b114cbf51da5b3a72569863ef">NDHWC</a> = 3,
+<a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a884e0167ebf9bbe6cfd6ca5ab97ab015">NCDHW</a> = 4
+ }</td></tr>
+<tr class="separator:ad1d5cce2d9e9a5d61c243e5c989112e0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae060224135f57f926cbda9d2732a2b1f"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ae060224135f57f926cbda9d2732a2b1f">ProfilingDetailsMethod</a> { <a class="el" href="namespacearmnn.xhtml#ae060224135f57f926cbda9d2732a2b1faec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a> = 0,
+<a class="el" href="namespacearmnn.xhtml#ae060224135f57f926cbda9d2732a2b1fa497ab261a562e316736c2cb59b839d32">DetailsWithEvents</a> = 1,
+<a class="el" href="namespacearmnn.xhtml#ae060224135f57f926cbda9d2732a2b1fa566666dfc3a9a82da0d7b0816b19f278">DetailsOnly</a> = 2
+ }<tr class="memdesc:ae060224135f57f926cbda9d2732a2b1f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Define the behaviour of the internal profiler when outputting network details. <a href="namespacearmnn.xhtml#ae060224135f57f926cbda9d2732a2b1f">More...</a><br /></td></tr>
+</td></tr>
+<tr class="separator:ae060224135f57f926cbda9d2732a2b1f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8e72227ebe5ac505cf44790f2e6eb488"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a8e72227ebe5ac505cf44790f2e6eb488">QosExecPriority</a> { <a class="el" href="namespacearmnn.xhtml#a8e72227ebe5ac505cf44790f2e6eb488a28d0edd045e05cf5af64e35ae0c4c6ef">Low</a> = 0,
+<a class="el" href="namespacearmnn.xhtml#a8e72227ebe5ac505cf44790f2e6eb488a87f8a6ab85c9ced3702b4ea641ad4bb5">Medium</a> = 1,
+<a class="el" href="namespacearmnn.xhtml#a8e72227ebe5ac505cf44790f2e6eb488a655d20c1ca69519ca647684edbb2db35">High</a> = 2
+ }</td></tr>
+<tr class="separator:a8e72227ebe5ac505cf44790f2e6eb488"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a56297e0f7b215eea46c818cb7528d9ea"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9ea">ActivationFunction</a> { <br />
+&#160;&#160;<a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa21eebb164e4b8b9bcf64fdb4d8d5dff4">Sigmoid</a> = 0,
+<a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa23b68da1de2b77d74da9da2635722a3e">TanH</a> = 1,
+<a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa32a843da6ea40ab3b17a3421ccdf671b">Linear</a> = 2,
+<a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa3d90c0a5ab3fcf8e6f6608cb3d3a1559">ReLu</a> = 3,
+<br />
+&#160;&#160;<a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaabc5a0f0d6e7cf7fca73299dcd46c0f0d">BoundedReLu</a> = 4,
+<a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa6bba7052636d1740303b1b2ef3b53fef">SoftReLu</a> = 5,
+<a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaacb7667f5ec2f6e8a5943b781ba6c2735">LeakyReLu</a> = 6,
+<a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa1e34af023adeb7d5f484f8eb4b9826b6">Abs</a> = 7,
+<br />
+&#160;&#160;<a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaaae77f3ad25595e35b327334d89410054">Sqrt</a> = 8,
+<a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaaceb46ca115d05c51aa5a16a8867c3304">Square</a> = 9,
+<a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaaed67cf7d54c570e4c4891800f085f41d">Elu</a> = 10,
+<a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa0877e5b3fbe9d7569df6399609ed0186">HardSwish</a> = 11
+<br />
+ }</td></tr>
+<tr class="separator:a56297e0f7b215eea46c818cb7528d9ea"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae7e8cbf71db6a490789ca6dcaa8deeae"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeae">ArgMinMaxFunction</a> { <a class="el" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea78d811e98514cd165dda532286610fd2">Min</a> = 0,
+<a class="el" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea6a061313d22e51e0f25b7cd4dc065233">Max</a> = 1
+ }</td></tr>
+<tr class="separator:ae7e8cbf71db6a490789ca6dcaa8deeae"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2d299363c9fc33334c571fa29ca4f58c"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58c">ComparisonOperation</a> { <br />
+&#160;&#160;<a class="el" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58caf5f286e73bda105e538310b3190f75c5">Equal</a> = 0,
+<a class="el" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58ca8768a6821cd735aea4f5b0df88c1fc6a">Greater</a> = 1,
+<a class="el" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58ca6f2f0aefb3d22da0f3839453add5f937">GreaterOrEqual</a> = 2,
+<a class="el" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58ca1cfdf0e8d0c87a228c1f40d9bee7888b">Less</a> = 3,
+<br />
+&#160;&#160;<a class="el" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58caa4cbdbb6070a5abb35fc95ecf1e22c14">LessOrEqual</a> = 4,
+<a class="el" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58ca19bb0af2c3c530538cb41aff7f235b96">NotEqual</a> = 5
+<br />
+ }</td></tr>
+<tr class="separator:a2d299363c9fc33334c571fa29ca4f58c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2da4db0140d1a6dc69c9c82e9ef5379e"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a2da4db0140d1a6dc69c9c82e9ef5379e">LogicalBinaryOperation</a> { <a class="el" href="namespacearmnn.xhtml#a2da4db0140d1a6dc69c9c82e9ef5379ea103aa83df42877d5f9baeafdbf620b55">LogicalAnd</a> = 0,
+<a class="el" href="namespacearmnn.xhtml#a2da4db0140d1a6dc69c9c82e9ef5379ea74ce78827b02c650a20b149765388247">LogicalOr</a> = 1
+ }</td></tr>
+<tr class="separator:a2da4db0140d1a6dc69c9c82e9ef5379e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1cfaa710db2a54673b21d2ea2da757c8"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8">UnaryOperation</a> { <br />
+&#160;&#160;<a class="el" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8a1e34af023adeb7d5f484f8eb4b9826b6">Abs</a> = 0,
+<a class="el" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8acad39a154bffb61175f674d6eefaf6d0">Exp</a> = 1,
+<a class="el" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8aae77f3ad25595e35b327334d89410054">Sqrt</a> = 2,
+<a class="el" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8a09bb7f6e2118c85a6a55bd4bf2beeca4">Rsqrt</a> = 3,
+<br />
+&#160;&#160;<a class="el" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8afb278fa5defd7e699fcbc930c3e76ccd">Neg</a> = 4,
+<a class="el" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8a2a25ebd8c909241e3f7818389b804ecc">LogicalNot</a> = 5,
+<a class="el" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8ace0be71e33226e4c1db2bcea5959f16b">Log</a> = 6,
+<a class="el" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8a0986d137604183312e6d3599578bc6cd">Sin</a> = 7
+<br />
+ }</td></tr>
+<tr class="separator:a1cfaa710db2a54673b21d2ea2da757c8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a961bbfe1db71a848eff5a1f0ab775718"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a961bbfe1db71a848eff5a1f0ab775718">PoolingAlgorithm</a> { <a class="el" href="namespacearmnn.xhtml#a961bbfe1db71a848eff5a1f0ab775718a6a061313d22e51e0f25b7cd4dc065233">Max</a> = 0,
+<a class="el" href="namespacearmnn.xhtml#a961bbfe1db71a848eff5a1f0ab775718ab1897515d548a960afe49ecf66a29021">Average</a> = 1,
+<a class="el" href="namespacearmnn.xhtml#a961bbfe1db71a848eff5a1f0ab775718a7e6aa2d53f6ee2b1a34b017fa403cb76">L2</a> = 2
+ }</td></tr>
+<tr class="separator:a961bbfe1db71a848eff5a1f0ab775718"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abc05539fc6e7907f32ef0fb242e3b3b0"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0">ReduceOperation</a> { <br />
+&#160;&#160;<a class="el" href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0aa0ec87054b5e5b7847d0d8780a01a3d5">Sum</a> = 0,
+<a class="el" href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0a6a061313d22e51e0f25b7cd4dc065233">Max</a> = 1,
+<a class="el" href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0a3d6c9ac08ada31c184094bbc67afe00d">Mean</a> = 2,
+<a class="el" href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0a78d811e98514cd165dda532286610fd2">Min</a> = 3,
+<br />
+&#160;&#160;<a class="el" href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0a362a33c23b08e4a32a4ec53fbb82cccd">Prod</a> = 4
+<br />
+ }</td></tr>
+<tr class="separator:abc05539fc6e7907f32ef0fb242e3b3b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9a2af2f8c4af4f9efa8e79417d505ac4"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a9a2af2f8c4af4f9efa8e79417d505ac4">ResizeMethod</a> { <a class="el" href="namespacearmnn.xhtml#a9a2af2f8c4af4f9efa8e79417d505ac4aaf17c98bbd83c27d6426d2ff3fa81d7f">Bilinear</a> = 0,
+<a class="el" href="namespacearmnn.xhtml#a9a2af2f8c4af4f9efa8e79417d505ac4aaa020331bb30d2fa2ecf7c3a0777823f">NearestNeighbor</a> = 1
+ }</td></tr>
+<tr class="separator:a9a2af2f8c4af4f9efa8e79417d505ac4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8e1f31031ad31cd8cc22d7c9daa32681"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a8e1f31031ad31cd8cc22d7c9daa32681">Dimensionality</a> { <a class="el" href="namespacearmnn.xhtml#a8e1f31031ad31cd8cc22d7c9daa32681a4b7d504abac49ba24b4df86c129d3cbc">NotSpecified</a> = 0,
+<a class="el" href="namespacearmnn.xhtml#a8e1f31031ad31cd8cc22d7c9daa32681ab4b379bf7ded74c07595ccb85bc6fdc3">Specified</a> = 1,
+<a class="el" href="namespacearmnn.xhtml#a8e1f31031ad31cd8cc22d7c9daa32681af60357a8d17e45793298323f1b372a74">Scalar</a> = 2
+ }</td></tr>
+<tr class="separator:a8e1f31031ad31cd8cc22d7c9daa32681"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3888429b6ebc79f9a7df549e5e4d9a2f"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a3888429b6ebc79f9a7df549e5e4d9a2f">PaddingMethod</a> { <a class="el" href="namespacearmnn.xhtml#a3888429b6ebc79f9a7df549e5e4d9a2faad301514192636ad34210adce598a45a">IgnoreValue</a> = 0,
+<a class="el" href="namespacearmnn.xhtml#a3888429b6ebc79f9a7df549e5e4d9a2fa843f2812f595e7ec7c5036e89fde02d6">Exclude</a> = 1
+ }<tr class="memdesc:a3888429b6ebc79f9a7df549e5e4d9a2f"><td class="mdescLeft">&#160;</td><td class="mdescRight">The padding method modifies the output of pooling layers. <a href="namespacearmnn.xhtml#a3888429b6ebc79f9a7df549e5e4d9a2f">More...</a><br /></td></tr>
+</td></tr>
+<tr class="separator:a3888429b6ebc79f9a7df549e5e4d9a2f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a14d24d90ab4ba2956e92e27890ba4c91"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a14d24d90ab4ba2956e92e27890ba4c91">PaddingMode</a> { <a class="el" href="namespacearmnn.xhtml#a14d24d90ab4ba2956e92e27890ba4c91acb17869fe51048b5a5c4c6106551a255">Constant</a> = 0,
+<a class="el" href="namespacearmnn.xhtml#a14d24d90ab4ba2956e92e27890ba4c91a74de3e45e4491e956e8dc18d841d9b00">Reflect</a> = 1,
+<a class="el" href="namespacearmnn.xhtml#a14d24d90ab4ba2956e92e27890ba4c91af334649ef5e5d0ffe200751d07012626">Symmetric</a> = 2
+ }<tr class="memdesc:a14d24d90ab4ba2956e92e27890ba4c91"><td class="mdescLeft">&#160;</td><td class="mdescRight">The padding mode controls whether the padding should be filled with constant values (Constant), or reflect the input, either including the border values (Symmetric) or not (Reflect). <a href="namespacearmnn.xhtml#a14d24d90ab4ba2956e92e27890ba4c91">More...</a><br /></td></tr>
+</td></tr>
+<tr class="separator:a14d24d90ab4ba2956e92e27890ba4c91"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abe18a5033f2ab9c0de82c676b48f5437"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#abe18a5033f2ab9c0de82c676b48f5437">NormalizationAlgorithmChannel</a> { <a class="el" href="namespacearmnn.xhtml#abe18a5033f2ab9c0de82c676b48f5437a810f43f3996922151c39b76143faeecc">Across</a> = 0,
+<a class="el" href="namespacearmnn.xhtml#abe18a5033f2ab9c0de82c676b48f5437a37bac6dce4f46277d89bfa3003e2e39b">Within</a> = 1
+ }</td></tr>
+<tr class="separator:abe18a5033f2ab9c0de82c676b48f5437"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad605d1661fa0d8c7fea651d82fbe11c9"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ad605d1661fa0d8c7fea651d82fbe11c9">NormalizationAlgorithmMethod</a> { <a class="el" href="namespacearmnn.xhtml#ad605d1661fa0d8c7fea651d82fbe11c9ac65d2e51c610dd3853a3c777aa8bfe9d">LocalBrightness</a> = 0,
+<a class="el" href="namespacearmnn.xhtml#ad605d1661fa0d8c7fea651d82fbe11c9aa94d2fcabc6b001015aeddfa19266e6f">LocalContrast</a> = 1
+ }</td></tr>
+<tr class="separator:ad605d1661fa0d8c7fea651d82fbe11c9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adf2e5515c4c36a3e7e46bb8b83c6754e"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#adf2e5515c4c36a3e7e46bb8b83c6754e">OutputShapeRounding</a> { <a class="el" href="namespacearmnn.xhtml#adf2e5515c4c36a3e7e46bb8b83c6754eaf3f6d0343d56ce88ce7958170ed05cb3">Floor</a> = 0,
+<a class="el" href="namespacearmnn.xhtml#adf2e5515c4c36a3e7e46bb8b83c6754ea3237fbc8204064c106cb9080088a17cb">Ceiling</a> = 1
+ }</td></tr>
+<tr class="separator:adf2e5515c4c36a3e7e46bb8b83c6754e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adf57837d00e8352d9b5cc5ab1fb5fee9"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#adf57837d00e8352d9b5cc5ab1fb5fee9">ShapeInferenceMethod</a> { <a class="el" href="namespacearmnn.xhtml#adf57837d00e8352d9b5cc5ab1fb5fee9af6486a22a9bb11959bfae60a3e5174b1">ValidateOnly</a> = 0,
+<a class="el" href="namespacearmnn.xhtml#adf57837d00e8352d9b5cc5ab1fb5fee9a5dd7c525cb1500a2181fd4cc079d7acb">InferAndValidate</a> = 1
+ }<tr class="memdesc:adf57837d00e8352d9b5cc5ab1fb5fee9"><td class="mdescLeft">&#160;</td><td class="mdescRight">The ShapeInferenceMethod modify how the output shapes are treated. <a href="namespacearmnn.xhtml#adf57837d00e8352d9b5cc5ab1fb5fee9">More...</a><br /></td></tr>
+</td></tr>
+<tr class="separator:adf57837d00e8352d9b5cc5ab1fb5fee9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a14fcd7f88d11cea0a018269dca5f9277"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a14fcd7f88d11cea0a018269dca5f9277">MemorySource</a> : uint32_t { <br />
+&#160;&#160;<a class="el" href="namespacearmnn.xhtml#a14fcd7f88d11cea0a018269dca5f9277aec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a> = 0,
+<a class="el" href="namespacearmnn.xhtml#a14fcd7f88d11cea0a018269dca5f9277a1131a914388fac73e5f07b0ba0aad523">Malloc</a> = 1,
+<a class="el" href="namespacearmnn.xhtml#a14fcd7f88d11cea0a018269dca5f9277a966e13d8aabbff3966a5cd28d67b4846">DmaBuf</a> = 2,
+<a class="el" href="namespacearmnn.xhtml#a14fcd7f88d11cea0a018269dca5f9277a7f9067c59dd34aca0ad09a7f283ed1f8">DmaBufProtected</a> = 4,
+<br />
+&#160;&#160;<a class="el" href="namespacearmnn.xhtml#a14fcd7f88d11cea0a018269dca5f9277a4bafe7f8ad22a8eca972a7ac5eb6702e">Gralloc</a> = 5
+<br />
+ }<tr class="memdesc:a14fcd7f88d11cea0a018269dca5f9277"><td class="mdescLeft">&#160;</td><td class="mdescRight">Define the Memory Source to reduce copies. <a href="namespacearmnn.xhtml#a14fcd7f88d11cea0a018269dca5f9277">More...</a><br /></td></tr>
+</td></tr>
+<tr class="separator:a14fcd7f88d11cea0a018269dca5f9277"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7100de49939c3e393101f78d425a98c6"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a7100de49939c3e393101f78d425a98c6">MemBlockStrategyType</a> { <a class="el" href="namespacearmnn.xhtml#a7100de49939c3e393101f78d425a98c6a568437eb3752bdf14546b5c221ba5be7">SingleAxisPacking</a> = 0,
+<a class="el" href="namespacearmnn.xhtml#a7100de49939c3e393101f78d425a98c6ab093fa975bc79c72c686e6d9773a0d1f">MultiAxisPacking</a> = 1
+ }</td></tr>
+<tr class="separator:a7100de49939c3e393101f78d425a98c6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab24d74259a053475f6040dd701a01952"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ab24d74259a053475f6040dd701a01952">BackendCapability</a> : uint32_t { <a class="el" href="namespacearmnn.xhtml#ab24d74259a053475f6040dd701a01952a0be89c9a624a5de3925150e3cd476245">NonConstWeights</a>,
+<a class="el" href="namespacearmnn.xhtml#ab24d74259a053475f6040dd701a01952ac7fdc1b70472b8558fdba30db193d58f">AsyncExecution</a>
+ }<tr class="memdesc:ab24d74259a053475f6040dd701a01952"><td class="mdescLeft">&#160;</td><td class="mdescRight">BackendCapability class. <a href="namespacearmnn.xhtml#ab24d74259a053475f6040dd701a01952">More...</a><br /></td></tr>
+</td></tr>
+<tr class="separator:ab24d74259a053475f6040dd701a01952"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a56943a0946e5f15e5e58054b8e7a04a4"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> { <br />
+&#160;&#160;<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a9dce5fd6b5c1ec5baca837bbd273b33c">X</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4aa9a62e70841c4d06dd16306a85700d36">Activation</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a7c5531bbefed0945814f874baf9e0e0f">Addition</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a2139684546b147c106b329f41547640c">ArgMinMax</a>,
+<br />
+&#160;&#160;<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4ae4743c3ec15d1d84169b17264634692e">BatchNormalization</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a6ee06c6045d0c5b6565a247955ef0fc2">BatchToSpaceNd</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4af6c0e3a1c3cfabd32ae8d3ae741fcf0a">Comparison</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4ae20f0f2826a6549809f050b86274567f">Concat</a>,
+<br />
+&#160;&#160;<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4acb17869fe51048b5a5c4c6106551a255">Constant</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a2ba4c46787312a2467153f40c542851a">ConvertBf16ToFp32</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a912a4b4d73726c282e3f79aa2c390d6c">ConvertFp16ToFp32</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a6512859957de2cf2a5fe4dccb07bd9da">ConvertFp32ToBf16</a>,
+<br />
+&#160;&#160;<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4addf4f83b056acd5549949fc0350e9aad">ConvertFp32ToFp16</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4adb033d2f81b68f9a17e8f62de69fed4a">Convolution2d</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4aa603905470e2a5b8c13e96b579ef0dba">Debug</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a731729ad1b2c0eb9399b62c770b3482d">DepthToSpace</a>,
+<br />
+&#160;&#160;<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4af97adbfc88b7012a0243215b1076e7e7">DepthwiseConvolution2d</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a9bc35e069257a508e14ed82965a8661d">Dequantize</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a1db19222ac424bd7162142ddf929fd2a">DetectionPostProcess</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a3025cdaab2deb0bb2cd642449e570833">Division</a>,
+<br />
+&#160;&#160;<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4abcd30d7ea97ad20c2cddc0f47e6b70c7">ElementwiseUnary</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a3489c7b05e180496cb2ce8ac73887f48">FakeQuantization</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4adb3e3f51c9107e26c9bccf9a188ce2ed">Fill</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4af3f6d0343d56ce88ce7958170ed05cb3">Floor</a>,
+<br />
+&#160;&#160;<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4acab78faff25393e9defd1911cb58133e">FullyConnected</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4aad22c799930d644e8468fe44c0312d53">Gather</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a324118a6721dd6b8a9b9f4e327df2bf5">Input</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a21baa4498161d195f5bb2e3627344ba4">InstanceNormalization</a>,
+<br />
+&#160;&#160;<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a1189467870bc421ae59277e750263eb2">L2Normalization</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4af4f53c8297dc1cb53d4e6f8151070a30">LogicalBinary</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4ac21dbda57d88c21ec9857f5d1522c488">LogSoftmax</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a06b091bc9aea697ba473c71f0bb55925">Lstm</a>,
+<br />
+&#160;&#160;<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a91880b71ea6d007439b7bc7c320b5c25">QLstm</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a46f3ea056caa3126b91f3f70beea068c">Map</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a8321e79c278ec510f63675c040594892">Maximum</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a3d6c9ac08ada31c184094bbc67afe00d">Mean</a>,
+<br />
+&#160;&#160;<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a4dd48794eb3305a0f5aece88b111a97b">MemCopy</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a115bfc5d633eae55c67f9588acdd2bf9">MemImport</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a68be4837f6c739877233e527a996dd00">Merge</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4aa1d0ec6d56f8833a078b5a7ac4caf2d4">Minimum</a>,
+<br />
+&#160;&#160;<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a27d1a1f7b7c2180e5b20ce9e3d00e2dd">Multiplication</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4aac61f2e17250a818dee4d12b112aa88f">Normalization</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a29c2c02a361c9d7028472e5d92cd4a54">Output</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4ade43468adaf6acb2c38ebc0c1176f82f">Pad</a>,
+<br />
+&#160;&#160;<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4afa662c6eb71caef475b2b981ce8eccd7">Permute</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4ad662867a41bfb30b9f75dda2b5849001">Pooling2d</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a1ba143ebe524d46181a4b53470693278">PreCompiled</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a0c5967f09e0669c840ebb1ed0da85e32">Prelu</a>,
+<br />
+&#160;&#160;<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4aca39930e22f40d10155a57dba32240bb">Quantize</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a890a37ff3bfe123414ba7e6f052b49f3">QuantizedLstm</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4aa7c59ccedc6a3bd90c17f3b990afefad">Reshape</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a021da1b20f73dc252361a54d80497ef3">Rank</a>,
+<br />
+&#160;&#160;<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a9d723d04c40bfd81835c0766a698cf63">Resize</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4aec4875f03ff0bb0b26cf76ac7f41e3c8">Reduce</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4ad140d37ad98c12ccd8e1c432f548bcdb">Slice</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a31d953b9d49a6b4378f45097047976d0">Softmax</a>,
+<br />
+&#160;&#160;<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a337c392144dca0d18290c6b4711a2279">SpaceToBatchNd</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a5e7ff12da912dc79e7e547281823fa4a">SpaceToDepth</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a41cb9b797ebc6f6f6314e3ded935f4cf">Splitter</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a2187e1021a911b3807cc1bea2eb1a9ca">Stack</a>,
+<br />
+&#160;&#160;<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a93bca63ecbb003649425dd0e4ba79a99">StandIn</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4aa31904f2b3479b5a00137fd985974b4d">StridedSlice</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a6eb8b8b560161603402c0238b3a7d8b0">Subtraction</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4abbc155fb2b111bf61c4f5ff892915e6b">Switch</a>,
+<br />
+&#160;&#160;<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4aaf70b1ac863830a4e1ce6268c8399f54">Transpose</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a71b23d26c0f5d20416d6c77754f9806a">TransposeConvolution2d</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a48180ddd584de21589006d56a86d3410">Unmap</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a4cd9f3996d60790cd11c04f842ebc43c">Cast</a>,
+<br />
+&#160;&#160;<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a880c1273b27d27cfc82004c3a4b205c9">Shape</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a300124b2433e0376ec4b19251ac3a9e5">UnidirectionalSequenceLstm</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a0ca5f33c1d35fd4105d3a26a2823f9dd">ChannelShuffle</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a583550d0f265fd3756f7de0e42c51953">Convolution3d</a>,
+<br />
+&#160;&#160;<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a2b3140dc366b9fcd25ed786a79d1817c">Pooling3d</a>,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4ae66a93a31fb93839c8369265cd44695c">FirstLayer</a> = Activation,
+<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a33cae35d37c1b558ecd35dd5e37dd80f">LastLayer</a> = UnidirectionalSequenceLstm
+<br />
+ }<tr class="memdesc:a56943a0946e5f15e5e58054b8e7a04a4"><td class="mdescLeft">&#160;</td><td class="mdescRight">When adding a new layer, adapt also the LastLayer enum value in the enum class LayerType below. <a href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">More...</a><br /></td></tr>
+</td></tr>
+<tr class="separator:a56943a0946e5f15e5e58054b8e7a04a4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a93a3ba385cad27c4774e5fe64c025d3d"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3d">LogSeverity</a> { <br />
+&#160;&#160;<a class="el" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3dadd4ec0ac4e58f7c32a01244ae91150b1">Trace</a>,
+<a class="el" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3daa603905470e2a5b8c13e96b579ef0dba">Debug</a>,
+<a class="el" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da4059b0251f66a18cb56f544728796875">Info</a>,
+<a class="el" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da0eaadb4fcb48a0a0ed7bc9868be9fbaa">Warning</a>,
+<br />
+&#160;&#160;<a class="el" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da902b0d55fddef6f8d651fe1035b7d4bd">Error</a>,
+<a class="el" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da882384ec38ce8d9582b57e70861730e4">Fatal</a>
+<br />
+ }</td></tr>
+<tr class="separator:a93a3ba385cad27c4774e5fe64c025d3d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a34eaed09302a4d7bfe930c13a7673e0b"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a34eaed09302a4d7bfe930c13a7673e0b">GraphEvent</a> { <a class="el" href="namespacearmnn.xhtml#a34eaed09302a4d7bfe930c13a7673e0ba23c3efdd3f80798660ecf0b9af6dd5dd">LayerAdded</a>,
+<a class="el" href="namespacearmnn.xhtml#a34eaed09302a4d7bfe930c13a7673e0bad6e393dc30fd33cbcb5f6ab199093528">LayerErased</a>
+ }</td></tr>
+<tr class="separator:a34eaed09302a4d7bfe930c13a7673e0b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4e2dd387ba6f0dc5164b4cdf8de3262a"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a4e2dd387ba6f0dc5164b4cdf8de3262a">JsonObjectType</a> { <a class="el" href="namespacearmnn.xhtml#a4e2dd387ba6f0dc5164b4cdf8de3262aa911842b19d8b2f9bbed8cfe909d52975">Measurement</a>,
+<a class="el" href="namespacearmnn.xhtml#a4e2dd387ba6f0dc5164b4cdf8de3262aaa4ecfc70574394990cf17bd83df499f7">Event</a>,
+<a class="el" href="namespacearmnn.xhtml#a4e2dd387ba6f0dc5164b4cdf8de3262aaf7a45ae663528701f33ee482ce67af62">ExecObjectDesc</a>
+ }</td></tr>
+<tr class="separator:a4e2dd387ba6f0dc5164b4cdf8de3262a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a707090747256af276c389e0cf1cb0a9a"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a707090747256af276c389e0cf1cb0a9a">TuningLevel</a> { <a class="el" href="namespacearmnn.xhtml#a707090747256af276c389e0cf1cb0a9aa6adf97f83acf6453d4a6a4b1070f3754">None</a>,
+<a class="el" href="namespacearmnn.xhtml#a707090747256af276c389e0cf1cb0a9aab571ef5b2664270d25bea4f4b61ffe68">Rapid</a>,
+<a class="el" href="namespacearmnn.xhtml#a707090747256af276c389e0cf1cb0a9aa960b44c579bc2f6818d2daaf9e4c16f0">Normal</a>,
+<a class="el" href="namespacearmnn.xhtml#a707090747256af276c389e0cf1cb0a9aafaf34f09ea1e93bfbf591e19dc0dfb9f">Exhaustive</a>
+ }</td></tr>
+<tr class="separator:a707090747256af276c389e0cf1cb0a9a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a6d9d90e2ace1cd49789835b0073196a3"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_layer_support_handle.xhtml">LayerSupportHandle</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a6d9d90e2ace1cd49789835b0073196a3">GetILayerSupportByBackendId</a> (const <a class="el" href="classarmnn_1_1_backend_id.xhtml">armnn::BackendId</a> &amp;backend)</td></tr>
+<tr class="memdesc:a6d9d90e2ace1cd49789835b0073196a3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convenience function to retrieve the ILayerSupportHandle for a backend. <a href="#a6d9d90e2ace1cd49789835b0073196a3">More...</a><br /></td></tr>
+<tr class="separator:a6d9d90e2ace1cd49789835b0073196a3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abd839f0f103c1ae19a4b38d59b869108"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#abd839f0f103c1ae19a4b38d59b869108">HasCapability</a> (const std::string &amp;name, const <a class="el" href="namespacearmnn.xhtml#aa9c506b558b8aa33a228b15164f40dc3">BackendCapabilities</a> &amp;capabilities)</td></tr>
+<tr class="memdesc:abd839f0f103c1ae19a4b38d59b869108"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convenience function to check if a capability exists in a BackendCapabilites struct. <a href="#abd839f0f103c1ae19a4b38d59b869108">More...</a><br /></td></tr>
+<tr class="separator:abd839f0f103c1ae19a4b38d59b869108"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8439e8b224a1fb7abdf449c8e6775469"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a8439e8b224a1fb7abdf449c8e6775469">HasCapability</a> (const std::string &amp;name, const <a class="el" href="classarmnn_1_1_backend_id.xhtml">armnn::BackendId</a> &amp;backend)</td></tr>
+<tr class="memdesc:a8439e8b224a1fb7abdf449c8e6775469"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convenience function to check if a capability exists in a backend. <a href="#a8439e8b224a1fb7abdf449c8e6775469">More...</a><br /></td></tr>
+<tr class="separator:a8439e8b224a1fb7abdf449c8e6775469"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae702febbc6139e20b2b8c4f03ff89b01"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ae702febbc6139e20b2b8c4f03ff89b01">HasCapability</a> (const <a class="el" href="structarmnn_1_1_backend_options_1_1_backend_option.xhtml">BackendOptions::BackendOption</a> &amp;capability, const <a class="el" href="namespacearmnn.xhtml#aa9c506b558b8aa33a228b15164f40dc3">BackendCapabilities</a> &amp;capabilities)</td></tr>
+<tr class="memdesc:ae702febbc6139e20b2b8c4f03ff89b01"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convenience function to check if a given capability matches a capability in a BackendCapabilities struct. <a href="#ae702febbc6139e20b2b8c4f03ff89b01">More...</a><br /></td></tr>
+<tr class="separator:ae702febbc6139e20b2b8c4f03ff89b01"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a78fe085e22e9822075ad791aa5cc34d5"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a78fe085e22e9822075ad791aa5cc34d5">HasCapability</a> (const <a class="el" href="structarmnn_1_1_backend_options_1_1_backend_option.xhtml">BackendOptions::BackendOption</a> &amp;backendOption, const <a class="el" href="classarmnn_1_1_backend_id.xhtml">armnn::BackendId</a> &amp;backend)</td></tr>
+<tr class="memdesc:a78fe085e22e9822075ad791aa5cc34d5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convenience function to check if a given capability matches a capability in a backend. <a href="#a78fe085e22e9822075ad791aa5cc34d5">More...</a><br /></td></tr>
+<tr class="separator:a78fe085e22e9822075ad791aa5cc34d5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a71c3bdadfe1c69aba2cbf054bff47744"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; const <a class="el" href="structarmnn_1_1_backend_options_1_1_backend_option.xhtml">BackendOptions::BackendOption</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a71c3bdadfe1c69aba2cbf054bff47744">GetCapability</a> (const std::string &amp;backendCapabilityName, const <a class="el" href="namespacearmnn.xhtml#aa9c506b558b8aa33a228b15164f40dc3">BackendCapabilities</a> &amp;capabilities)</td></tr>
+<tr class="memdesc:a71c3bdadfe1c69aba2cbf054bff47744"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a BackendCapability if the backend lists the capability The BackendCapability must then be inspected to check whether or not that BackendCapability is supported Otherwise returns an <a class="el" href="structarmnn_1_1_empty_optional.xhtml" title="EmptyOptional is used to initialize the Optional class in case we want to have default value for an O...">EmptyOptional</a> if the BackendCapability is unlisted. <a href="#a71c3bdadfe1c69aba2cbf054bff47744">More...</a><br /></td></tr>
+<tr class="separator:a71c3bdadfe1c69aba2cbf054bff47744"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8d70f94d3f0ffb06067a66c49b2f8689"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; const <a class="el" href="structarmnn_1_1_backend_options_1_1_backend_option.xhtml">BackendOptions::BackendOption</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a8d70f94d3f0ffb06067a66c49b2f8689">GetCapability</a> (const std::string &amp;backendCapabilityName, const <a class="el" href="classarmnn_1_1_backend_id.xhtml">armnn::BackendId</a> &amp;backend)</td></tr>
+<tr class="memdesc:a8d70f94d3f0ffb06067a66c49b2f8689"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a BackendCapability if the backend lists the capability The BackendCapability must then be inspected to check whether or not that BackendCapability is supported Otherwise returns an <a class="el" href="structarmnn_1_1_empty_optional.xhtml" title="EmptyOptional is used to initialize the Optional class in case we want to have default value for an O...">EmptyOptional</a> if the BackendCapability is unlisted. <a href="#a8d70f94d3f0ffb06067a66c49b2f8689">More...</a><br /></td></tr>
+<tr class="separator:a8d70f94d3f0ffb06067a66c49b2f8689"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a08479ba047ffc8f571f8281f13ae76e7"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a08479ba047ffc8f571f8281f13ae76e7">IsCapabilitySupported</a> (const <a class="el" href="classarmnn_1_1_backend_id.xhtml">armnn::BackendId</a> &amp;backend, <a class="el" href="namespacearmnn.xhtml#ab24d74259a053475f6040dd701a01952">armnn::BackendCapability</a> capability)</td></tr>
+<tr class="memdesc:a08479ba047ffc8f571f8281f13ae76e7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convenience function to check a capability on a backend. <a href="#a08479ba047ffc8f571f8281f13ae76e7">More...</a><br /></td></tr>
+<tr class="separator:a08479ba047ffc8f571f8281f13ae76e7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae266ee8bf362cbf8a88ab6e6b389791a"><td class="memItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ae266ee8bf362cbf8a88ab6e6b389791a">GetNumberOfCacheFiles</a> (const <a class="el" href="classarmnn_1_1_backend_id.xhtml">armnn::BackendId</a> &amp;backend)</td></tr>
+<tr class="memdesc:ae266ee8bf362cbf8a88ab6e6b389791a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the number of cached files if backend supports caching. <a href="#ae266ee8bf362cbf8a88ab6e6b389791a">More...</a><br /></td></tr>
+<tr class="separator:ae266ee8bf362cbf8a88ab6e6b389791a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6bab17bfd45c2fa4592c431bc25ad10e"><td class="memItemLeft" align="right" valign="top">constexpr char const *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a6bab17bfd45c2fa4592c431bc25ad10e">GetComputeDeviceAsCString</a> (<a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456ae">Compute</a> compute)</td></tr>
+<tr class="memdesc:a6bab17bfd45c2fa4592c431bc25ad10e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated function that will be removed together with the Compute enum. <a href="#a6bab17bfd45c2fa4592c431bc25ad10e">More...</a><br /></td></tr>
+<tr class="separator:a6bab17bfd45c2fa4592c431bc25ad10e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5b0313cb554380d6e4dfb24c31f9e605"><td class="memItemLeft" align="right" valign="top">std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a5b0313cb554380d6e4dfb24c31f9e605">operator&lt;&lt;</a> (std::ostream &amp;os, const std::vector&lt; <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456ae">Compute</a> &gt; &amp;compute)</td></tr>
+<tr class="memdesc:a5b0313cb554380d6e4dfb24c31f9e605"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated function that will be removed together with the Compute enum. <a href="#a5b0313cb554380d6e4dfb24c31f9e605">More...</a><br /></td></tr>
+<tr class="separator:a5b0313cb554380d6e4dfb24c31f9e605"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a127a59fdf5e6d2fa74f87f9265de958b"><td class="memItemLeft" align="right" valign="top">std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a127a59fdf5e6d2fa74f87f9265de958b">operator&lt;&lt;</a> (std::ostream &amp;os, const std::set&lt; <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456ae">Compute</a> &gt; &amp;compute)</td></tr>
+<tr class="memdesc:a127a59fdf5e6d2fa74f87f9265de958b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated function that will be removed together with the Compute enum. <a href="#a127a59fdf5e6d2fa74f87f9265de958b">More...</a><br /></td></tr>
+<tr class="separator:a127a59fdf5e6d2fa74f87f9265de958b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a345acf4e0dc087eee3f9688029ee6328"><td class="memItemLeft" align="right" valign="top">std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a345acf4e0dc087eee3f9688029ee6328">operator&lt;&lt;</a> (std::ostream &amp;os, const <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456ae">Compute</a> &amp;compute)</td></tr>
+<tr class="memdesc:a345acf4e0dc087eee3f9688029ee6328"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated function that will be removed together with the Compute enum. <a href="#a345acf4e0dc087eee3f9688029ee6328">More...</a><br /></td></tr>
+<tr class="separator:a345acf4e0dc087eee3f9688029ee6328"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afc46634e26857d037ee80bb5a74ef28a"><td class="memItemLeft" align="right" valign="top">std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#afc46634e26857d037ee80bb5a74ef28a">operator&lt;&lt;</a> (std::ostream &amp;os, const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;id)</td></tr>
+<tr class="separator:afc46634e26857d037ee80bb5a74ef28a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a62a9e8c87b9b9f504726746ba4a000a6"><td class="memTemplParams" colspan="2">template&lt;template&lt; typename... &gt; class TContainer, typename... TContainerTemplateArgs&gt; </td></tr>
+<tr class="memitem:a62a9e8c87b9b9f504726746ba4a000a6"><td class="memTemplItemLeft" align="right" valign="top">std::ostream &amp;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a62a9e8c87b9b9f504726746ba4a000a6">operator&lt;&lt;</a> (std::ostream &amp;os, const <a class="el" href="namespacearmnn_utils.xhtml#ac7bd4ea667375c07718086368507ed44">TContainer</a>&lt; <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a>, TContainerTemplateArgs... &gt; &amp;ids)</td></tr>
+<tr class="separator:a62a9e8c87b9b9f504726746ba4a000a6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af457790132251cde6545072d879c7684"><td class="memTemplParams" colspan="2">template&lt;typename F &gt; </td></tr>
+<tr class="memitem:af457790132251cde6545072d879c7684"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#af457790132251cde6545072d879c7684">ParseOptions</a> (const std::vector&lt; <a class="el" href="structarmnn_1_1_backend_options.xhtml">BackendOptions</a> &gt; &amp;options, <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> backend, F f)</td></tr>
+<tr class="separator:af457790132251cde6545072d879c7684"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abe4073b0af144421b53828ef752e4ee3"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#abe4073b0af144421b53828ef752e4ee3">ParseBooleanBackendOption</a> (const <a class="el" href="classarmnn_1_1_backend_options_1_1_var.xhtml">armnn::BackendOptions::Var</a> &amp;value, bool defaultValue)</td></tr>
+<tr class="separator:abe4073b0af144421b53828ef752e4ee3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a79a7e943477406c7211f8800e24e5074"><td class="memItemLeft" align="right" valign="top">std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a79a7e943477406c7211f8800e24e5074">ParseStringBackendOption</a> (const <a class="el" href="classarmnn_1_1_backend_options_1_1_var.xhtml">armnn::BackendOptions::Var</a> &amp;value, std::string defaultValue)</td></tr>
+<tr class="separator:a79a7e943477406c7211f8800e24e5074"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a884361aad1fe11d630c8588cba16c6f1"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a884361aad1fe11d630c8588cba16c6f1">ParseIntBackendOption</a> (const <a class="el" href="classarmnn_1_1_backend_options_1_1_var.xhtml">armnn::BackendOptions::Var</a> &amp;value, int defaultValue)</td></tr>
+<tr class="separator:a884361aad1fe11d630c8588cba16c6f1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac2807505b850738bc8a1991ce669dd47"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_backend_registry.xhtml">BackendRegistry</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ac2807505b850738bc8a1991ce669dd47">BackendRegistryInstance</a> ()</td></tr>
+<tr class="separator:ac2807505b850738bc8a1991ce669dd47"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a14de37f4c695ac066f999aa75b7cb136"><td class="memItemLeft" align="right" valign="top">std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a14de37f4c695ac066f999aa75b7cb136">operator&lt;&lt;</a> (std::ostream &amp;os, const <a class="el" href="structarmnn_1_1_backend_version.xhtml">BackendVersion</a> &amp;backendVersion)</td></tr>
+<tr class="separator:a14de37f4c695ac066f999aa75b7cb136"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a36e8f52330a21eeab3cc7c4e030f3583"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a36e8f52330a21eeab3cc7c4e030f3583">GetUnpaddedTensorStrides</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;tensorInfo)</td></tr>
+<tr class="separator:a36e8f52330a21eeab3cc7c4e030f3583"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a872803f5667392efc3c8e5607bd453ad"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a872803f5667392efc3c8e5607bd453ad">GetBiasDataType</a> (<a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> inputDataType)</td></tr>
+<tr class="separator:a872803f5667392efc3c8e5607bd453ad"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adf15f9b51e289cd234206cc5112f0346"><td class="memItemLeft" align="right" valign="top"><a class="el" href="_deprecated_8hpp.xhtml#ab66a241a0ed3ee89c866e777b035d0ed">ARMNN_NO_DEPRECATE_WARN_BEGIN</a> struct&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#adf15f9b51e289cd234206cc5112f0346">ARMNN_DEPRECATED_MSG_REMOVAL_DATE</a> (&quot;ResizeBilinearQueueDescriptor is deprecated use <a class="el" href="structarmnn_1_1_resize_queue_descriptor.xhtml">ResizeQueueDescriptor</a> <a class="el" href="namespacearmnn.xhtml#a546bd17050a4147165f295e365d56171">instead</a>&quot;, &quot;22.08&quot;) ResizeBilinearQueueDescriptor</td></tr>
+<tr class="separator:adf15f9b51e289cd234206cc5112f0346"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a733ae6b70d0bfa43433c3e7606992328"><td class="memTemplParams" colspan="2">template&lt;typename TensorShapeIt &gt; </td></tr>
+<tr class="memitem:a733ae6b70d0bfa43433c3e7606992328"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="structarmnn_1_1_origins_descriptor.xhtml">OriginsDescriptor</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a733ae6b70d0bfa43433c3e7606992328">CreateDescriptorForConcatenation</a> (TensorShapeIt first, TensorShapeIt last, unsigned int concatenationDimension)</td></tr>
+<tr class="memdesc:a733ae6b70d0bfa43433c3e7606992328"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convenience template to create an <a class="el" href="structarmnn_1_1_origins_descriptor.xhtml" title="An OriginsDescriptor for the ConcatLayer. ">OriginsDescriptor</a> to use when creating a <a class="el" href="classarmnn_1_1_concat_layer.xhtml" title="This layer represents a merge operation. ">ConcatLayer</a> for performing concatenation of a number of input tensors. <a href="#a733ae6b70d0bfa43433c3e7606992328">More...</a><br /></td></tr>
+<tr class="separator:a733ae6b70d0bfa43433c3e7606992328"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae4ab3bf0697ad13316a6bcba0a8fade5"><td class="memTemplParams" colspan="2">template&lt;typename ExceptionType &gt; </td></tr>
+<tr class="memitem:ae4ab3bf0697ad13316a6bcba0a8fade5"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ae4ab3bf0697ad13316a6bcba0a8fade5">ConditionalThrow</a> (bool condition, const std::string &amp;message)</td></tr>
+<tr class="separator:ae4ab3bf0697ad13316a6bcba0a8fade5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6ed414c05eb6d4c89e0e4a475a0479c0"><td class="memTemplParams" colspan="2">template&lt;typename ExceptionType &gt; </td></tr>
+<tr class="memitem:a6ed414c05eb6d4c89e0e4a475a0479c0"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a6ed414c05eb6d4c89e0e4a475a0479c0">ConditionalThrow</a> (bool condition)</td></tr>
+<tr class="separator:a6ed414c05eb6d4c89e0e4a475a0479c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae57b7f9e2cb7080bf10b28d1f72b558e"><td class="memTemplParams" colspan="2">template&lt;typename ExceptionType , typename ComparedType &gt; </td></tr>
+<tr class="memitem:ae57b7f9e2cb7080bf10b28d1f72b558e"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ae57b7f9e2cb7080bf10b28d1f72b558e">ConditionalThrowIfNotEqual</a> (const std::string &amp;message, const ComparedType &amp;leftHandSide, const ComparedType &amp;rightHandSide)</td></tr>
+<tr class="memdesc:ae57b7f9e2cb7080bf10b28d1f72b558e"><td class="mdescLeft">&#160;</td><td class="mdescRight">ComparedType must support: operator==(const ComparedType&amp;) operator&lt;&lt;(ostream&amp;, const ComparedType&amp;) <a href="#ae57b7f9e2cb7080bf10b28d1f72b558e">More...</a><br /></td></tr>
+<tr class="separator:ae57b7f9e2cb7080bf10b28d1f72b558e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a95551c35140e46de7f7690b1f90cc17a"><td class="memItemLeft" align="right" valign="top">class&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a95551c35140e46de7f7690b1f90cc17a">ARMNN_DEPRECATED_MSG_REMOVAL_DATE</a> (&quot;Use ABI stable <a class="el" href="classarmnn_1_1_i_strategy.xhtml">IStrategy</a> instead.&quot;, &quot;22.05&quot;) ILayerVisitor</td></tr>
+<tr class="separator:a95551c35140e46de7f7690b1f90cc17a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a82e98ef05fd67036d1195ba17174d685"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.xhtml#a674efcf6cbdb9e831d653ff0e821fb38">IOptimizedNetworkPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a82e98ef05fd67036d1195ba17174d685">Optimize</a> (const <a class="el" href="classarmnn_1_1_i_network.xhtml">INetwork</a> &amp;network, const std::vector&lt; <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &gt; &amp;backendPreferences, const <a class="el" href="classarmnn_1_1_i_device_spec.xhtml">IDeviceSpec</a> &amp;deviceSpec, const <a class="el" href="structarmnn_1_1_optimizer_options.xhtml">OptimizerOptions</a> &amp;options=<a class="el" href="structarmnn_1_1_optimizer_options.xhtml">OptimizerOptions</a>(), <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; std::vector&lt; std::string &gt; &amp;&gt; messages=<a class="el" href="structarmnn_1_1_empty_optional.xhtml">EmptyOptional</a>())</td></tr>
+<tr class="memdesc:a82e98ef05fd67036d1195ba17174d685"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create an optimized version of the network. <a href="#a82e98ef05fd67036d1195ba17174d685">More...</a><br /></td></tr>
+<tr class="separator:a82e98ef05fd67036d1195ba17174d685"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6e7dc8639c4b2f0a93031afff5182735"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a6e7dc8639c4b2f0a93031afff5182735">IsActivationSupported</a> (const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> &amp;descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr>
+<tr class="memdesc:a6e7dc8639c4b2f0a93031afff5182735"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. <a href="#a6e7dc8639c4b2f0a93031afff5182735">More...</a><br /></td></tr>
+<tr class="separator:a6e7dc8639c4b2f0a93031afff5182735"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab5569e5b664498e011e8bd92cc3cc5b2"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ab5569e5b664498e011e8bd92cc3cc5b2">IsAdditionSupported</a> (const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input1, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr>
+<tr class="memdesc:ab5569e5b664498e011e8bd92cc3cc5b2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. <a href="#ab5569e5b664498e011e8bd92cc3cc5b2">More...</a><br /></td></tr>
+<tr class="separator:ab5569e5b664498e011e8bd92cc3cc5b2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a49b7a701c6a0c569015309102221c702"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a49b7a701c6a0c569015309102221c702">IsBatchNormalizationSupported</a> (const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;mean, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;var, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;beta, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;gamma, const <a class="el" href="structarmnn_1_1_batch_normalization_descriptor.xhtml">BatchNormalizationDescriptor</a> &amp;descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr>
+<tr class="memdesc:a49b7a701c6a0c569015309102221c702"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. <a href="#a49b7a701c6a0c569015309102221c702">More...</a><br /></td></tr>
+<tr class="separator:a49b7a701c6a0c569015309102221c702"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abb893c7adb7b64d0964bd244c46dd06b"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#abb893c7adb7b64d0964bd244c46dd06b">IsBatchToSpaceNdSupported</a> (const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_batch_to_space_nd_descriptor.xhtml">BatchToSpaceNdDescriptor</a> &amp;descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr>
+<tr class="memdesc:abb893c7adb7b64d0964bd244c46dd06b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. <a href="#abb893c7adb7b64d0964bd244c46dd06b">More...</a><br /></td></tr>
+<tr class="separator:abb893c7adb7b64d0964bd244c46dd06b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a757df85e956e425c1a082d35a98ca4a9"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a757df85e956e425c1a082d35a98ca4a9">IsConcatSupported</a> (const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;backend, const std::vector&lt; const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> *&gt; inputs, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_origins_descriptor.xhtml">OriginsDescriptor</a> &amp;descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr>
+<tr class="memdesc:a757df85e956e425c1a082d35a98ca4a9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. <a href="#a757df85e956e425c1a082d35a98ca4a9">More...</a><br /></td></tr>
+<tr class="separator:a757df85e956e425c1a082d35a98ca4a9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0d2ad1212c8773f36160ef6e5e7db61f"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a0d2ad1212c8773f36160ef6e5e7db61f">IsConstantSupported</a> (const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr>
+<tr class="memdesc:a0d2ad1212c8773f36160ef6e5e7db61f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. <a href="#a0d2ad1212c8773f36160ef6e5e7db61f">More...</a><br /></td></tr>
+<tr class="separator:a0d2ad1212c8773f36160ef6e5e7db61f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af9decd6720482e602efc6ac5ef7dab50"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#af9decd6720482e602efc6ac5ef7dab50">IsConvertFp16ToFp32Supported</a> (const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr>
+<tr class="memdesc:af9decd6720482e602efc6ac5ef7dab50"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. <a href="#af9decd6720482e602efc6ac5ef7dab50">More...</a><br /></td></tr>
+<tr class="separator:af9decd6720482e602efc6ac5ef7dab50"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a080c11383c6a29b4295ae359cde5c19c"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a080c11383c6a29b4295ae359cde5c19c">IsConvertFp32ToFp16Supported</a> (const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr>
+<tr class="memdesc:a080c11383c6a29b4295ae359cde5c19c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. <a href="#a080c11383c6a29b4295ae359cde5c19c">More...</a><br /></td></tr>
+<tr class="separator:a080c11383c6a29b4295ae359cde5c19c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aff785aa7c076b1d2f51f76fa0f0647e4"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aff785aa7c076b1d2f51f76fa0f0647e4">IsConvolution2dSupported</a> (const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_convolution2d_descriptor.xhtml">Convolution2dDescriptor</a> &amp;descriptor, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;weights, const <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &gt; &amp;biases, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr>
+<tr class="memdesc:aff785aa7c076b1d2f51f76fa0f0647e4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. <a href="#aff785aa7c076b1d2f51f76fa0f0647e4">More...</a><br /></td></tr>
+<tr class="separator:aff785aa7c076b1d2f51f76fa0f0647e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa6503439334e0a79181a51e084b0268f"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aa6503439334e0a79181a51e084b0268f">IsDebugSupported</a> (const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr>
+<tr class="memdesc:aa6503439334e0a79181a51e084b0268f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. <a href="#aa6503439334e0a79181a51e084b0268f">More...</a><br /></td></tr>
+<tr class="separator:aa6503439334e0a79181a51e084b0268f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a87f06345ddd902d027eb8f792ca8cdb4"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a87f06345ddd902d027eb8f792ca8cdb4">IsDepthwiseConvolutionSupported</a> (const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml">DepthwiseConvolution2dDescriptor</a> &amp;descriptor, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;weights, const <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &gt; &amp;biases, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr>
+<tr class="memdesc:a87f06345ddd902d027eb8f792ca8cdb4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. <a href="#a87f06345ddd902d027eb8f792ca8cdb4">More...</a><br /></td></tr>
+<tr class="separator:a87f06345ddd902d027eb8f792ca8cdb4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1b4b4304198668d3af8e9d0c40d9343d"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a1b4b4304198668d3af8e9d0c40d9343d">IsDequantizeSupported</a> (const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr>
+<tr class="memdesc:a1b4b4304198668d3af8e9d0c40d9343d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. <a href="#a1b4b4304198668d3af8e9d0c40d9343d">More...</a><br /></td></tr>
+<tr class="separator:a1b4b4304198668d3af8e9d0c40d9343d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3378acd6bc867577ee4bf1657945f1b5"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a3378acd6bc867577ee4bf1657945f1b5">IsDivisionSupported</a> (const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input1, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr>
+<tr class="memdesc:a3378acd6bc867577ee4bf1657945f1b5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. <a href="#a3378acd6bc867577ee4bf1657945f1b5">More...</a><br /></td></tr>
+<tr class="separator:a3378acd6bc867577ee4bf1657945f1b5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5cdadf3ef2695b145f6861c919234e65"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a5cdadf3ef2695b145f6861c919234e65">IsEqualSupported</a> (const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input1, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr>
+<tr class="memdesc:a5cdadf3ef2695b145f6861c919234e65"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. <a href="#a5cdadf3ef2695b145f6861c919234e65">More...</a><br /></td></tr>
+<tr class="separator:a5cdadf3ef2695b145f6861c919234e65"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4539c40ac5e36641f8ec10b88d658db1"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a4539c40ac5e36641f8ec10b88d658db1">IsFakeQuantizationSupported</a> (const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="structarmnn_1_1_fake_quantization_descriptor.xhtml">FakeQuantizationDescriptor</a> &amp;descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr>
+<tr class="memdesc:a4539c40ac5e36641f8ec10b88d658db1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. <a href="#a4539c40ac5e36641f8ec10b88d658db1">More...</a><br /></td></tr>
+<tr class="separator:a4539c40ac5e36641f8ec10b88d658db1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2b6003e1d9226301e4badcac0b53c0ef"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a2b6003e1d9226301e4badcac0b53c0ef">IsFloorSupported</a> (const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr>
+<tr class="memdesc:a2b6003e1d9226301e4badcac0b53c0ef"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. <a href="#a2b6003e1d9226301e4badcac0b53c0ef">More...</a><br /></td></tr>
+<tr class="separator:a2b6003e1d9226301e4badcac0b53c0ef"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0a72d1f8a0d43ee551c7ac654f8816fa"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a0a72d1f8a0d43ee551c7ac654f8816fa">IsFullyConnectedSupported</a> (const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;weights, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;biases, const <a class="el" href="structarmnn_1_1_fully_connected_descriptor.xhtml">FullyConnectedDescriptor</a> &amp;descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr>
+<tr class="memdesc:a0a72d1f8a0d43ee551c7ac654f8816fa"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. <a href="#a0a72d1f8a0d43ee551c7ac654f8816fa">More...</a><br /></td></tr>
+<tr class="separator:a0a72d1f8a0d43ee551c7ac654f8816fa"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1b71293424668995f13d6682af815938"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a1b71293424668995f13d6682af815938">IsGreaterSupported</a> (const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input1, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr>
+<tr class="memdesc:a1b71293424668995f13d6682af815938"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. <a href="#a1b71293424668995f13d6682af815938">More...</a><br /></td></tr>
+<tr class="separator:a1b71293424668995f13d6682af815938"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3512b2f24950886288c5d01df1488f15"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a3512b2f24950886288c5d01df1488f15">IsInputSupported</a> (const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr>
+<tr class="memdesc:a3512b2f24950886288c5d01df1488f15"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. <a href="#a3512b2f24950886288c5d01df1488f15">More...</a><br /></td></tr>
+<tr class="separator:a3512b2f24950886288c5d01df1488f15"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a57862de9b939281d1fe0242a8f04ead9"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a57862de9b939281d1fe0242a8f04ead9">IsL2NormalizationSupported</a> (const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_l2_normalization_descriptor.xhtml">L2NormalizationDescriptor</a> &amp;descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr>
+<tr class="memdesc:a57862de9b939281d1fe0242a8f04ead9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. <a href="#a57862de9b939281d1fe0242a8f04ead9">More...</a><br /></td></tr>
+<tr class="separator:a57862de9b939281d1fe0242a8f04ead9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2c62d8aa5aeab36458f9ecfa5db1f785"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a2c62d8aa5aeab36458f9ecfa5db1f785">IsLstmSupported</a> (const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;outputStateIn, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;cellStateIn, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;scratchBuffer, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;outputStateOut, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;cellStateOut, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_lstm_descriptor.xhtml">LstmDescriptor</a> &amp;descriptor, const <a class="el" href="structarmnn_1_1_lstm_input_params_info.xhtml">LstmInputParamsInfo</a> &amp;paramsInfo, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr>
+<tr class="memdesc:a2c62d8aa5aeab36458f9ecfa5db1f785"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. <a href="#a2c62d8aa5aeab36458f9ecfa5db1f785">More...</a><br /></td></tr>
+<tr class="separator:a2c62d8aa5aeab36458f9ecfa5db1f785"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a977729771e5ab4263e933f785fa532a6"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a977729771e5ab4263e933f785fa532a6">IsMaximumSupported</a> (const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input1, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, char *reasonIfUnSupported=nullptr, size_t reasonIfUnSupportedMaxLength=0)</td></tr>
+<tr class="memdesc:a977729771e5ab4263e933f785fa532a6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. <a href="#a977729771e5ab4263e933f785fa532a6">More...</a><br /></td></tr>
+<tr class="separator:a977729771e5ab4263e933f785fa532a6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a79698fa98352bffccc6723de84677680"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a79698fa98352bffccc6723de84677680">IsMeanSupported</a> (const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_mean_descriptor.xhtml">MeanDescriptor</a> &amp;descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr>
+<tr class="memdesc:a79698fa98352bffccc6723de84677680"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. <a href="#a79698fa98352bffccc6723de84677680">More...</a><br /></td></tr>
+<tr class="separator:a79698fa98352bffccc6723de84677680"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1401f21967557c5f70830e06f9b10d4d"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a1401f21967557c5f70830e06f9b10d4d">IsMemCopySupported</a> (const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr>
+<tr class="memdesc:a1401f21967557c5f70830e06f9b10d4d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. <a href="#a1401f21967557c5f70830e06f9b10d4d">More...</a><br /></td></tr>
+<tr class="separator:a1401f21967557c5f70830e06f9b10d4d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8c24c4caabe9282b927f8777d7ca993f"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a8c24c4caabe9282b927f8777d7ca993f">IsMergeSupported</a> (const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input1, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr>
+<tr class="memdesc:a8c24c4caabe9282b927f8777d7ca993f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. <a href="#a8c24c4caabe9282b927f8777d7ca993f">More...</a><br /></td></tr>
+<tr class="separator:a8c24c4caabe9282b927f8777d7ca993f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a29bdc2efd75bb437f4292dd9fcb5c89a"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a29bdc2efd75bb437f4292dd9fcb5c89a">IsMinimumSupported</a> (const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input1, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr>
+<tr class="memdesc:a29bdc2efd75bb437f4292dd9fcb5c89a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. <a href="#a29bdc2efd75bb437f4292dd9fcb5c89a">More...</a><br /></td></tr>
+<tr class="separator:a29bdc2efd75bb437f4292dd9fcb5c89a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9624be7520f71d00bfb769d94e0b088b"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a9624be7520f71d00bfb769d94e0b088b">IsMultiplicationSupported</a> (const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input1, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr>
+<tr class="memdesc:a9624be7520f71d00bfb769d94e0b088b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. <a href="#a9624be7520f71d00bfb769d94e0b088b">More...</a><br /></td></tr>
+<tr class="separator:a9624be7520f71d00bfb769d94e0b088b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a23d54c0b96b63178811174d5e7b2d328"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a23d54c0b96b63178811174d5e7b2d328">IsNormalizationSupported</a> (const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_normalization_descriptor.xhtml">NormalizationDescriptor</a> &amp;descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr>
+<tr class="memdesc:a23d54c0b96b63178811174d5e7b2d328"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. <a href="#a23d54c0b96b63178811174d5e7b2d328">More...</a><br /></td></tr>
+<tr class="separator:a23d54c0b96b63178811174d5e7b2d328"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a60699e7f86e142739ccddd43c20c4fc0"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a60699e7f86e142739ccddd43c20c4fc0">IsOutputSupported</a> (const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr>
+<tr class="memdesc:a60699e7f86e142739ccddd43c20c4fc0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. <a href="#a60699e7f86e142739ccddd43c20c4fc0">More...</a><br /></td></tr>
+<tr class="separator:a60699e7f86e142739ccddd43c20c4fc0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae467c9a579c8fb41427227a1c1e1cb4c"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ae467c9a579c8fb41427227a1c1e1cb4c">IsPadSupported</a> (const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_pad_descriptor.xhtml">PadDescriptor</a> &amp;descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr>
+<tr class="memdesc:ae467c9a579c8fb41427227a1c1e1cb4c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. <a href="#ae467c9a579c8fb41427227a1c1e1cb4c">More...</a><br /></td></tr>
+<tr class="separator:ae467c9a579c8fb41427227a1c1e1cb4c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab4c606b53ae4d03aec1fcfe537c757ef"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ab4c606b53ae4d03aec1fcfe537c757ef">IsPermuteSupported</a> (const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_permute_descriptor.xhtml">PermuteDescriptor</a> &amp;descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr>
+<tr class="memdesc:ab4c606b53ae4d03aec1fcfe537c757ef"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. <a href="#ab4c606b53ae4d03aec1fcfe537c757ef">More...</a><br /></td></tr>
+<tr class="separator:ab4c606b53ae4d03aec1fcfe537c757ef"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3b4773564c3fd8c88e697ffe0afbe10d"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a3b4773564c3fd8c88e697ffe0afbe10d">IsPreCompiledSupported</a> (const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr>
+<tr class="memdesc:a3b4773564c3fd8c88e697ffe0afbe10d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. <a href="#a3b4773564c3fd8c88e697ffe0afbe10d">More...</a><br /></td></tr>
+<tr class="separator:a3b4773564c3fd8c88e697ffe0afbe10d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a36d55a20000a7b50f7369c3ceeca46bd"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a36d55a20000a7b50f7369c3ceeca46bd">IsPreluSupported</a> (const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;alpha, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr>
+<tr class="memdesc:a36d55a20000a7b50f7369c3ceeca46bd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. <a href="#a36d55a20000a7b50f7369c3ceeca46bd">More...</a><br /></td></tr>
+<tr class="separator:a36d55a20000a7b50f7369c3ceeca46bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af4f2d40a67380e91bd7ed0c1bcc4658f"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#af4f2d40a67380e91bd7ed0c1bcc4658f">IsPooling2dSupported</a> (const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_pooling2d_descriptor.xhtml">Pooling2dDescriptor</a> &amp;descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr>
+<tr class="memdesc:af4f2d40a67380e91bd7ed0c1bcc4658f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. <a href="#af4f2d40a67380e91bd7ed0c1bcc4658f">More...</a><br /></td></tr>
+<tr class="separator:af4f2d40a67380e91bd7ed0c1bcc4658f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a237992b29706fe1c1653dae916ea67ef"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a237992b29706fe1c1653dae916ea67ef">IsQuantizedLstmSupported</a> (const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;previousCellStateIn, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;previousOutputIn, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;cellStateOut, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_quantized_lstm_input_params_info.xhtml">QuantizedLstmInputParamsInfo</a> &amp;paramsInfo, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr>
+<tr class="memdesc:a237992b29706fe1c1653dae916ea67ef"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. <a href="#a237992b29706fe1c1653dae916ea67ef">More...</a><br /></td></tr>
+<tr class="separator:a237992b29706fe1c1653dae916ea67ef"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aefa2e47c23dc8faac4b7edb12b5d1c2c"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aefa2e47c23dc8faac4b7edb12b5d1c2c">IsReduceSupported</a> (const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_reduce_descriptor.xhtml">ReduceDescriptor</a> &amp;descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr>
+<tr class="memdesc:aefa2e47c23dc8faac4b7edb12b5d1c2c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. <a href="#aefa2e47c23dc8faac4b7edb12b5d1c2c">More...</a><br /></td></tr>
+<tr class="separator:aefa2e47c23dc8faac4b7edb12b5d1c2c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af5014cbc003abcf201d4372b0012734c"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#af5014cbc003abcf201d4372b0012734c">IsReshapeSupported</a> (const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="structarmnn_1_1_reshape_descriptor.xhtml">ReshapeDescriptor</a> &amp;descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr>
+<tr class="memdesc:af5014cbc003abcf201d4372b0012734c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. <a href="#af5014cbc003abcf201d4372b0012734c">More...</a><br /></td></tr>
+<tr class="separator:af5014cbc003abcf201d4372b0012734c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0c70182e7d26983945ae75229d607cce"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a0c70182e7d26983945ae75229d607cce">IsResizeSupported</a> (const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_resize_descriptor.xhtml">ResizeDescriptor</a> &amp;descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr>
+<tr class="memdesc:a0c70182e7d26983945ae75229d607cce"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. <a href="#a0c70182e7d26983945ae75229d607cce">More...</a><br /></td></tr>
+<tr class="separator:a0c70182e7d26983945ae75229d607cce"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9d6e15bfef3872d70d5a3b74a25ac788"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a9d6e15bfef3872d70d5a3b74a25ac788">IsRsqrtSupported</a> (const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr>
+<tr class="memdesc:a9d6e15bfef3872d70d5a3b74a25ac788"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. <a href="#a9d6e15bfef3872d70d5a3b74a25ac788">More...</a><br /></td></tr>
+<tr class="separator:a9d6e15bfef3872d70d5a3b74a25ac788"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a242f6c2f0376aaacd7d65a6f1498dea9"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a242f6c2f0376aaacd7d65a6f1498dea9">IsSoftmaxSupported</a> (const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_softmax_descriptor.xhtml">SoftmaxDescriptor</a> &amp;descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr>
+<tr class="memdesc:a242f6c2f0376aaacd7d65a6f1498dea9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. <a href="#a242f6c2f0376aaacd7d65a6f1498dea9">More...</a><br /></td></tr>
+<tr class="separator:a242f6c2f0376aaacd7d65a6f1498dea9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a55f4c243c58ee7a084f4a674d3c69948"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a55f4c243c58ee7a084f4a674d3c69948">IsSpaceToBatchNdSupported</a> (const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_space_to_batch_nd_descriptor.xhtml">SpaceToBatchNdDescriptor</a> &amp;descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr>
+<tr class="memdesc:a55f4c243c58ee7a084f4a674d3c69948"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. <a href="#a55f4c243c58ee7a084f4a674d3c69948">More...</a><br /></td></tr>
+<tr class="separator:a55f4c243c58ee7a084f4a674d3c69948"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a32e51e4810a549b4a15d59ba73c64d2c"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a32e51e4810a549b4a15d59ba73c64d2c">IsSpaceToDepthSupported</a> (const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_space_to_depth_descriptor.xhtml">SpaceToDepthDescriptor</a> &amp;descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr>
+<tr class="memdesc:a32e51e4810a549b4a15d59ba73c64d2c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. <a href="#a32e51e4810a549b4a15d59ba73c64d2c">More...</a><br /></td></tr>
+<tr class="separator:a32e51e4810a549b4a15d59ba73c64d2c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adf1e16300483fadf9fd19299ca8a67c4"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#adf1e16300483fadf9fd19299ca8a67c4">IsSplitterSupported</a> (const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const std::vector&lt; std::reference_wrapper&lt; <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &gt;&gt; &amp;outputs, const <a class="el" href="structarmnn_1_1_views_descriptor.xhtml">ViewsDescriptor</a> &amp;descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr>
+<tr class="memdesc:adf1e16300483fadf9fd19299ca8a67c4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. <a href="#adf1e16300483fadf9fd19299ca8a67c4">More...</a><br /></td></tr>
+<tr class="separator:adf1e16300483fadf9fd19299ca8a67c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a10e8442be2b8596afd5770e98b904caa"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a10e8442be2b8596afd5770e98b904caa">IsStackSupported</a> (const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;backend, const std::vector&lt; const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> *&gt; inputs, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_stack_descriptor.xhtml">StackDescriptor</a> &amp;descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr>
+<tr class="memdesc:a10e8442be2b8596afd5770e98b904caa"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. <a href="#a10e8442be2b8596afd5770e98b904caa">More...</a><br /></td></tr>
+<tr class="separator:a10e8442be2b8596afd5770e98b904caa"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8fdc5d28344915ccc0503e2e62b597ab"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a8fdc5d28344915ccc0503e2e62b597ab">IsStridedSliceSupported</a> (const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_strided_slice_descriptor.xhtml">StridedSliceDescriptor</a> &amp;descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr>
+<tr class="memdesc:a8fdc5d28344915ccc0503e2e62b597ab"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. <a href="#a8fdc5d28344915ccc0503e2e62b597ab">More...</a><br /></td></tr>
+<tr class="separator:a8fdc5d28344915ccc0503e2e62b597ab"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1a74a4ecd0f25e6031ef05210a0cfe51"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a1a74a4ecd0f25e6031ef05210a0cfe51">IsSubtractionSupported</a> (const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input1, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr>
+<tr class="memdesc:a1a74a4ecd0f25e6031ef05210a0cfe51"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. <a href="#a1a74a4ecd0f25e6031ef05210a0cfe51">More...</a><br /></td></tr>
+<tr class="separator:a1a74a4ecd0f25e6031ef05210a0cfe51"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae8a3ee5f60ae5ae2df15626eaf727ed0"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ae8a3ee5f60ae5ae2df15626eaf727ed0">IsSwitchSupported</a> (const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input1, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output0, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output1, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr>
+<tr class="memdesc:ae8a3ee5f60ae5ae2df15626eaf727ed0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. <a href="#ae8a3ee5f60ae5ae2df15626eaf727ed0">More...</a><br /></td></tr>
+<tr class="separator:ae8a3ee5f60ae5ae2df15626eaf727ed0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac6cc8e0bd35d229486fe6d844d88e0d4"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ac6cc8e0bd35d229486fe6d844d88e0d4">IsTransposeConvolution2dSupported</a> (const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;backend, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_transpose_convolution2d_descriptor.xhtml">TransposeConvolution2dDescriptor</a> &amp;descriptor, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;weights, const <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &gt; &amp;biases, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</td></tr>
+<tr class="memdesc:ac6cc8e0bd35d229486fe6d844d88e0d4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. <a href="#ac6cc8e0bd35d229486fe6d844d88e0d4">More...</a><br /></td></tr>
+<tr class="separator:ac6cc8e0bd35d229486fe6d844d88e0d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a71f2cc06b097cb5c4f0a1f48130a823b"><td class="memItemLeft" align="right" valign="top">std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a71f2cc06b097cb5c4f0a1f48130a823b">LevelToString</a> (<a class="el" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3d">LogSeverity</a> level)</td></tr>
+<tr class="separator:a71f2cc06b097cb5c4f0a1f48130a823b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaaddf7d8f68eae6c1bf90e4ec3cb5490"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3d">LogSeverity</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aaaddf7d8f68eae6c1bf90e4ec3cb5490">StringToLogLevel</a> (std::string level)</td></tr>
+<tr class="separator:aaaddf7d8f68eae6c1bf90e4ec3cb5490"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac9aad76a34137b6359a867b282ea7cfb"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ac9aad76a34137b6359a867b282ea7cfb">SetLogFilter</a> (<a class="el" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3d">LogSeverity</a> level)</td></tr>
+<tr class="separator:ac9aad76a34137b6359a867b282ea7cfb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7f8325a4bc02f2f687ba1968b595ec0a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a7f8325a4bc02f2f687ba1968b595ec0a">SetAllLoggingSinks</a> (bool standardOut, bool debugOut, bool coloured)</td></tr>
+<tr class="separator:a7f8325a4bc02f2f687ba1968b595ec0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9cdee30c21f3dd630b4e460527105b74"><td class="memItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3d">LogSeverity</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a9cdee30c21f3dd630b4e460527105b74">ConvertLogSeverity</a> (<a class="el" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407">BoostLogSeverityMapping</a> severity)</td></tr>
+<tr class="separator:a9cdee30c21f3dd630b4e460527105b74"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5d94c2125c725df5b619d16db9d4a8e9"><td class="memTemplParams" colspan="2">template&lt;typename Arg , typename std::enable_if&lt; IsMemorySource&lt; Arg &gt;::value &gt;::type * = nullptr&gt; </td></tr>
+<tr class="memitem:a5d94c2125c725df5b619d16db9d4a8e9"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.xhtml#a5b05f3b7208ec7cea3338e30057c0bac">MemorySourceFlags</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a5d94c2125c725df5b619d16db9d4a8e9">Combine</a> (Arg sourceA, Arg sourceB)</td></tr>
+<tr class="separator:a5d94c2125c725df5b619d16db9d4a8e9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae91e1849e95350c8e50912a217999eac"><td class="memTemplParams" colspan="2">template&lt;typename Arg , typename ... Args, typename std::enable_if&lt; IsMemorySource&lt; Arg &gt;::value &gt;::type * = nullptr&gt; </td></tr>
+<tr class="memitem:ae91e1849e95350c8e50912a217999eac"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.xhtml#a5b05f3b7208ec7cea3338e30057c0bac">MemorySourceFlags</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ae91e1849e95350c8e50912a217999eac">Combine</a> (Arg source, Args... rest)</td></tr>
+<tr class="separator:ae91e1849e95350c8e50912a217999eac"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a84f86b4de5adf0b164e811c87051a0ee"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a84f86b4de5adf0b164e811c87051a0ee">CheckFlag</a> (<a class="el" href="namespacearmnn.xhtml#a5b05f3b7208ec7cea3338e30057c0bac">MemorySourceFlags</a> flags, <a class="el" href="namespacearmnn.xhtml#a14fcd7f88d11cea0a018269dca5f9277">MemorySource</a> source)</td></tr>
+<tr class="separator:a84f86b4de5adf0b164e811c87051a0ee"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a77780137c47f528921f6537447060f05"><td class="memTemplParams" colspan="2">template&lt;typename T , class... Args&gt; </td></tr>
+<tr class="memitem:a77780137c47f528921f6537447060f05"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; T &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a77780137c47f528921f6537447060f05">MakeOptional</a> (Args &amp;&amp;... args)</td></tr>
+<tr class="memdesc:a77780137c47f528921f6537447060f05"><td class="mdescLeft">&#160;</td><td class="mdescRight">Utility template that constructs an object of type T in-place and wraps it inside an Optional&lt;T&gt; object. <a href="#a77780137c47f528921f6537447060f05">More...</a><br /></td></tr>
+<tr class="separator:a77780137c47f528921f6537447060f05"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:addb6b14dd1b632263ffe77430259a7c4"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#addb6b14dd1b632263ffe77430259a7c4">GetLayerTypeAsCString</a> (<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> type)</td></tr>
+<tr class="separator:addb6b14dd1b632263ffe77430259a7c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a19a90c41ca2f46ab29918fef1a6ad72e"><td class="memItemLeft" align="right" valign="top">constexpr char const *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a19a90c41ca2f46ab29918fef1a6ad72e">GetStatusAsCString</a> (<a class="el" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">Status</a> status)</td></tr>
+<tr class="separator:a19a90c41ca2f46ab29918fef1a6ad72e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa093207ea7c4e7a9c9abe40d2f57995b"><td class="memItemLeft" align="right" valign="top">constexpr char const *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aa093207ea7c4e7a9c9abe40d2f57995b">GetActivationFunctionAsCString</a> (<a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9ea">ActivationFunction</a> activation)</td></tr>
+<tr class="separator:aa093207ea7c4e7a9c9abe40d2f57995b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5cda3502382f06a64c3cbeb1829bd850"><td class="memItemLeft" align="right" valign="top">constexpr char const *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a5cda3502382f06a64c3cbeb1829bd850">GetArgMinMaxFunctionAsCString</a> (<a class="el" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeae">ArgMinMaxFunction</a> function)</td></tr>
+<tr class="separator:a5cda3502382f06a64c3cbeb1829bd850"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aabb76a77e95921785f576bb29b495cd8"><td class="memItemLeft" align="right" valign="top">constexpr char const *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aabb76a77e95921785f576bb29b495cd8">GetComparisonOperationAsCString</a> (<a class="el" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58c">ComparisonOperation</a> operation)</td></tr>
+<tr class="separator:aabb76a77e95921785f576bb29b495cd8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6dac966f265381903c8ef4f392becced"><td class="memItemLeft" align="right" valign="top">constexpr char const *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a6dac966f265381903c8ef4f392becced">GetUnaryOperationAsCString</a> (<a class="el" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8">UnaryOperation</a> operation)</td></tr>
+<tr class="separator:a6dac966f265381903c8ef4f392becced"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0ad431ff1600c845fda078ac58a47809"><td class="memItemLeft" align="right" valign="top">constexpr char const *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a0ad431ff1600c845fda078ac58a47809">GetLogicalBinaryOperationAsCString</a> (<a class="el" href="namespacearmnn.xhtml#a2da4db0140d1a6dc69c9c82e9ef5379e">LogicalBinaryOperation</a> operation)</td></tr>
+<tr class="separator:a0ad431ff1600c845fda078ac58a47809"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a517314c21ac5309b90408da162212f9d"><td class="memItemLeft" align="right" valign="top">constexpr char const *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a517314c21ac5309b90408da162212f9d">GetPoolingAlgorithmAsCString</a> (<a class="el" href="namespacearmnn.xhtml#a961bbfe1db71a848eff5a1f0ab775718">PoolingAlgorithm</a> pooling)</td></tr>
+<tr class="separator:a517314c21ac5309b90408da162212f9d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a67d7ce2e14ebd328f423322db88279c3"><td class="memItemLeft" align="right" valign="top">constexpr char const *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a67d7ce2e14ebd328f423322db88279c3">GetOutputShapeRoundingAsCString</a> (<a class="el" href="namespacearmnn.xhtml#adf2e5515c4c36a3e7e46bb8b83c6754e">OutputShapeRounding</a> rounding)</td></tr>
+<tr class="separator:a67d7ce2e14ebd328f423322db88279c3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a129bde68152f5892e6abdedcb62aa983"><td class="memItemLeft" align="right" valign="top">constexpr char const *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a129bde68152f5892e6abdedcb62aa983">GetPaddingMethodAsCString</a> (<a class="el" href="namespacearmnn.xhtml#a3888429b6ebc79f9a7df549e5e4d9a2f">PaddingMethod</a> method)</td></tr>
+<tr class="separator:a129bde68152f5892e6abdedcb62aa983"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adb4d7f45aaa839541a90821a21d69c82"><td class="memItemLeft" align="right" valign="top">constexpr char const *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#adb4d7f45aaa839541a90821a21d69c82">GetPaddingModeAsCString</a> (<a class="el" href="namespacearmnn.xhtml#a14d24d90ab4ba2956e92e27890ba4c91">PaddingMode</a> mode)</td></tr>
+<tr class="separator:adb4d7f45aaa839541a90821a21d69c82"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3c1f8116bfc753b5a72ae00d9f92a595"><td class="memItemLeft" align="right" valign="top">constexpr char const *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a3c1f8116bfc753b5a72ae00d9f92a595">GetReduceOperationAsCString</a> (<a class="el" href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0">ReduceOperation</a> reduce_operation)</td></tr>
+<tr class="separator:a3c1f8116bfc753b5a72ae00d9f92a595"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa02b9e06fb20fa3c13da0427e6ee5ab2"><td class="memItemLeft" align="right" valign="top">constexpr unsigned int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aa02b9e06fb20fa3c13da0427e6ee5ab2">GetDataTypeSize</a> (<a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> dataType)</td></tr>
+<tr class="separator:aa02b9e06fb20fa3c13da0427e6ee5ab2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a637fea04314a9870c1dc4355c1bed429"><td class="memTemplParams" colspan="2">template&lt;unsigned N&gt; </td></tr>
+<tr class="memitem:a637fea04314a9870c1dc4355c1bed429"><td class="memTemplItemLeft" align="right" valign="top">constexpr bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a637fea04314a9870c1dc4355c1bed429">StrEqual</a> (const char *strA, const char(&amp;strB)[N])</td></tr>
+<tr class="separator:a637fea04314a9870c1dc4355c1bed429"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a65645fa03bf8cddfb9d8a9f83beeb6e8"><td class="memItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456ae">armnn::Compute</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a65645fa03bf8cddfb9d8a9f83beeb6e8">ParseComputeDevice</a> (const char *str)</td></tr>
+<tr class="memdesc:a65645fa03bf8cddfb9d8a9f83beeb6e8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated function that will be removed together with the Compute enum. <a href="#a65645fa03bf8cddfb9d8a9f83beeb6e8">More...</a><br /></td></tr>
+<tr class="separator:a65645fa03bf8cddfb9d8a9f83beeb6e8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a81b5ff8545adad19a1c9d4ca076d552c"><td class="memItemLeft" align="right" valign="top">constexpr const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a81b5ff8545adad19a1c9d4ca076d552c">GetDataTypeName</a> (<a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> dataType)</td></tr>
+<tr class="separator:a81b5ff8545adad19a1c9d4ca076d552c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aeef70b7611ae71e97ab55c75ef72b210"><td class="memItemLeft" align="right" valign="top">constexpr const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aeef70b7611ae71e97ab55c75ef72b210">GetDataLayoutName</a> (<a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> dataLayout)</td></tr>
+<tr class="separator:aeef70b7611ae71e97ab55c75ef72b210"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aeadd602e128a2be97161345b48533417"><td class="memItemLeft" align="right" valign="top">constexpr const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aeadd602e128a2be97161345b48533417">GetNormalizationAlgorithmChannelAsCString</a> (<a class="el" href="namespacearmnn.xhtml#abe18a5033f2ab9c0de82c676b48f5437">NormalizationAlgorithmChannel</a> channel)</td></tr>
+<tr class="separator:aeadd602e128a2be97161345b48533417"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad57460ea53cd0b519a3b3547eaf1db7c"><td class="memItemLeft" align="right" valign="top">constexpr const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ad57460ea53cd0b519a3b3547eaf1db7c">GetNormalizationAlgorithmMethodAsCString</a> (<a class="el" href="namespacearmnn.xhtml#ad605d1661fa0d8c7fea651d82fbe11c9">NormalizationAlgorithmMethod</a> method)</td></tr>
+<tr class="separator:ad57460ea53cd0b519a3b3547eaf1db7c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aded981a42027bd3302b9c0f09d988659"><td class="memItemLeft" align="right" valign="top">constexpr const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aded981a42027bd3302b9c0f09d988659">GetResizeMethodAsCString</a> (<a class="el" href="namespacearmnn.xhtml#a9a2af2f8c4af4f9efa8e79417d505ac4">ResizeMethod</a> method)</td></tr>
+<tr class="separator:aded981a42027bd3302b9c0f09d988659"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa0a94554d6ef64e32793b3d54b2563f0"><td class="memItemLeft" align="right" valign="top">constexpr const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aa0a94554d6ef64e32793b3d54b2563f0">GetMemBlockStrategyTypeName</a> (<a class="el" href="namespacearmnn.xhtml#a7100de49939c3e393101f78d425a98c6">MemBlockStrategyType</a> memBlockStrategyType)</td></tr>
+<tr class="separator:aa0a94554d6ef64e32793b3d54b2563f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad44c007f21af2d0375e3ef9400a1b275"><td class="memTemplParams" colspan="2">template&lt;typename T &gt; </td></tr>
+<tr class="memitem:ad44c007f21af2d0375e3ef9400a1b275"><td class="memTemplItemLeft" align="right" valign="top">constexpr bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ad44c007f21af2d0375e3ef9400a1b275">IsQuantizedType</a> ()</td></tr>
+<tr class="separator:ad44c007f21af2d0375e3ef9400a1b275"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad91bc7bfe29186f5d78c28386c6c5309"><td class="memItemLeft" align="right" valign="top">constexpr bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ad91bc7bfe29186f5d78c28386c6c5309">IsQuantized8BitType</a> (<a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> dataType)</td></tr>
+<tr class="separator:ad91bc7bfe29186f5d78c28386c6c5309"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa172264d7075abf828e0b6894996a561"><td class="memItemLeft" align="right" valign="top">constexpr bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aa172264d7075abf828e0b6894996a561">IsQuantizedType</a> (<a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> dataType)</td></tr>
+<tr class="separator:aa172264d7075abf828e0b6894996a561"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaa5b68f3f5bb73b1d3c85d895547a372"><td class="memItemLeft" align="right" valign="top">std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aaa5b68f3f5bb73b1d3c85d895547a372">operator&lt;&lt;</a> (std::ostream &amp;os, <a class="el" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">Status</a> stat)</td></tr>
+<tr class="separator:aaa5b68f3f5bb73b1d3c85d895547a372"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa6d7532e14af97577c054f96d0cf23b3"><td class="memItemLeft" align="right" valign="top">std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aa6d7532e14af97577c054f96d0cf23b3">operator&lt;&lt;</a> (std::ostream &amp;os, const <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a> &amp;shape)</td></tr>
+<tr class="separator:aa6d7532e14af97577c054f96d0cf23b3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad773a034fb9983e15f3094b4c5c7c30c"><td class="memTemplParams" colspan="2">template&lt;typename QuantizedType &gt; </td></tr>
+<tr class="memitem:ad773a034fb9983e15f3094b4c5c7c30c"><td class="memTemplItemLeft" align="right" valign="top">QuantizedType&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ad773a034fb9983e15f3094b4c5c7c30c">Quantize</a> (float value, float scale, int32_t offset)</td></tr>
+<tr class="memdesc:ad773a034fb9983e15f3094b4c5c7c30c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Quantize a floating point data type into an 8-bit data type. <a href="#ad773a034fb9983e15f3094b4c5c7c30c">More...</a><br /></td></tr>
+<tr class="separator:ad773a034fb9983e15f3094b4c5c7c30c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a855293b1be0581fb61ef6a1c5b027d0f"><td class="memTemplParams" colspan="2">template&lt;typename QuantizedType &gt; </td></tr>
+<tr class="memitem:a855293b1be0581fb61ef6a1c5b027d0f"><td class="memTemplItemLeft" align="right" valign="top">float&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a855293b1be0581fb61ef6a1c5b027d0f">Dequantize</a> (QuantizedType value, float scale, int32_t offset)</td></tr>
+<tr class="memdesc:a855293b1be0581fb61ef6a1c5b027d0f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Dequantize an 8-bit data type into a floating point data type. <a href="#a855293b1be0581fb61ef6a1c5b027d0f">More...</a><br /></td></tr>
+<tr class="separator:a855293b1be0581fb61ef6a1c5b027d0f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9667bea652e3a5ef81fea59b71513ced"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a9667bea652e3a5ef81fea59b71513ced">VerifyTensorInfoDataType</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> &amp;info, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a> dataType)</td></tr>
+<tr class="separator:a9667bea652e3a5ef81fea59b71513ced"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a44affeeb090c3c6a3062830562672e84"><td class="memTemplParams" colspan="2">template&lt;typename ... Ts&gt; </td></tr>
+<tr class="memitem:a44affeeb090c3c6a3062830562672e84"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a> (Ts &amp;&amp;...)</td></tr>
+<tr class="separator:a44affeeb090c3c6a3062830562672e84"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a375ca3cff9f1b005d1412dc5f3cf5b6e"><td class="memTemplParams" colspan="2">template&lt;typename Dest , typename Source &gt; </td></tr>
+<tr class="memitem:a375ca3cff9f1b005d1412dc5f3cf5b6e"><td class="memTemplItemLeft" align="right" valign="top">std::enable_if_t&lt; std::is_unsigned&lt; Source &gt;::value &amp;&amp;std::is_unsigned&lt; Dest &gt;::value, Dest &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">numeric_cast</a> (Source source)</td></tr>
+<tr class="separator:a375ca3cff9f1b005d1412dc5f3cf5b6e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a40a708e0ade241da31597eefab4ad8a9"><td class="memTemplParams" colspan="2">template&lt;typename Dest , typename Source &gt; </td></tr>
+<tr class="memitem:a40a708e0ade241da31597eefab4ad8a9"><td class="memTemplItemLeft" align="right" valign="top">std::enable_if_t&lt; std::is_signed&lt; Source &gt;::value &amp;&amp;std::is_integral&lt; Source &gt;::value &amp;&amp;std::is_signed&lt; Dest &gt;::value &amp;&amp;std::is_integral&lt; Dest &gt;::value, Dest &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a40a708e0ade241da31597eefab4ad8a9">numeric_cast</a> (Source source)</td></tr>
+<tr class="separator:a40a708e0ade241da31597eefab4ad8a9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aec2a3221ba307e3f9f8d6b8cc69774fa"><td class="memTemplParams" colspan="2">template&lt;typename Dest , typename Source &gt; </td></tr>
+<tr class="memitem:aec2a3221ba307e3f9f8d6b8cc69774fa"><td class="memTemplItemLeft" align="right" valign="top">std::enable_if_t&lt; std::is_floating_point&lt; Source &gt;::value &amp;&amp;std::is_floating_point&lt; Dest &gt;::value, Dest &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aec2a3221ba307e3f9f8d6b8cc69774fa">numeric_cast</a> (Source source)</td></tr>
+<tr class="separator:aec2a3221ba307e3f9f8d6b8cc69774fa"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a320f9416a8c5eda0210f1d0ec71dbe53"><td class="memTemplParams" colspan="2">template&lt;typename Dest , typename Source &gt; </td></tr>
+<tr class="memitem:a320f9416a8c5eda0210f1d0ec71dbe53"><td class="memTemplItemLeft" align="right" valign="top">std::enable_if_t&lt; std::is_floating_point&lt; Source &gt;::value &amp;&amp;std::is_signed&lt; Dest &gt;::value &amp;&amp;std::is_integral&lt; Dest &gt;::value, Dest &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a320f9416a8c5eda0210f1d0ec71dbe53">numeric_cast</a> (Source source)</td></tr>
+<tr class="separator:a320f9416a8c5eda0210f1d0ec71dbe53"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3afc74a78c7a7590fd1c35b0d5eb69db"><td class="memTemplParams" colspan="2">template&lt;typename Dest , typename Source &gt; </td></tr>
+<tr class="memitem:a3afc74a78c7a7590fd1c35b0d5eb69db"><td class="memTemplItemLeft" align="right" valign="top">std::enable_if_t&lt; std::is_signed&lt; Source &gt;::value &amp;&amp;std::is_integral&lt; Source &gt;::value &amp;&amp;std::is_floating_point&lt; Dest &gt;::value, Dest &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a3afc74a78c7a7590fd1c35b0d5eb69db">numeric_cast</a> (Source source)</td></tr>
+<tr class="separator:a3afc74a78c7a7590fd1c35b0d5eb69db"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa4039ab8f10849c09d08485cf6f113de"><td class="memTemplParams" colspan="2">template&lt;typename Dest , typename Source &gt; </td></tr>
+<tr class="memitem:aa4039ab8f10849c09d08485cf6f113de"><td class="memTemplItemLeft" align="right" valign="top">std::enable_if_t&lt; std::is_signed&lt; Dest &gt;::value &amp;&amp;std::is_integral&lt; Dest &gt;::value &amp;&amp;std::is_unsigned&lt; Source &gt;::value, Dest &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aa4039ab8f10849c09d08485cf6f113de">numeric_cast</a> (Source sValue)</td></tr>
+<tr class="separator:aa4039ab8f10849c09d08485cf6f113de"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aab0d3e691c3a26cc5c4aa5c6f12eaea0"><td class="memTemplParams" colspan="2">template&lt;typename Dest , typename Source &gt; </td></tr>
+<tr class="memitem:aab0d3e691c3a26cc5c4aa5c6f12eaea0"><td class="memTemplItemLeft" align="right" valign="top">std::enable_if_t&lt; std::is_floating_point&lt; Dest &gt;::value &amp;&amp;std::is_unsigned&lt; Source &gt;::value, Dest &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aab0d3e691c3a26cc5c4aa5c6f12eaea0">numeric_cast</a> (Source sValue)</td></tr>
+<tr class="separator:aab0d3e691c3a26cc5c4aa5c6f12eaea0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4348c6348d681f6d0c7cc6d229435396"><td class="memTemplParams" colspan="2">template&lt;typename Dest , typename Source &gt; </td></tr>
+<tr class="memitem:a4348c6348d681f6d0c7cc6d229435396"><td class="memTemplItemLeft" align="right" valign="top">std::enable_if_t&lt; std::is_unsigned&lt; Dest &gt;::value &amp;&amp;std::is_signed&lt; Source &gt;::value &amp;&amp;std::is_integral&lt; Source &gt;::value, Dest &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a4348c6348d681f6d0c7cc6d229435396">numeric_cast</a> (Source sValue)</td></tr>
+<tr class="separator:a4348c6348d681f6d0c7cc6d229435396"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1b5cfb3269fecb1dda8d0aee3c8212e6"><td class="memTemplParams" colspan="2">template&lt;typename Dest , typename Source &gt; </td></tr>
+<tr class="memitem:a1b5cfb3269fecb1dda8d0aee3c8212e6"><td class="memTemplItemLeft" align="right" valign="top">std::enable_if_t&lt; std::is_unsigned&lt; Dest &gt;::value &amp;&amp;std::is_floating_point&lt; Source &gt;::value, Dest &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a1b5cfb3269fecb1dda8d0aee3c8212e6">numeric_cast</a> (Source sValue)</td></tr>
+<tr class="separator:a1b5cfb3269fecb1dda8d0aee3c8212e6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa4e89c644c511e255f6a7ecbd5d14686"><td class="memTemplParams" colspan="2">template&lt;typename DestType , typename SourceType &gt; </td></tr>
+<tr class="memitem:aa4e89c644c511e255f6a7ecbd5d14686"><td class="memTemplItemLeft" align="right" valign="top">DestType&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a> (SourceType *value)</td></tr>
+<tr class="memdesc:aa4e89c644c511e255f6a7ecbd5d14686"><td class="mdescLeft">&#160;</td><td class="mdescRight">Polymorphic downcast for build in pointers only. <a href="#aa4e89c644c511e255f6a7ecbd5d14686">More...</a><br /></td></tr>
+<tr class="separator:aa4e89c644c511e255f6a7ecbd5d14686"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6baab222db3195a0bd77f488a81fd316"><td class="memTemplParams" colspan="2">template&lt;typename DestType , typename SourceType &gt; </td></tr>
+<tr class="memitem:a6baab222db3195a0bd77f488a81fd316"><td class="memTemplItemLeft" align="right" valign="top">auto&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a6baab222db3195a0bd77f488a81fd316">PolymorphicPointerDowncast</a> (const SourceType &amp;value)</td></tr>
+<tr class="memdesc:a6baab222db3195a0bd77f488a81fd316"><td class="mdescLeft">&#160;</td><td class="mdescRight">Polymorphic downcast for shared pointers and build in pointers. <a href="#a6baab222db3195a0bd77f488a81fd316">More...</a><br /></td></tr>
+<tr class="separator:a6baab222db3195a0bd77f488a81fd316"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac895f6f6897ce335b7b433201bae0b48"><td class="memItemLeft" align="right" valign="top">std::chrono::high_resolution_clock::time_point&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ac895f6f6897ce335b7b433201bae0b48">GetTimeNow</a> ()</td></tr>
+<tr class="separator:ac895f6f6897ce335b7b433201bae0b48"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a441621f00fd5665898c81a5ae3473c6b"><td class="memItemLeft" align="right" valign="top">std::chrono::duration&lt; double, std::milli &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a441621f00fd5665898c81a5ae3473c6b">GetTimeDuration</a> (std::chrono::high_resolution_clock::time_point start_time)</td></tr>
+<tr class="separator:a441621f00fd5665898c81a5ae3473c6b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2cf1ea7140f419eba6d60d01dd0a795a"><td class="memTemplParams" colspan="2">template&lt;typename Function , typename Iterator &gt; </td></tr>
+<tr class="memitem:a2cf1ea7140f419eba6d60d01dd0a795a"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="classarmnn_1_1_transform_iterator.xhtml">TransformIterator</a>&lt; Function, Iterator &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a2cf1ea7140f419eba6d60d01dd0a795a">MakeTransformIterator</a> (Iterator i, Function f)</td></tr>
+<tr class="separator:a2cf1ea7140f419eba6d60d01dd0a795a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa59f7a819c3e29d10ffc41e5c0616872"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aa59f7a819c3e29d10ffc41e5c0616872">ConfigureLogging</a> (bool printToStandardOutput, bool printToDebugOutput, <a class="el" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3d">LogSeverity</a> severity)</td></tr>
+<tr class="memdesc:aa59f7a819c3e29d10ffc41e5c0616872"><td class="mdescLeft">&#160;</td><td class="mdescRight">Configures the logging behaviour of the ARMNN library. <a href="#aa59f7a819c3e29d10ffc41e5c0616872">More...</a><br /></td></tr>
+<tr class="separator:aa59f7a819c3e29d10ffc41e5c0616872"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad734960f7ae60a86b74f6722f6c14332"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ad734960f7ae60a86b74f6722f6c14332">NeonDetected</a> ()</td></tr>
+<tr class="separator:ad734960f7ae60a86b74f6722f6c14332"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa09a8bb02eed50715082d8b7fccd2f8d"><td class="memItemLeft" align="right" valign="top">const std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aa09a8bb02eed50715082d8b7fccd2f8d">GetVersion</a> ()</td></tr>
+<tr class="separator:aa09a8bb02eed50715082d8b7fccd2f8d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a14d7f180bf51e86850305965c3707e07"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a14d7f180bf51e86850305965c3707e07">swap</a> (<a class="el" href="structarmnn_1_1_origins_descriptor.xhtml">OriginsDescriptor</a> &amp;first, <a class="el" href="structarmnn_1_1_origins_descriptor.xhtml">OriginsDescriptor</a> &amp;second)</td></tr>
+<tr class="separator:a14d7f180bf51e86850305965c3707e07"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a686b8288a04b3ffff67d560eea53f6be"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a686b8288a04b3ffff67d560eea53f6be">swap</a> (<a class="el" href="structarmnn_1_1_views_descriptor.xhtml">ViewsDescriptor</a> &amp;first, <a class="el" href="structarmnn_1_1_views_descriptor.xhtml">ViewsDescriptor</a> &amp;second)</td></tr>
+<tr class="separator:a686b8288a04b3ffff67d560eea53f6be"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac4fb1513cf6f4f3f40ab3d6559ec4067"><td class="memTemplParams" colspan="2">template&lt;typename T &gt; </td></tr>
+<tr class="memitem:ac4fb1513cf6f4f3f40ab3d6559ec4067"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ac4fb1513cf6f4f3f40ab3d6559ec4067">LayerEnumOf</a> (const T *=nullptr)</td></tr>
+<tr class="separator:ac4fb1513cf6f4f3f40ab3d6559ec4067"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afb1e69829289fb07cc349c0884f27abd"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:afb1e69829289fb07cc349c0884f27abd"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#afb1e69829289fb07cc349c0884f27abd">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_activation_layer.xhtml">ActivationLayer</a> *)</td></tr>
+<tr class="separator:afb1e69829289fb07cc349c0884f27abd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acc630e11a5baa28ad5723568a7a60109"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:acc630e11a5baa28ad5723568a7a60109"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#acc630e11a5baa28ad5723568a7a60109">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_addition_layer.xhtml">AdditionLayer</a> *)</td></tr>
+<tr class="separator:acc630e11a5baa28ad5723568a7a60109"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a324e860c347972fce7a1c07531bed06e"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a324e860c347972fce7a1c07531bed06e"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a324e860c347972fce7a1c07531bed06e">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_arg_min_max_layer.xhtml">ArgMinMaxLayer</a> *)</td></tr>
+<tr class="separator:a324e860c347972fce7a1c07531bed06e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae22db3ab5196edbb2e4e5244adc512e3"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:ae22db3ab5196edbb2e4e5244adc512e3"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ae22db3ab5196edbb2e4e5244adc512e3">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_batch_normalization_layer.xhtml">BatchNormalizationLayer</a> *)</td></tr>
+<tr class="separator:ae22db3ab5196edbb2e4e5244adc512e3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a87ffe3fb58ec36989d343e53e23fb0f8"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a87ffe3fb58ec36989d343e53e23fb0f8"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a87ffe3fb58ec36989d343e53e23fb0f8">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_batch_to_space_nd_layer.xhtml">BatchToSpaceNdLayer</a> *)</td></tr>
+<tr class="separator:a87ffe3fb58ec36989d343e53e23fb0f8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0bce3e1a80419bc6966f60c8f2db9b92"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a0bce3e1a80419bc6966f60c8f2db9b92"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a0bce3e1a80419bc6966f60c8f2db9b92">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_cast_layer.xhtml">CastLayer</a> *)</td></tr>
+<tr class="separator:a0bce3e1a80419bc6966f60c8f2db9b92"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af99801cff508d065bede5283a0ea1dc9"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:af99801cff508d065bede5283a0ea1dc9"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#af99801cff508d065bede5283a0ea1dc9">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_channel_shuffle_layer.xhtml">ChannelShuffleLayer</a> *)</td></tr>
+<tr class="separator:af99801cff508d065bede5283a0ea1dc9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a43b8024cb70c07116be132ca28b12a21"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a43b8024cb70c07116be132ca28b12a21"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a43b8024cb70c07116be132ca28b12a21">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_comparison_layer.xhtml">ComparisonLayer</a> *)</td></tr>
+<tr class="separator:a43b8024cb70c07116be132ca28b12a21"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a300c356944bb1e9d2dff6191d1c3501c"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a300c356944bb1e9d2dff6191d1c3501c"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a300c356944bb1e9d2dff6191d1c3501c">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_concat_layer.xhtml">ConcatLayer</a> *)</td></tr>
+<tr class="separator:a300c356944bb1e9d2dff6191d1c3501c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a307007c2249288fe158bfdfaf9e1c413"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a307007c2249288fe158bfdfaf9e1c413"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a307007c2249288fe158bfdfaf9e1c413">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_constant_layer.xhtml">ConstantLayer</a> *)</td></tr>
+<tr class="separator:a307007c2249288fe158bfdfaf9e1c413"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac5837b21d9501669ef31d1a74661671c"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:ac5837b21d9501669ef31d1a74661671c"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ac5837b21d9501669ef31d1a74661671c">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_convert_bf16_to_fp32_layer.xhtml">ConvertBf16ToFp32Layer</a> *)</td></tr>
+<tr class="separator:ac5837b21d9501669ef31d1a74661671c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4471d39d8390fc550c1f8688639e66f5"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a4471d39d8390fc550c1f8688639e66f5"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a4471d39d8390fc550c1f8688639e66f5">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_convert_fp16_to_fp32_layer.xhtml">ConvertFp16ToFp32Layer</a> *)</td></tr>
+<tr class="separator:a4471d39d8390fc550c1f8688639e66f5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afa4c37edb872b9dd64f0f0153a93e43f"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:afa4c37edb872b9dd64f0f0153a93e43f"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#afa4c37edb872b9dd64f0f0153a93e43f">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_convert_fp32_to_bf16_layer.xhtml">ConvertFp32ToBf16Layer</a> *)</td></tr>
+<tr class="separator:afa4c37edb872b9dd64f0f0153a93e43f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af8df06bed5f1257864645e45948afa5c"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:af8df06bed5f1257864645e45948afa5c"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#af8df06bed5f1257864645e45948afa5c">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_convert_fp32_to_fp16_layer.xhtml">ConvertFp32ToFp16Layer</a> *)</td></tr>
+<tr class="separator:af8df06bed5f1257864645e45948afa5c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab2f52d0c728933e36f581a07676d9fe9"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:ab2f52d0c728933e36f581a07676d9fe9"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ab2f52d0c728933e36f581a07676d9fe9">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_convolution2d_layer.xhtml">Convolution2dLayer</a> *)</td></tr>
+<tr class="separator:ab2f52d0c728933e36f581a07676d9fe9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8aa8025b92a7d302536ab63c1f0ea99c"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a8aa8025b92a7d302536ab63c1f0ea99c"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a8aa8025b92a7d302536ab63c1f0ea99c">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_convolution3d_layer.xhtml">Convolution3dLayer</a> *)</td></tr>
+<tr class="separator:a8aa8025b92a7d302536ab63c1f0ea99c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad596268fcd03c87a4b6fde86f4732546"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:ad596268fcd03c87a4b6fde86f4732546"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ad596268fcd03c87a4b6fde86f4732546">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_debug_layer.xhtml">DebugLayer</a> *)</td></tr>
+<tr class="separator:ad596268fcd03c87a4b6fde86f4732546"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a939154289f544a02baec0735b27b8894"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a939154289f544a02baec0735b27b8894"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a939154289f544a02baec0735b27b8894">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_depth_to_space_layer.xhtml">DepthToSpaceLayer</a> *)</td></tr>
+<tr class="separator:a939154289f544a02baec0735b27b8894"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a26a46c27bca08b5bd26abba341f1d795"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a26a46c27bca08b5bd26abba341f1d795"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a26a46c27bca08b5bd26abba341f1d795">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_depthwise_convolution2d_layer.xhtml">DepthwiseConvolution2dLayer</a> *)</td></tr>
+<tr class="separator:a26a46c27bca08b5bd26abba341f1d795"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a95e2d190d7483017b4f4841dd07776e5"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a95e2d190d7483017b4f4841dd07776e5"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a95e2d190d7483017b4f4841dd07776e5">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_dequantize_layer.xhtml">DequantizeLayer</a> *)</td></tr>
+<tr class="separator:a95e2d190d7483017b4f4841dd07776e5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a22772d461066f995cd72d13066b0f46d"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a22772d461066f995cd72d13066b0f46d"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a22772d461066f995cd72d13066b0f46d">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_detection_post_process_layer.xhtml">DetectionPostProcessLayer</a> *)</td></tr>
+<tr class="separator:a22772d461066f995cd72d13066b0f46d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a955b1001b8c57c60ce443a1e31468f20"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a955b1001b8c57c60ce443a1e31468f20"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a955b1001b8c57c60ce443a1e31468f20">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_division_layer.xhtml">DivisionLayer</a> *)</td></tr>
+<tr class="separator:a955b1001b8c57c60ce443a1e31468f20"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a72f7601d11f32c8d9ccb49a80fcf662a"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a72f7601d11f32c8d9ccb49a80fcf662a"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a72f7601d11f32c8d9ccb49a80fcf662a">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_elementwise_unary_layer.xhtml">ElementwiseUnaryLayer</a> *)</td></tr>
+<tr class="separator:a72f7601d11f32c8d9ccb49a80fcf662a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4acae0cdcdfab8e941af5c4e42e58cb3"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a4acae0cdcdfab8e941af5c4e42e58cb3"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a4acae0cdcdfab8e941af5c4e42e58cb3">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_fake_quantization_layer.xhtml">FakeQuantizationLayer</a> *)</td></tr>
+<tr class="separator:a4acae0cdcdfab8e941af5c4e42e58cb3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a12fdb9a7f3cb197316e3e67e036216dc"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a12fdb9a7f3cb197316e3e67e036216dc"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a12fdb9a7f3cb197316e3e67e036216dc">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_fill_layer.xhtml">FillLayer</a> *)</td></tr>
+<tr class="separator:a12fdb9a7f3cb197316e3e67e036216dc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a575f5487e62465b6b9edbc447a26f32f"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a575f5487e62465b6b9edbc447a26f32f"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a575f5487e62465b6b9edbc447a26f32f">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_floor_layer.xhtml">FloorLayer</a> *)</td></tr>
+<tr class="separator:a575f5487e62465b6b9edbc447a26f32f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa689e4a3aa77e9d9e5851f566c5eb8b3"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:aa689e4a3aa77e9d9e5851f566c5eb8b3"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aa689e4a3aa77e9d9e5851f566c5eb8b3">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_fully_connected_layer.xhtml">FullyConnectedLayer</a> *)</td></tr>
+<tr class="separator:aa689e4a3aa77e9d9e5851f566c5eb8b3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a548fb17a9bff172e751ae4bd3add62b5"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a548fb17a9bff172e751ae4bd3add62b5"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a548fb17a9bff172e751ae4bd3add62b5">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_gather_layer.xhtml">GatherLayer</a> *)</td></tr>
+<tr class="separator:a548fb17a9bff172e751ae4bd3add62b5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adef1c8c63daa9d348a29e74eac33a054"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:adef1c8c63daa9d348a29e74eac33a054"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#adef1c8c63daa9d348a29e74eac33a054">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a> *)</td></tr>
+<tr class="separator:adef1c8c63daa9d348a29e74eac33a054"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a57bcf309be7adcc91001834979f87bde"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a57bcf309be7adcc91001834979f87bde"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a57bcf309be7adcc91001834979f87bde">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_instance_normalization_layer.xhtml">InstanceNormalizationLayer</a> *)</td></tr>
+<tr class="separator:a57bcf309be7adcc91001834979f87bde"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a36f16b97bcb662caaa4eae24ea16cccf"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a36f16b97bcb662caaa4eae24ea16cccf"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a36f16b97bcb662caaa4eae24ea16cccf">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_l2_normalization_layer.xhtml">L2NormalizationLayer</a> *)</td></tr>
+<tr class="separator:a36f16b97bcb662caaa4eae24ea16cccf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a78bb83e7a83c970a54ffe923386a79d0"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a78bb83e7a83c970a54ffe923386a79d0"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a78bb83e7a83c970a54ffe923386a79d0">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_logical_binary_layer.xhtml">LogicalBinaryLayer</a> *)</td></tr>
+<tr class="separator:a78bb83e7a83c970a54ffe923386a79d0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afb6f9bd4f43118749a0336074bed7b35"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:afb6f9bd4f43118749a0336074bed7b35"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#afb6f9bd4f43118749a0336074bed7b35">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_log_softmax_layer.xhtml">LogSoftmaxLayer</a> *)</td></tr>
+<tr class="separator:afb6f9bd4f43118749a0336074bed7b35"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0d08fb555c6d1cba705fd73b71797a28"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a0d08fb555c6d1cba705fd73b71797a28"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a0d08fb555c6d1cba705fd73b71797a28">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_lstm_layer.xhtml">LstmLayer</a> *)</td></tr>
+<tr class="separator:a0d08fb555c6d1cba705fd73b71797a28"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac2bd34e0328cda2e23ccb4c79fa72960"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:ac2bd34e0328cda2e23ccb4c79fa72960"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ac2bd34e0328cda2e23ccb4c79fa72960">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_map_layer.xhtml">MapLayer</a> *)</td></tr>
+<tr class="separator:ac2bd34e0328cda2e23ccb4c79fa72960"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6b231c8a547d4030d9a4a1618810c20b"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a6b231c8a547d4030d9a4a1618810c20b"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a6b231c8a547d4030d9a4a1618810c20b">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_maximum_layer.xhtml">MaximumLayer</a> *)</td></tr>
+<tr class="separator:a6b231c8a547d4030d9a4a1618810c20b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af079ba32db74f53aba1ad19193cd2a4b"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:af079ba32db74f53aba1ad19193cd2a4b"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#af079ba32db74f53aba1ad19193cd2a4b">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_mean_layer.xhtml">MeanLayer</a> *)</td></tr>
+<tr class="separator:af079ba32db74f53aba1ad19193cd2a4b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa17969606f64ea581c28431f2395e653"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:aa17969606f64ea581c28431f2395e653"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aa17969606f64ea581c28431f2395e653">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_mem_copy_layer.xhtml">MemCopyLayer</a> *)</td></tr>
+<tr class="separator:aa17969606f64ea581c28431f2395e653"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a70f3d83f6d1e3918eab895c8083058fa"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a70f3d83f6d1e3918eab895c8083058fa"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a70f3d83f6d1e3918eab895c8083058fa">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_mem_import_layer.xhtml">MemImportLayer</a> *)</td></tr>
+<tr class="separator:a70f3d83f6d1e3918eab895c8083058fa"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9e8199bdc39f928f694591a41d7aa0c0"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a9e8199bdc39f928f694591a41d7aa0c0"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a9e8199bdc39f928f694591a41d7aa0c0">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_merge_layer.xhtml">MergeLayer</a> *)</td></tr>
+<tr class="separator:a9e8199bdc39f928f694591a41d7aa0c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad32a13408ace1c1fa520ed64a2cbe70f"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:ad32a13408ace1c1fa520ed64a2cbe70f"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ad32a13408ace1c1fa520ed64a2cbe70f">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_minimum_layer.xhtml">MinimumLayer</a> *)</td></tr>
+<tr class="separator:ad32a13408ace1c1fa520ed64a2cbe70f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a40f1546c0fa69f318eeab4b29cc64b70"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a40f1546c0fa69f318eeab4b29cc64b70"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a40f1546c0fa69f318eeab4b29cc64b70">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_multiplication_layer.xhtml">MultiplicationLayer</a> *)</td></tr>
+<tr class="separator:a40f1546c0fa69f318eeab4b29cc64b70"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a140713619ee498a149854a5376b8d072"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a140713619ee498a149854a5376b8d072"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a140713619ee498a149854a5376b8d072">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_normalization_layer.xhtml">NormalizationLayer</a> *)</td></tr>
+<tr class="separator:a140713619ee498a149854a5376b8d072"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7a6e68f66d1d3819640b0f2d46a55fd1"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a7a6e68f66d1d3819640b0f2d46a55fd1"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a7a6e68f66d1d3819640b0f2d46a55fd1">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a> *)</td></tr>
+<tr class="separator:a7a6e68f66d1d3819640b0f2d46a55fd1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab6f1994db909dcc399cb1f8bc50c2d3d"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:ab6f1994db909dcc399cb1f8bc50c2d3d"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ab6f1994db909dcc399cb1f8bc50c2d3d">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_pad_layer.xhtml">PadLayer</a> *)</td></tr>
+<tr class="separator:ab6f1994db909dcc399cb1f8bc50c2d3d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1e6b17606926b8f69dbeda7f7ff1df95"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a1e6b17606926b8f69dbeda7f7ff1df95"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a1e6b17606926b8f69dbeda7f7ff1df95">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_permute_layer.xhtml">PermuteLayer</a> *)</td></tr>
+<tr class="separator:a1e6b17606926b8f69dbeda7f7ff1df95"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ade84059b48b38da3a233bed287864c5b"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:ade84059b48b38da3a233bed287864c5b"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ade84059b48b38da3a233bed287864c5b">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_pooling2d_layer.xhtml">Pooling2dLayer</a> *)</td></tr>
+<tr class="separator:ade84059b48b38da3a233bed287864c5b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5afa84427b91f83f2977382da7a9c62f"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a5afa84427b91f83f2977382da7a9c62f"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a5afa84427b91f83f2977382da7a9c62f">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_pooling3d_layer.xhtml">Pooling3dLayer</a> *)</td></tr>
+<tr class="separator:a5afa84427b91f83f2977382da7a9c62f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6e5eaa19ff232f11daa9a1c6caccf7fe"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a6e5eaa19ff232f11daa9a1c6caccf7fe"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a6e5eaa19ff232f11daa9a1c6caccf7fe">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_pre_compiled_layer.xhtml">PreCompiledLayer</a> *)</td></tr>
+<tr class="separator:a6e5eaa19ff232f11daa9a1c6caccf7fe"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a58a5defa35b12773a97760efadffef4f"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a58a5defa35b12773a97760efadffef4f"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a58a5defa35b12773a97760efadffef4f">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_prelu_layer.xhtml">PreluLayer</a> *)</td></tr>
+<tr class="separator:a58a5defa35b12773a97760efadffef4f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaaaf64c0888ab25bfae770bd4c2ec34b"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:aaaaf64c0888ab25bfae770bd4c2ec34b"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aaaaf64c0888ab25bfae770bd4c2ec34b">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_quantize_layer.xhtml">QuantizeLayer</a> *)</td></tr>
+<tr class="separator:aaaaf64c0888ab25bfae770bd4c2ec34b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1da1712abdf8eb56a3fd34d09a30f88a"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a1da1712abdf8eb56a3fd34d09a30f88a"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a1da1712abdf8eb56a3fd34d09a30f88a">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_q_lstm_layer.xhtml">QLstmLayer</a> *)</td></tr>
+<tr class="separator:a1da1712abdf8eb56a3fd34d09a30f88a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a31bcd6f755df954a4d7b020a09499105"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a31bcd6f755df954a4d7b020a09499105"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a31bcd6f755df954a4d7b020a09499105">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_quantized_lstm_layer.xhtml">QuantizedLstmLayer</a> *)</td></tr>
+<tr class="separator:a31bcd6f755df954a4d7b020a09499105"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0c5d6fb244a3e38da85257afb91edd80"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a0c5d6fb244a3e38da85257afb91edd80"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a0c5d6fb244a3e38da85257afb91edd80">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_rank_layer.xhtml">RankLayer</a> *)</td></tr>
+<tr class="separator:a0c5d6fb244a3e38da85257afb91edd80"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2419883b22222c7bad914095ae3a9ad2"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a2419883b22222c7bad914095ae3a9ad2"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a2419883b22222c7bad914095ae3a9ad2">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_reduce_layer.xhtml">ReduceLayer</a> *)</td></tr>
+<tr class="separator:a2419883b22222c7bad914095ae3a9ad2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6a17f58da2071720e3003a56a092aab3"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a6a17f58da2071720e3003a56a092aab3"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a6a17f58da2071720e3003a56a092aab3">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_reshape_layer.xhtml">ReshapeLayer</a> *)</td></tr>
+<tr class="separator:a6a17f58da2071720e3003a56a092aab3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aafc370ea363f0565c3a8bced1e37c79e"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:aafc370ea363f0565c3a8bced1e37c79e"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aafc370ea363f0565c3a8bced1e37c79e">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_resize_layer.xhtml">ResizeLayer</a> *)</td></tr>
+<tr class="separator:aafc370ea363f0565c3a8bced1e37c79e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a914ed6d4cdc4525ff0020148d4c4155c"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a914ed6d4cdc4525ff0020148d4c4155c"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a914ed6d4cdc4525ff0020148d4c4155c">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_shape_layer.xhtml">ShapeLayer</a> *)</td></tr>
+<tr class="separator:a914ed6d4cdc4525ff0020148d4c4155c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3cbbb4e00618b072ace46751e660a295"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a3cbbb4e00618b072ace46751e660a295"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a3cbbb4e00618b072ace46751e660a295">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_slice_layer.xhtml">SliceLayer</a> *)</td></tr>
+<tr class="separator:a3cbbb4e00618b072ace46751e660a295"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af6af4b51e08d3e811620811ab5e0cd2d"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:af6af4b51e08d3e811620811ab5e0cd2d"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#af6af4b51e08d3e811620811ab5e0cd2d">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_softmax_layer.xhtml">SoftmaxLayer</a> *)</td></tr>
+<tr class="separator:af6af4b51e08d3e811620811ab5e0cd2d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac2d31ced5505a9d05287f5b71d25e34a"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:ac2d31ced5505a9d05287f5b71d25e34a"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ac2d31ced5505a9d05287f5b71d25e34a">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_space_to_batch_nd_layer.xhtml">SpaceToBatchNdLayer</a> *)</td></tr>
+<tr class="separator:ac2d31ced5505a9d05287f5b71d25e34a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a81c31de4f532a95ab85ed6d999029332"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a81c31de4f532a95ab85ed6d999029332"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a81c31de4f532a95ab85ed6d999029332">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_space_to_depth_layer.xhtml">SpaceToDepthLayer</a> *)</td></tr>
+<tr class="separator:a81c31de4f532a95ab85ed6d999029332"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a24d3abbfc1ed81df673452c7148aa0cc"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a24d3abbfc1ed81df673452c7148aa0cc"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a24d3abbfc1ed81df673452c7148aa0cc">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_splitter_layer.xhtml">SplitterLayer</a> *)</td></tr>
+<tr class="separator:a24d3abbfc1ed81df673452c7148aa0cc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab676aab9119d1417764849099a099ecf"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:ab676aab9119d1417764849099a099ecf"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ab676aab9119d1417764849099a099ecf">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_stack_layer.xhtml">StackLayer</a> *)</td></tr>
+<tr class="separator:ab676aab9119d1417764849099a099ecf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1b5ff142f1d4420a8d83d9bcff1bfff4"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a1b5ff142f1d4420a8d83d9bcff1bfff4"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a1b5ff142f1d4420a8d83d9bcff1bfff4">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_stand_in_layer.xhtml">StandInLayer</a> *)</td></tr>
+<tr class="separator:a1b5ff142f1d4420a8d83d9bcff1bfff4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad640080ff4ea3e4f9ff05823e32ce15f"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:ad640080ff4ea3e4f9ff05823e32ce15f"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ad640080ff4ea3e4f9ff05823e32ce15f">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_strided_slice_layer.xhtml">StridedSliceLayer</a> *)</td></tr>
+<tr class="separator:ad640080ff4ea3e4f9ff05823e32ce15f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9cc235c8c5e2ef3d2788cd558d676b0a"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a9cc235c8c5e2ef3d2788cd558d676b0a"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a9cc235c8c5e2ef3d2788cd558d676b0a">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_subtraction_layer.xhtml">SubtractionLayer</a> *)</td></tr>
+<tr class="separator:a9cc235c8c5e2ef3d2788cd558d676b0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a110b9fdf7f17a1d065cd59ebc4bb76f7"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a110b9fdf7f17a1d065cd59ebc4bb76f7"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a110b9fdf7f17a1d065cd59ebc4bb76f7">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_switch_layer.xhtml">SwitchLayer</a> *)</td></tr>
+<tr class="separator:a110b9fdf7f17a1d065cd59ebc4bb76f7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af44c8ebb1b55f4c42cc301d0bf030aa5"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:af44c8ebb1b55f4c42cc301d0bf030aa5"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#af44c8ebb1b55f4c42cc301d0bf030aa5">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_transpose_layer.xhtml">TransposeLayer</a> *)</td></tr>
+<tr class="separator:af44c8ebb1b55f4c42cc301d0bf030aa5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a60af5a86cf0261d0bdf4312736ab4461"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a60af5a86cf0261d0bdf4312736ab4461"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a60af5a86cf0261d0bdf4312736ab4461">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_transpose_convolution2d_layer.xhtml">TransposeConvolution2dLayer</a> *)</td></tr>
+<tr class="separator:a60af5a86cf0261d0bdf4312736ab4461"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a598dbe8e8dfddfede22b52ebd0d437cb"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a598dbe8e8dfddfede22b52ebd0d437cb"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a598dbe8e8dfddfede22b52ebd0d437cb">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_unidirectional_sequence_lstm_layer.xhtml">UnidirectionalSequenceLstmLayer</a> *)</td></tr>
+<tr class="separator:a598dbe8e8dfddfede22b52ebd0d437cb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aac367be4f6169b13d3a8a9250d2283d6"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:aac367be4f6169b13d3a8a9250d2283d6"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aac367be4f6169b13d3a8a9250d2283d6">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_unmap_layer.xhtml">UnmapLayer</a> *)</td></tr>
+<tr class="separator:aac367be4f6169b13d3a8a9250d2283d6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a13c7d751e4d37f65a6d40c3c6e50d2b8"><td class="memTemplParams" colspan="2">template&lt;typename T , typename V &gt; </td></tr>
+<tr class="memitem:a13c7d751e4d37f65a6d40c3c6e50d2b8"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a13c7d751e4d37f65a6d40c3c6e50d2b8">SetValueChecked</a> (<a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; T &amp;&gt; optionalRef, V &amp;&amp;val)</td></tr>
+<tr class="separator:a13c7d751e4d37f65a6d40c3c6e50d2b8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af6dbe371ec651a8e0063624fdf32afc0"><td class="memTemplParams" colspan="2">template&lt;typename Float16Func , typename Float32Func , typename Uint8Func , typename Int32Func , typename BooleanFunc , typename ... Params&gt; </td></tr>
+<tr class="memitem:af6dbe371ec651a8e0063624fdf32afc0"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#af6dbe371ec651a8e0063624fdf32afc0">IsSupportedForDataTypeGeneric</a> (<a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; std::string &amp;&gt; reasonIfUnsupported, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> dataType, Float16Func float16FuncPtr, Float32Func float32FuncPtr, Uint8Func uint8FuncPtr, Int32Func int32FuncPtr, BooleanFunc booleanFuncPtr, Params &amp;&amp;... params)</td></tr>
+<tr class="separator:af6dbe371ec651a8e0063624fdf32afc0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aeaee60c3c6c67a7cf37bbef45b89fc0a"><td class="memTemplParams" colspan="2">template&lt;typename ... Params&gt; </td></tr>
+<tr class="memitem:aeaee60c3c6c67a7cf37bbef45b89fc0a"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aeaee60c3c6c67a7cf37bbef45b89fc0a">TrueFunc</a> (<a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; std::string &amp;&gt; reasonIfUnsupported, Params &amp;&amp;... params)</td></tr>
+<tr class="separator:aeaee60c3c6c67a7cf37bbef45b89fc0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6e64aab48baba12883c73e90bfd07e77"><td class="memTemplParams" colspan="2">template&lt;typename ... Params&gt; </td></tr>
+<tr class="memitem:a6e64aab48baba12883c73e90bfd07e77"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a6e64aab48baba12883c73e90bfd07e77">FalseFunc</a> (<a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; std::string &amp;&gt; reasonIfUnsupported, Params &amp;&amp;... params)</td></tr>
+<tr class="separator:a6e64aab48baba12883c73e90bfd07e77"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a621c8ffe11bba3d7ab304a9ad3feec2f"><td class="memTemplParams" colspan="2">template&lt;typename ... Params&gt; </td></tr>
+<tr class="memitem:a621c8ffe11bba3d7ab304a9ad3feec2f"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a621c8ffe11bba3d7ab304a9ad3feec2f">FalseFuncF16</a> (<a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; std::string &amp;&gt; reasonIfUnsupported, Params &amp;&amp;... params)</td></tr>
+<tr class="separator:a621c8ffe11bba3d7ab304a9ad3feec2f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a02d627e25da543b79ee8a59a1193a426"><td class="memTemplParams" colspan="2">template&lt;typename ... Params&gt; </td></tr>
+<tr class="memitem:a02d627e25da543b79ee8a59a1193a426"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a02d627e25da543b79ee8a59a1193a426">FalseFuncF32</a> (<a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; std::string &amp;&gt; reasonIfUnsupported, Params &amp;&amp;... params)</td></tr>
+<tr class="separator:a02d627e25da543b79ee8a59a1193a426"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4e4802d0916cb8b7da508ab03ce1f163"><td class="memTemplParams" colspan="2">template&lt;typename ... Params&gt; </td></tr>
+<tr class="memitem:a4e4802d0916cb8b7da508ab03ce1f163"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a4e4802d0916cb8b7da508ab03ce1f163">FalseFuncU8</a> (<a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; std::string &amp;&gt; reasonIfUnsupported, Params &amp;&amp;... params)</td></tr>
+<tr class="separator:a4e4802d0916cb8b7da508ab03ce1f163"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a07ae80b502ab664f1aaf7d6c00725982"><td class="memTemplParams" colspan="2">template&lt;typename ... Params&gt; </td></tr>
+<tr class="memitem:a07ae80b502ab664f1aaf7d6c00725982"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a07ae80b502ab664f1aaf7d6c00725982">FalseFuncI32</a> (<a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; std::string &amp;&gt; reasonIfUnsupported, Params &amp;&amp;... params)</td></tr>
+<tr class="separator:a07ae80b502ab664f1aaf7d6c00725982"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0b55e509dd7e3bfea233a389a18c21e6"><td class="memTemplParams" colspan="2">template&lt;typename ... Params&gt; </td></tr>
+<tr class="memitem:a0b55e509dd7e3bfea233a389a18c21e6"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a0b55e509dd7e3bfea233a389a18c21e6">FalseInputFuncF32</a> (<a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; std::string &amp;&gt; reasonIfUnsupported, Params &amp;&amp;... params)</td></tr>
+<tr class="separator:a0b55e509dd7e3bfea233a389a18c21e6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a216969fbba54df95de3e68435b8074d7"><td class="memTemplParams" colspan="2">template&lt;typename ... Params&gt; </td></tr>
+<tr class="memitem:a216969fbba54df95de3e68435b8074d7"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a216969fbba54df95de3e68435b8074d7">FalseInputFuncF16</a> (<a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; std::string &amp;&gt; reasonIfUnsupported, Params &amp;&amp;... params)</td></tr>
+<tr class="separator:a216969fbba54df95de3e68435b8074d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad3d0087e2533d808debd5c959fb3901f"><td class="memTemplParams" colspan="2">template&lt;typename ... Params&gt; </td></tr>
+<tr class="memitem:ad3d0087e2533d808debd5c959fb3901f"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ad3d0087e2533d808debd5c959fb3901f">FalseOutputFuncF32</a> (<a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; std::string &amp;&gt; reasonIfUnsupported, Params &amp;&amp;... params)</td></tr>
+<tr class="separator:ad3d0087e2533d808debd5c959fb3901f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2febf8d85a92b69e4a677a7c632418ee"><td class="memTemplParams" colspan="2">template&lt;typename ... Params&gt; </td></tr>
+<tr class="memitem:a2febf8d85a92b69e4a677a7c632418ee"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a2febf8d85a92b69e4a677a7c632418ee">FalseOutputFuncF16</a> (<a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; std::string &amp;&gt; reasonIfUnsupported, Params &amp;&amp;... params)</td></tr>
+<tr class="separator:a2febf8d85a92b69e4a677a7c632418ee"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5acae80f1d8fd03cdb3878bd356683d7"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a5acae80f1d8fd03cdb3878bd356683d7">CopyToOutputTensor</a> (const <a class="el" href="classarmnn_1_1_tensor.xhtml">Tensor</a> &amp;outputTensor, <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> *outputTensorHandle)</td></tr>
+<tr class="separator:a5acae80f1d8fd03cdb3878bd356683d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9ef4b4b6c421b5fd4b62274e63d08f11"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classarmnn_1_1_const_tensor.xhtml">armnn::ConstTensor</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a9ef4b4b6c421b5fd4b62274e63d08f11">GetInputTensor</a> (const <a class="el" href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">LayerBindingId</a> layerId, const <a class="el" href="namespacearmnn.xhtml#aa01bce88f89975a5a031db4cc8861527">InputTensors</a> &amp;inputTensors)</td></tr>
+<tr class="separator:a9ef4b4b6c421b5fd4b62274e63d08f11"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac624e40d8096e61c73b246934f18afd0"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classarmnn_1_1_tensor.xhtml">armnn::Tensor</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ac624e40d8096e61c73b246934f18afd0">GetOutputTensor</a> (const <a class="el" href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">LayerBindingId</a> layerId, const <a class="el" href="namespacearmnn.xhtml#a8f091a512915d1cb29a4ebf13dfc53ea">OutputTensors</a> &amp;outputTensors)</td></tr>
+<tr class="separator:ac624e40d8096e61c73b246934f18afd0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5f523aee1752323aeaf899085649320b"><td class="memTemplParams" colspan="2">template&lt;LogSeverity Level&gt; </td></tr>
+<tr class="memitem:a5f523aee1752323aeaf899085649320b"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a5f523aee1752323aeaf899085649320b">SetLoggingSinks</a> (bool standardOut, bool debugOut, bool coloured)</td></tr>
+<tr class="separator:a5f523aee1752323aeaf899085649320b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7658f93d899c8646515a29370e6aa994"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a7658f93d899c8646515a29370e6aa994">ReportError</a> (const std::string &amp;errorMessage, <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; std::vector&lt; std::string &gt; &amp;&gt; errorMessages)</td></tr>
+<tr class="separator:a7658f93d899c8646515a29370e6aa994"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a38e626422579decc13e3ee37da1a84c9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a38e626422579decc13e3ee37da1a84c9">ReportWarning</a> (const std::string &amp;warningMessage, <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; std::vector&lt; std::string &gt; &amp;&gt; warningMessages)</td></tr>
+<tr class="separator:a38e626422579decc13e3ee37da1a84c9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae50fff9aa2a1ce46392d8641c10aa3bc"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structarmnn_1_1_optimization_result.xhtml">OptimizationResult</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ae50fff9aa2a1ce46392d8641c10aa3bc">ReturnWithError</a> (<a class="el" href="structarmnn_1_1_optimization_result.xhtml">OptimizationResult</a> res, const <a class="el" href="classarmnn_1_1_layer.xhtml">Layer</a> *layer, const <a class="el" href="structarmnn_1_1_backend_settings.xhtml">BackendSettings</a> &amp;backendSettings, <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; std::vector&lt; std::string &gt; &amp;&gt; errMessages)</td></tr>
+<tr class="separator:ae50fff9aa2a1ce46392d8641c10aa3bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af002111f64aee648e3258247075cae36"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#af002111f64aee648e3258247075cae36">CheckScaleSetOnQuantizedType</a> (<a class="el" href="classarmnn_1_1_layer.xhtml">Layer</a> *layer, <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; std::vector&lt; std::string &gt; &amp;&gt; errMessages)</td></tr>
+<tr class="separator:af002111f64aee648e3258247075cae36"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a33d586a0d9bbb1f12ac7a3ba8d03e21e"><td class="memTemplParams" colspan="2">template&lt;typename LayerT &gt; </td></tr>
+<tr class="memitem:a33d586a0d9bbb1f12ac7a3ba8d03e21e"><td class="memTemplItemLeft" align="right" valign="top">LayerT *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a33d586a0d9bbb1f12ac7a3ba8d03e21e">ConvertBf16ToFp32Weight</a> (<a class="el" href="classarmnn_1_1_layer.xhtml">Layer</a> *l)</td></tr>
+<tr class="separator:a33d586a0d9bbb1f12ac7a3ba8d03e21e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a56f168327453ea4461cbc1c0ac7f15b6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structarmnn_1_1_optimization_result.xhtml">OptimizationResult</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a56f168327453ea4461cbc1c0ac7f15b6">AttemptBackendAssignment</a> (<a class="el" href="structarmnn_1_1_backend_settings.xhtml">BackendSettings</a> &amp;backendSettings, <a class="el" href="classarmnn_1_1_graph.xhtml">Graph</a> &amp;graph, <a class="el" href="classarmnn_1_1_layer.xhtml">Layer</a> *layer, <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> backend, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> dataTypeIn, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> dataTypeOut, const std::vector&lt; <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &gt; &amp;availablePreferredBackends, std::string &amp;reasonIfUnsupported, <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; std::vector&lt; std::string &gt; &amp;&gt; errMessages)</td></tr>
+<tr class="separator:a56f168327453ea4461cbc1c0ac7f15b6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3a26a0174216ded9353ca943a66709dc"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a3a26a0174216ded9353ca943a66709dc">AssignBackendsIConnectable</a> (<a class="el" href="classarmnn_1_1_optimized_network_impl.xhtml">OptimizedNetworkImpl</a> *optNetObjPtr, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a> *it, <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; std::vector&lt; std::string &gt; &amp;&gt; errMessages, <a class="el" href="structarmnn_1_1_optimization_result.xhtml">OptimizationResult</a> &amp;result, <a class="el" href="structarmnn_1_1_backend_settings.xhtml">BackendSettings</a> &amp;backendSettings, std::vector&lt; <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &gt; &amp;availablePreferredBackends)</td></tr>
+<tr class="separator:a3a26a0174216ded9353ca943a66709dc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a224df72b3d7a3bba8609bc167286e3f7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structarmnn_1_1_optimization_result.xhtml">OptimizationResult</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a224df72b3d7a3bba8609bc167286e3f7">AssignBackends</a> (<a class="el" href="classarmnn_1_1_optimized_network_impl.xhtml">OptimizedNetworkImpl</a> *optNetObjPtr, <a class="el" href="structarmnn_1_1_backend_settings.xhtml">BackendSettings</a> &amp;backendSettings, <a class="el" href="classarmnn_1_1_graph.xhtml#acc25db0641c1c22faf95af3bb49080c9">Graph::Iterator</a> &amp;firstLayer, <a class="el" href="classarmnn_1_1_graph.xhtml#acc25db0641c1c22faf95af3bb49080c9">Graph::Iterator</a> &amp;lastLayer, <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; std::vector&lt; std::string &gt; &amp;&gt; errMessages)</td></tr>
+<tr class="separator:a224df72b3d7a3bba8609bc167286e3f7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a42b993acd5865dfb937686b9760801e1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structarmnn_1_1_optimization_result.xhtml">OptimizationResult</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a42b993acd5865dfb937686b9760801e1">AssignBackends</a> (<a class="el" href="classarmnn_1_1_optimized_network_impl.xhtml">OptimizedNetworkImpl</a> *optNetObjPtr, <a class="el" href="structarmnn_1_1_backend_settings.xhtml">BackendSettings</a> &amp;backendSettings, <a class="el" href="classarmnn_1_1_subgraph_view.xhtml#a308b86dbdd0a745cef76904674c9850f">SubgraphView::IConnectableLayerIterator</a> &amp;firstLayer, <a class="el" href="classarmnn_1_1_subgraph_view.xhtml#a308b86dbdd0a745cef76904674c9850f">SubgraphView::IConnectableLayerIterator</a> &amp;lastLayer, <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; std::vector&lt; std::string &gt; &amp;&gt; errMessages)</td></tr>
+<tr class="separator:a42b993acd5865dfb937686b9760801e1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a48e4d70ae8893f6f1a8ebfced5b03a07"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structarmnn_1_1_optimization_result.xhtml">OptimizationResult</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a48e4d70ae8893f6f1a8ebfced5b03a07">AssignBackends</a> (<a class="el" href="classarmnn_1_1_optimized_network_impl.xhtml">OptimizedNetworkImpl</a> *optNetObjPtr, <a class="el" href="structarmnn_1_1_backend_settings.xhtml">BackendSettings</a> &amp;backendSettings, <a class="el" href="classarmnn_1_1_subgraph_view.xhtml">SubgraphView</a> &amp;subgraph, <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; std::vector&lt; std::string &gt; &amp;&gt; errMessages)</td></tr>
+<tr class="separator:a48e4d70ae8893f6f1a8ebfced5b03a07"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1ec6b4c20ed294a96cf94c33c24caaf5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.xhtml#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a1ec6b4c20ed294a96cf94c33c24caaf5">CreateSupportedBackends</a> (<a class="el" href="classarmnn_1_1_tensor_handle_factory_registry.xhtml">TensorHandleFactoryRegistry</a> &amp;handleFactoryRegistry, <a class="el" href="structarmnn_1_1_backend_settings.xhtml">BackendSettings</a> &amp;backendSettings)</td></tr>
+<tr class="separator:a1ec6b4c20ed294a96cf94c33c24caaf5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9f31d956861d8277fa5f8fb877dbbb6c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structarmnn_1_1_optimization_result.xhtml">OptimizationResult</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a9f31d956861d8277fa5f8fb877dbbb6c">ApplyBackendOptimizations</a> (<a class="el" href="classarmnn_1_1_optimized_network_impl.xhtml">OptimizedNetworkImpl</a> *optNetObjPtr, <a class="el" href="structarmnn_1_1_backend_settings.xhtml">BackendSettings</a> &amp;backendSettings, <a class="el" href="namespacearmnn.xhtml#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a> &amp;backends, const <a class="el" href="namespacearmnn.xhtml#a5b6893cda5b69359a4244c06054da18f">ModelOptions</a> &amp;modelOptions, <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; std::vector&lt; std::string &gt; &amp;&gt; errMessages)</td></tr>
+<tr class="separator:a9f31d956861d8277fa5f8fb877dbbb6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5ee4a1cca55f69b31e625c786655ed1a"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a5ee4a1cca55f69b31e625c786655ed1a">RequiresCopy</a> (<a class="el" href="classarmnn_1_1_i_tensor_handle_factory.xhtml#a32f4aa6a7089d877af08928139c2c277">ITensorHandleFactory::FactoryId</a> src, <a class="el" href="classarmnn_1_1_i_tensor_handle_factory.xhtml#a32f4aa6a7089d877af08928139c2c277">ITensorHandleFactory::FactoryId</a> dst, <a class="el" href="classarmnn_1_1_tensor_handle_factory_registry.xhtml">TensorHandleFactoryRegistry</a> &amp;registry)</td></tr>
+<tr class="separator:a5ee4a1cca55f69b31e625c786655ed1a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5f34318a121e010053655204df94720c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_i_tensor_handle_factory.xhtml#a32f4aa6a7089d877af08928139c2c277">ITensorHandleFactory::FactoryId</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a5f34318a121e010053655204df94720c">CalculateSlotOptionForInput</a> (<a class="el" href="namespacearmnn.xhtml#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a> &amp;backends, <a class="el" href="classarmnn_1_1_output_slot.xhtml">OutputSlot</a> &amp;slot, <a class="el" href="classarmnn_1_1_tensor_handle_factory_registry.xhtml">TensorHandleFactoryRegistry</a> &amp;registry, bool importEnabled)</td></tr>
+<tr class="separator:a5f34318a121e010053655204df94720c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab46c7f5f4736d550ab0e5e05a0fff4a9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_i_tensor_handle_factory.xhtml#a32f4aa6a7089d877af08928139c2c277">ITensorHandleFactory::FactoryId</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ab46c7f5f4736d550ab0e5e05a0fff4a9">CalculateSlotOptionForOutput</a> (<a class="el" href="namespacearmnn.xhtml#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a> &amp;backends, <a class="el" href="classarmnn_1_1_output_slot.xhtml">OutputSlot</a> &amp;slot, <a class="el" href="classarmnn_1_1_tensor_handle_factory_registry.xhtml">TensorHandleFactoryRegistry</a> &amp;registry)</td></tr>
+<tr class="separator:ab46c7f5f4736d550ab0e5e05a0fff4a9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9cffc3a390a70c97ba1463da69077c23"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_i_tensor_handle_factory.xhtml#a32f4aa6a7089d877af08928139c2c277">ITensorHandleFactory::FactoryId</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a9cffc3a390a70c97ba1463da69077c23">CalculateSlotOption</a> (<a class="el" href="namespacearmnn.xhtml#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a> &amp;backends, <a class="el" href="classarmnn_1_1_output_slot.xhtml">OutputSlot</a> &amp;outputSlot, <a class="el" href="classarmnn_1_1_tensor_handle_factory_registry.xhtml">TensorHandleFactoryRegistry</a> &amp;registry, bool importEnabled)</td></tr>
+<tr class="separator:a9cffc3a390a70c97ba1463da69077c23"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a738d3243c1dc564304d78908c6112e4f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.xhtml#aff209afc1dc598da399e3e78617ce016">EdgeStrategy</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a738d3243c1dc564304d78908c6112e4f">CalculateEdgeStrategy</a> (<a class="el" href="namespacearmnn.xhtml#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a> &amp;backends, <a class="el" href="classarmnn_1_1_i_tensor_handle_factory.xhtml#a32f4aa6a7089d877af08928139c2c277">ITensorHandleFactory::FactoryId</a> srcFactoryId, const <a class="el" href="classarmnn_1_1_layer.xhtml">Layer</a> &amp;layer, const <a class="el" href="classarmnn_1_1_layer.xhtml">Layer</a> &amp;connectedLayer, <a class="el" href="classarmnn_1_1_tensor_handle_factory_registry.xhtml">TensorHandleFactoryRegistry</a> &amp;registry, bool importEnabled)</td></tr>
+<tr class="separator:a738d3243c1dc564304d78908c6112e4f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a86541d11fcad5246a78cbc21d637a504"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structarmnn_1_1_optimization_result.xhtml">OptimizationResult</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a86541d11fcad5246a78cbc21d637a504">SelectTensorHandleStrategy</a> (<a class="el" href="classarmnn_1_1_graph.xhtml">Graph</a> &amp;optGraph, <a class="el" href="namespacearmnn.xhtml#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a> &amp;backends, <a class="el" href="classarmnn_1_1_tensor_handle_factory_registry.xhtml">TensorHandleFactoryRegistry</a> &amp;registry, bool importEnabled, <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; std::vector&lt; std::string &gt; &amp;&gt; errMessages)</td></tr>
+<tr class="separator:a86541d11fcad5246a78cbc21d637a504"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adf69fa0e439ddb632462b42253d67b6a"><td class="memItemLeft" align="right" valign="top">std::vector&lt; <a class="el" href="classarmnn_1_1_convert_bf16_to_fp32_layer.xhtml">ConvertBf16ToFp32Layer</a> * &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#adf69fa0e439ddb632462b42253d67b6a">InsertConvertBf16ToFp32LayersBefore</a> (<a class="el" href="classarmnn_1_1_graph.xhtml">Graph</a> &amp;graph, <a class="el" href="classarmnn_1_1_layer.xhtml">Layer</a> &amp;layer, bool expectCorrectInputType)</td></tr>
+<tr class="separator:adf69fa0e439ddb632462b42253d67b6a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a42f2d4a50337823a486cd89dc2ad057f"><td class="memItemLeft" align="right" valign="top">std::vector&lt; <a class="el" href="classarmnn_1_1_convert_fp32_to_bf16_layer.xhtml">ConvertFp32ToBf16Layer</a> * &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a42f2d4a50337823a486cd89dc2ad057f">InsertConvertFp32ToBf16LayersBefore</a> (<a class="el" href="classarmnn_1_1_graph.xhtml">Graph</a> &amp;graph, <a class="el" href="classarmnn_1_1_layer.xhtml">Layer</a> &amp;layer, bool expectCorrectInputType)</td></tr>
+<tr class="separator:a42f2d4a50337823a486cd89dc2ad057f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad31c56533e4f9f9f51719599fbfcf7bb"><td class="memItemLeft" align="right" valign="top">std::vector&lt; <a class="el" href="classarmnn_1_1_convert_fp16_to_fp32_layer.xhtml">ConvertFp16ToFp32Layer</a> * &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ad31c56533e4f9f9f51719599fbfcf7bb">InsertConvertFp16ToFp32LayersBefore</a> (<a class="el" href="classarmnn_1_1_graph.xhtml">Graph</a> &amp;graph, <a class="el" href="classarmnn_1_1_layer.xhtml">Layer</a> &amp;layer, bool expectCorrectInputType)</td></tr>
+<tr class="separator:ad31c56533e4f9f9f51719599fbfcf7bb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8ae358a041b4adc33577e8b4c07b8d23"><td class="memItemLeft" align="right" valign="top">std::vector&lt; <a class="el" href="classarmnn_1_1_convert_fp32_to_bf16_layer.xhtml">ConvertFp32ToBf16Layer</a> * &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a8ae358a041b4adc33577e8b4c07b8d23">InsertConvertFp32ToBf16LayersAfter</a> (<a class="el" href="classarmnn_1_1_graph.xhtml">Graph</a> &amp;graph, <a class="el" href="classarmnn_1_1_layer.xhtml">Layer</a> &amp;layer)</td></tr>
+<tr class="separator:a8ae358a041b4adc33577e8b4c07b8d23"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abf625e50a5eaeafce5b39580dc95a9d3"><td class="memItemLeft" align="right" valign="top">std::vector&lt; <a class="el" href="classarmnn_1_1_convert_fp32_to_fp16_layer.xhtml">ConvertFp32ToFp16Layer</a> * &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#abf625e50a5eaeafce5b39580dc95a9d3">InsertConvertFp32ToFp16LayersAfter</a> (<a class="el" href="classarmnn_1_1_graph.xhtml">Graph</a> &amp;graph, <a class="el" href="classarmnn_1_1_layer.xhtml">Layer</a> &amp;layer)</td></tr>
+<tr class="separator:abf625e50a5eaeafce5b39580dc95a9d3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2616ffdae2db993af5c08019fb61860a"><td class="memItemLeft" align="right" valign="top">std::vector&lt; <a class="el" href="classarmnn_1_1_debug_layer.xhtml">DebugLayer</a> * &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a2616ffdae2db993af5c08019fb61860a">InsertDebugLayerAfter</a> (<a class="el" href="classarmnn_1_1_graph.xhtml">Graph</a> &amp;graph, <a class="el" href="classarmnn_1_1_layer.xhtml">Layer</a> &amp;layer)</td></tr>
+<tr class="separator:a2616ffdae2db993af5c08019fb61860a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4907f6b88c3e72be6b8ae876de355e0a"><td class="memTemplParams" colspan="2">template&lt;typename T &gt; </td></tr>
+<tr class="memitem:a4907f6b88c3e72be6b8ae876de355e0a"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a4907f6b88c3e72be6b8ae876de355e0a">Append</a> (<a class="el" href="classarmnn_1_1_optimizer.xhtml#ad1794808004025d6e06c176507197b24">Optimizer::Optimizations</a> &amp;optimizations, T &amp;&amp;optimization)</td></tr>
+<tr class="separator:a4907f6b88c3e72be6b8ae876de355e0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0c8a28b71e49c04596289ff281e58f1a"><td class="memTemplParams" colspan="2">template&lt;typename Front , typename... Others&gt; </td></tr>
+<tr class="memitem:a0c8a28b71e49c04596289ff281e58f1a"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a0c8a28b71e49c04596289ff281e58f1a">Append</a> (<a class="el" href="classarmnn_1_1_optimizer.xhtml#ad1794808004025d6e06c176507197b24">Optimizer::Optimizations</a> &amp;optimizations, Front &amp;&amp;front, Others &amp;&amp;... others)</td></tr>
+<tr class="separator:a0c8a28b71e49c04596289ff281e58f1a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa7427025a851113a492de0b68b23d22a"><td class="memTemplParams" colspan="2">template&lt;typename... Args&gt; </td></tr>
+<tr class="memitem:aa7427025a851113a492de0b68b23d22a"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_optimizer.xhtml#ad1794808004025d6e06c176507197b24">Optimizer::Optimizations</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aa7427025a851113a492de0b68b23d22a">MakeOptimizations</a> (Args &amp;&amp;... args)</td></tr>
+<tr class="separator:aa7427025a851113a492de0b68b23d22a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a12d3ffe11b54c0aaa59bdd8415701c36"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structarmnn_1_1_measurement.xhtml">Measurement</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a12d3ffe11b54c0aaa59bdd8415701c36">FindMeasurement</a> (const std::string &amp;name, const <a class="el" href="classarmnn_1_1_event.xhtml">Event</a> *event)</td></tr>
+<tr class="separator:a12d3ffe11b54c0aaa59bdd8415701c36"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1b90db39f6a9ebd11591e76fa364b06f"><td class="memItemLeft" align="right" valign="top">std::vector&lt; <a class="el" href="structarmnn_1_1_measurement.xhtml">Measurement</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a1b90db39f6a9ebd11591e76fa364b06f">FindKernelMeasurements</a> (const <a class="el" href="classarmnn_1_1_event.xhtml">Event</a> *event)</td></tr>
+<tr class="separator:a1b90db39f6a9ebd11591e76fa364b06f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab03dcfb3b4019d8f58a67c41681951ae"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classarmnn_1_1_event.xhtml">Event</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ab03dcfb3b4019d8f58a67c41681951ae">GetEventPtr</a> (const <a class="el" href="classarmnn_1_1_event.xhtml">Event</a> *ptr)</td></tr>
+<tr class="separator:ab03dcfb3b4019d8f58a67c41681951ae"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4b1e2158af2aedd3f00d2121c45b0f93"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classarmnn_1_1_event.xhtml">Event</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a4b1e2158af2aedd3f00d2121c45b0f93">GetEventPtr</a> (const std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_event.xhtml">Event</a> &gt; &amp;ptr)</td></tr>
+<tr class="separator:a4b1e2158af2aedd3f00d2121c45b0f93"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a20f74b679d59b52e9fae3bbef8f10ffb"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a20f74b679d59b52e9fae3bbef8f10ffb">CalcLevel</a> (const <a class="el" href="classarmnn_1_1_event.xhtml">Event</a> *eventPtr)</td></tr>
+<tr class="separator:a20f74b679d59b52e9fae3bbef8f10ffb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae9034dd6e9c5bed6badf4f7513339f74"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ae9034dd6e9c5bed6badf4f7513339f74">ConfigureDetailsObject</a> (<a class="el" href="structarmnn_1_1_json_child_object.xhtml">JsonChildObject</a> &amp;detailsObject, std::string layerDetailsStr)</td></tr>
+<tr class="separator:ae9034dd6e9c5bed6badf4f7513339f74"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a50805c29c35b9903c2dea301d8091711"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a50805c29c35b9903c2dea301d8091711">ExtractJsonObjects</a> (unsigned int inferenceIndex, const <a class="el" href="classarmnn_1_1_event.xhtml">Event</a> *parentEvent, <a class="el" href="structarmnn_1_1_json_child_object.xhtml">JsonChildObject</a> &amp;parentObject, std::map&lt; const <a class="el" href="classarmnn_1_1_event.xhtml">Event</a> *, std::vector&lt; const <a class="el" href="classarmnn_1_1_event.xhtml">Event</a> *&gt;&gt; descendantsMap)</td></tr>
+<tr class="separator:a50805c29c35b9903c2dea301d8091711"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0b4e1500f83d1edd4c744b4aa3b13347"><td class="memTemplParams" colspan="2">template&lt;typename DescriptorType &gt; </td></tr>
+<tr class="memitem:a0b4e1500f83d1edd4c744b4aa3b13347"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a0b4e1500f83d1edd4c744b4aa3b13347">ProfilingUpdateDescriptions</a> (const std::string &amp;name, const DescriptorType &amp;desc, const <a class="el" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a> &amp;infos, const profiling::ProfilingGuid guid)</td></tr>
+<tr class="separator:a0b4e1500f83d1edd4c744b4aa3b13347"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afce94270d9c4a51cd0c4ac6a58af4e26"><td class="memTemplParams" colspan="2">template&lt;typename Delegate &gt; </td></tr>
+<tr class="memitem:afce94270d9c4a51cd0c4ac6a58af4e26"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#afce94270d9c4a51cd0c4ac6a58af4e26">ForEachLayerInput</a> (LayerSelectionInfo::LayerInfoContainer &amp;layerInfos, LayerSelectionInfo &amp;layerInfo, Delegate function)</td></tr>
+<tr class="separator:afce94270d9c4a51cd0c4ac6a58af4e26"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a49538fa883b70c944e437d65d6628eec"><td class="memTemplParams" colspan="2">template&lt;typename Delegate &gt; </td></tr>
+<tr class="memitem:a49538fa883b70c944e437d65d6628eec"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a49538fa883b70c944e437d65d6628eec">ForEachLayerOutput</a> (LayerSelectionInfo::LayerInfoContainer &amp;layerInfos, LayerSelectionInfo &amp;layerInfo, Delegate function)</td></tr>
+<tr class="separator:a49538fa883b70c944e437d65d6628eec"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a09ff1f6670d27d3b41e5b5d35a6c9f37"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a09ff1f6670d27d3b41e5b5d35a6c9f37">AssignSplitId</a> (LayerSelectionInfo::LayerInfoContainer &amp;layerInfos, LayerSelectionInfo &amp;layerInfo)</td></tr>
+<tr class="separator:a09ff1f6670d27d3b41e5b5d35a6c9f37"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6b10dc0d12c7f4a52ad01b9975dbe908"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a6b10dc0d12c7f4a52ad01b9975dbe908">IsReadyForSplitAssignment</a> (LayerSelectionInfo::LayerInfoContainer &amp;layerInfos, LayerSelectionInfo &amp;layerInfo)</td></tr>
+<tr class="separator:a6b10dc0d12c7f4a52ad01b9975dbe908"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1621fb2f10314c394c9023d3e090d394"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a1621fb2f10314c394c9023d3e090d394">TEST_SUITE</a> (&quot;TestConstTensorLayerVisitor&quot;)</td></tr>
+<tr class="separator:a1621fb2f10314c394c9023d3e090d394"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a24283be4c70fe5e95e038bdc3bf39ff6"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a24283be4c70fe5e95e038bdc3bf39ff6">GetProfilerEventSequenceSize</a> (<a class="el" href="classarmnn_1_1_i_profiler.xhtml">armnn::IProfiler</a> *profiler)</td></tr>
+<tr class="separator:a24283be4c70fe5e95e038bdc3bf39ff6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a27e785ad7e11ffaa55b7679130085681"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a27e785ad7e11ffaa55b7679130085681">RuntimeLoadedNetworksReserve</a> (<a class="el" href="structarmnn_1_1_runtime_impl.xhtml">armnn::RuntimeImpl</a> *runtime)</td></tr>
+<tr class="separator:a27e785ad7e11ffaa55b7679130085681"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae53a21a04e8a81ae67e25aa9a4f8605d"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ae53a21a04e8a81ae67e25aa9a4f8605d">TEST_SUITE</a> (&quot;TestInputOutputLayerVisitor&quot;)</td></tr>
+<tr class="separator:ae53a21a04e8a81ae67e25aa9a4f8605d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5a38bd982292180692711b0ae296bb34"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a5a38bd982292180692711b0ae296bb34">CheckLayerBindingId</a> (<a class="el" href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">LayerBindingId</a> visitorId, <a class="el" href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">LayerBindingId</a> id)</td></tr>
+<tr class="separator:a5a38bd982292180692711b0ae296bb34"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a45b766383cdec8158468af9c226056b4"><td class="memItemLeft" align="right" valign="top">constexpr const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a45b766383cdec8158468af9c226056b4">MockBackendId</a> ()</td></tr>
+<tr class="separator:a45b766383cdec8158468af9c226056b4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7e3b0eb2d8e1d5849abfab90f2b49145"><td class="memItemLeft" align="right" valign="top">constexpr const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a7e3b0eb2d8e1d5849abfab90f2b49145">MockTensorHandleFactoryId</a> ()</td></tr>
+<tr class="separator:a7e3b0eb2d8e1d5849abfab90f2b49145"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6a2659750d6161b693d0e51616791959"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_graph.xhtml">Graph</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a6a2659750d6161b693d0e51616791959">GetGraphForTesting</a> (<a class="el" href="classarmnn_1_1_i_optimized_network.xhtml">IOptimizedNetwork</a> *optNet)</td></tr>
+<tr class="separator:a6a2659750d6161b693d0e51616791959"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac8c5f9574593b4623d4850f5fd26e3cc"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.xhtml#a5b6893cda5b69359a4244c06054da18f">ModelOptions</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ac8c5f9574593b4623d4850f5fd26e3cc">GetModelOptionsForTesting</a> (<a class="el" href="classarmnn_1_1_i_optimized_network.xhtml">IOptimizedNetwork</a> *optNet)</td></tr>
+<tr class="separator:ac8c5f9574593b4623d4850f5fd26e3cc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a22f1d90f329261a58e14827f99090e93"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml">profiling::ProfilingService</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a22f1d90f329261a58e14827f99090e93">GetProfilingService</a> (<a class="el" href="structarmnn_1_1_runtime_impl.xhtml">armnn::RuntimeImpl</a> *runtime)</td></tr>
+<tr class="separator:a22f1d90f329261a58e14827f99090e93"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa1166f0056ce60553e825ae3cee4d5f7"><td class="memItemLeft" align="right" valign="top">std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aa1166f0056ce60553e825ae3cee4d5f7">operator&lt;&lt;</a> (std::ostream &amp;os, const <a class="el" href="classarmnn_1_1_b_float16.xhtml">BFloat16</a> &amp;b)</td></tr>
+<tr class="separator:aa1166f0056ce60553e825ae3cee4d5f7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa1002c35597679b4f6624827524af04e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aa1002c35597679b4f6624827524af04e">ReportUntouchedLayers</a> (<a class="el" href="classarmnn_1_1_optimization_views.xhtml">OptimizationViews</a> &amp;optimizationViews, std::map&lt; <a class="el" href="namespacearmnn.xhtml#afad4088a9a058114ee5f87246f87bf49">LayerGuid</a>, <a class="el" href="classarmnn_1_1_layer.xhtml">Layer</a> *&gt; untouched)</td></tr>
+<tr class="separator:aa1002c35597679b4f6624827524af04e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7e4811ef91f499424bca36e98a2fbd96"><td class="memTemplParams" colspan="2">template&lt;typename LayerType &gt; </td></tr>
+<tr class="memitem:a7e4811ef91f499424bca36e98a2fbd96"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a7e4811ef91f499424bca36e98a2fbd96">FuseLayer</a> (<a class="el" href="classarmnn_1_1_optimization_views.xhtml">OptimizationViews</a> &amp;optimizationViews, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *baseLayer, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *replacementLayer, <a class="el" href="classarmnn_1_1_activation_layer.xhtml">ActivationLayer</a> *activationLayer, <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> &amp;activationDesc)</td></tr>
+<tr class="separator:a7e4811ef91f499424bca36e98a2fbd96"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a13f537c12c25c936c152ccca78d902dd"><td class="memTemplParams" colspan="2">template&lt;typename LayerType &gt; </td></tr>
+<tr class="memitem:a13f537c12c25c936c152ccca78d902dd"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a13f537c12c25c936c152ccca78d902dd">FuseAdditionLayer</a> (<a class="el" href="classarmnn_1_1_optimization_views.xhtml">OptimizationViews</a> &amp;optimizationViews, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *baseLayer, <a class="el" href="classarmnn_1_1_activation_layer.xhtml">ActivationLayer</a> *activationLayer, <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> &amp;activationDesc, std::string name)</td></tr>
+<tr class="separator:a13f537c12c25c936c152ccca78d902dd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aeda4132cdab76b98c860690c80fdb7bd"><td class="memTemplParams" colspan="2">template&lt;typename LayerType &gt; </td></tr>
+<tr class="memitem:aeda4132cdab76b98c860690c80fdb7bd"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aeda4132cdab76b98c860690c80fdb7bd">FuseSubtractionLayer</a> (<a class="el" href="classarmnn_1_1_optimization_views.xhtml">OptimizationViews</a> &amp;optimizationViews, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *baseLayer, <a class="el" href="classarmnn_1_1_activation_layer.xhtml">ActivationLayer</a> *activationLayer, <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> &amp;activationDesc, std::string name)</td></tr>
+<tr class="separator:aeda4132cdab76b98c860690c80fdb7bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a90f36a629081255b526ac433fcedf8ba"><td class="memTemplParams" colspan="2">template&lt;typename LayerType &gt; </td></tr>
+<tr class="memitem:a90f36a629081255b526ac433fcedf8ba"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a90f36a629081255b526ac433fcedf8ba">FuseDivisionLayer</a> (<a class="el" href="classarmnn_1_1_optimization_views.xhtml">OptimizationViews</a> &amp;optimizationViews, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *baseLayer, <a class="el" href="classarmnn_1_1_activation_layer.xhtml">ActivationLayer</a> *activationLayer, <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> &amp;activationDesc, std::string name)</td></tr>
+<tr class="separator:a90f36a629081255b526ac433fcedf8ba"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af06b26928a460f9fcdef0327f448a34c"><td class="memTemplParams" colspan="2">template&lt;typename LayerType &gt; </td></tr>
+<tr class="memitem:af06b26928a460f9fcdef0327f448a34c"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#af06b26928a460f9fcdef0327f448a34c">FuseMultiplicationLayer</a> (<a class="el" href="classarmnn_1_1_optimization_views.xhtml">OptimizationViews</a> &amp;optimizationViews, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *baseLayer, <a class="el" href="classarmnn_1_1_activation_layer.xhtml">ActivationLayer</a> *activationLayer, <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> &amp;activationDesc, std::string name)</td></tr>
+<tr class="separator:af06b26928a460f9fcdef0327f448a34c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa4a4b141867313cddb82c96800db343e"><td class="memTemplParams" colspan="2">template&lt;typename LayerType &gt; </td></tr>
+<tr class="memitem:aa4a4b141867313cddb82c96800db343e"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aa4a4b141867313cddb82c96800db343e">FuseBatchNormalizationLayer</a> (<a class="el" href="classarmnn_1_1_optimization_views.xhtml">OptimizationViews</a> &amp;optimizationViews, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *baseLayer, <a class="el" href="classarmnn_1_1_activation_layer.xhtml">ActivationLayer</a> *activationLayer, <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> &amp;activationDesc, std::string name)</td></tr>
+<tr class="separator:aa4a4b141867313cddb82c96800db343e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afdb0a1b1703203354451e78e2fc43f3f"><td class="memTemplParams" colspan="2">template&lt;typename LayerType &gt; </td></tr>
+<tr class="memitem:afdb0a1b1703203354451e78e2fc43f3f"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#afdb0a1b1703203354451e78e2fc43f3f">FuseConvolution2dLayer</a> (<a class="el" href="classarmnn_1_1_optimization_views.xhtml">OptimizationViews</a> &amp;optimizationViews, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *baseLayer, <a class="el" href="classarmnn_1_1_activation_layer.xhtml">ActivationLayer</a> *activationLayer, <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> &amp;activationDesc, std::string name)</td></tr>
+<tr class="separator:afdb0a1b1703203354451e78e2fc43f3f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae795a54643adfeb37ac95dee68807856"><td class="memTemplParams" colspan="2">template&lt;typename LayerType &gt; </td></tr>
+<tr class="memitem:ae795a54643adfeb37ac95dee68807856"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ae795a54643adfeb37ac95dee68807856">FuseDepthwiseConvolution2dLayer</a> (<a class="el" href="classarmnn_1_1_optimization_views.xhtml">OptimizationViews</a> &amp;optimizationViews, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *baseLayer, <a class="el" href="classarmnn_1_1_activation_layer.xhtml">ActivationLayer</a> *activationLayer, <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> &amp;activationDesc, std::string name)</td></tr>
+<tr class="separator:ae795a54643adfeb37ac95dee68807856"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad2021f80998e436e27de7b7eeec67d54"><td class="memTemplParams" colspan="2">template&lt;typename LayerType &gt; </td></tr>
+<tr class="memitem:ad2021f80998e436e27de7b7eeec67d54"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ad2021f80998e436e27de7b7eeec67d54">FuseFullyConnectedLayer</a> (<a class="el" href="classarmnn_1_1_optimization_views.xhtml">OptimizationViews</a> &amp;optimizationViews, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *baseLayer, <a class="el" href="classarmnn_1_1_activation_layer.xhtml">ActivationLayer</a> *activationLayer, <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> &amp;activationDesc, std::string name)</td></tr>
+<tr class="separator:ad2021f80998e436e27de7b7eeec67d54"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a189b5dedbf7a3cbcbe7760ac72c7b07d"><td class="memTemplParams" colspan="2">template&lt;typename LayerType &gt; </td></tr>
+<tr class="memitem:a189b5dedbf7a3cbcbe7760ac72c7b07d"><td class="memTemplItemLeft" align="right" valign="top">std::vector&lt; <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a> * &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a189b5dedbf7a3cbcbe7760ac72c7b07d">ChainReduceLayers</a> (<a class="el" href="classarmnn_1_1_optimization_views.xhtml">OptimizationViews</a> &amp;optimizationViews, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *baseLayer, <a class="el" href="structarmnn_1_1_reduce_descriptor.xhtml">ReduceDescriptor</a> &amp;desc)</td></tr>
+<tr class="separator:a189b5dedbf7a3cbcbe7760ac72c7b07d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8134b220b50f01163c5fcd8d2d4524a2"><td class="memTemplParams" colspan="2">template&lt;typename LayerType &gt; </td></tr>
+<tr class="memitem:a8134b220b50f01163c5fcd8d2d4524a2"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a8134b220b50f01163c5fcd8d2d4524a2">ReplaceLayers</a> (<a class="el" href="classarmnn_1_1_optimization_views.xhtml">OptimizationViews</a> &amp;optimizationViews, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *baseLayer, std::vector&lt; <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a> *&gt; &amp;layers)</td></tr>
+<tr class="separator:a8134b220b50f01163c5fcd8d2d4524a2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5e783a951642781b9e7b55db06a514b7"><td class="memItemLeft" align="right" valign="top">arm_compute::NormalizationLayerInfo&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a5e783a951642781b9e7b55db06a514b7">CreateAclNormalizationLayerInfoForL2Normalization</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> &amp;tensorInfo, <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> dataLayout)</td></tr>
+<tr class="separator:a5e783a951642781b9e7b55db06a514b7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afdba36f125621d775d471f0daf613df2"><td class="memItemLeft" align="right" valign="top">arm_compute::ActivationLayerInfo::ActivationFunction&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#afdba36f125621d775d471f0daf613df2">ConvertActivationFunctionToAclActivationFunction</a> (<a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9ea">ActivationFunction</a> armnnFunction)</td></tr>
+<tr class="separator:afdba36f125621d775d471f0daf613df2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad701d0d29baa4266ab4d33b090aa661c"><td class="memItemLeft" align="right" valign="top">arm_compute::ActivationLayerInfo&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a> (const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> &amp;actDesc)</td></tr>
+<tr class="separator:ad701d0d29baa4266ab4d33b090aa661c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af6d517245110f6b1ca702da0cbbf4518"><td class="memItemLeft" align="right" valign="top">arm_compute::ActivationLayerInfo&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#af6d517245110f6b1ca702da0cbbf4518">ConvertActivationDescriptorToAclActivationLayerInfo</a> (const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> *activationDescPtr)</td></tr>
+<tr class="separator:af6d517245110f6b1ca702da0cbbf4518"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abfb0841058a8190d30851f07eca3991f"><td class="memItemLeft" align="right" valign="top">arm_compute::ActivationLayerInfo&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#abfb0841058a8190d30851f07eca3991f">ConvertAdditionalInfoToAclActivationLayerInfo</a> (const <a class="el" href="structarmnn_1_1_queue_descriptor.xhtml">QueueDescriptor</a> &amp;queueDescriptor)</td></tr>
+<tr class="separator:abfb0841058a8190d30851f07eca3991f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac1438a97bbc2aee5cd8470d9d2a3aebc"><td class="memItemLeft" align="right" valign="top">arm_compute::ComparisonOperation&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ac1438a97bbc2aee5cd8470d9d2a3aebc">ConvertComparisonOperationToAcl</a> (const <a class="el" href="structarmnn_1_1_comparison_descriptor.xhtml">ComparisonDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:ac1438a97bbc2aee5cd8470d9d2a3aebc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad256fcf8c7f4d5a240fa47f0b56d50af"><td class="memItemLeft" align="right" valign="top">arm_compute::PoolingType&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ad256fcf8c7f4d5a240fa47f0b56d50af">ConvertPoolingAlgorithmToAclPoolingType</a> (<a class="el" href="namespacearmnn.xhtml#a961bbfe1db71a848eff5a1f0ab775718">PoolingAlgorithm</a> poolingAlgorithm)</td></tr>
+<tr class="separator:ad256fcf8c7f4d5a240fa47f0b56d50af"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8f3bfacadfd6d2146d6ccd299dabc7aa"><td class="memItemLeft" align="right" valign="top">arm_compute::DimensionRoundingType&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a8f3bfacadfd6d2146d6ccd299dabc7aa">ConvertOutputShapeRoundingToAclDimensionRoundingType</a> (<a class="el" href="namespacearmnn.xhtml#adf2e5515c4c36a3e7e46bb8b83c6754e">OutputShapeRounding</a> rounding)</td></tr>
+<tr class="separator:a8f3bfacadfd6d2146d6ccd299dabc7aa"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa5baabb8e3a4aa6cbdcab419d743e747"><td class="memItemLeft" align="right" valign="top">arm_compute::NormType&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aa5baabb8e3a4aa6cbdcab419d743e747">ConvertNormalizationAlgorithmChannelToAclNormType</a> (<a class="el" href="namespacearmnn.xhtml#abe18a5033f2ab9c0de82c676b48f5437">NormalizationAlgorithmChannel</a> channelType)</td></tr>
+<tr class="separator:aa5baabb8e3a4aa6cbdcab419d743e747"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae2e0c1d8160fadce44d479379790718e"><td class="memItemLeft" align="right" valign="top">arm_compute::FullyConnectedLayerInfo&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ae2e0c1d8160fadce44d479379790718e">ConvertFullyConnectedDescriptorToAclFullyConnectedLayerInfo</a> (const <a class="el" href="structarmnn_1_1_fully_connected_descriptor.xhtml">FullyConnectedDescriptor</a> &amp;fullyConnectedDesc, const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> *activationDesc)</td></tr>
+<tr class="separator:ae2e0c1d8160fadce44d479379790718e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2f12c1f572fb15978e51cf646d42d4dc"><td class="memItemLeft" align="right" valign="top">arm_compute::FullyConnectedLayerInfo&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a2f12c1f572fb15978e51cf646d42d4dc">ConvertFullyConnectedDescriptorToAclFullyConnectedLayerInfo</a> (const <a class="el" href="structarmnn_1_1_fully_connected_descriptor.xhtml">FullyConnectedDescriptor</a> &amp;fullyConnectedDesc, arm_compute::ActivationLayerInfo activationLayerInfo)</td></tr>
+<tr class="separator:a2f12c1f572fb15978e51cf646d42d4dc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae9bdcb8ac91731109dc423d6ed476204"><td class="memItemLeft" align="right" valign="top">arm_compute::InterpolationPolicy&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ae9bdcb8ac91731109dc423d6ed476204">ConvertResizeMethodToAclInterpolationPolicy</a> (<a class="el" href="namespacearmnn.xhtml#a9a2af2f8c4af4f9efa8e79417d505ac4">ResizeMethod</a> resizeMethod)</td></tr>
+<tr class="separator:ae9bdcb8ac91731109dc423d6ed476204"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae33fcc729c3eeda77a443a11f13da7ba"><td class="memTemplParams" colspan="2">template&lt;typename T &gt; </td></tr>
+<tr class="memitem:ae33fcc729c3eeda77a443a11f13da7ba"><td class="memTemplItemLeft" align="right" valign="top">T&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ae33fcc729c3eeda77a443a11f13da7ba">ComputeSoftmaxAclAxis</a> (const <a class="el" href="structarmnn_1_1_softmax_descriptor.xhtml">SoftmaxDescriptor</a> &amp;softmaxDesc, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> &amp;tensor)</td></tr>
+<tr class="separator:ae33fcc729c3eeda77a443a11f13da7ba"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8cbabc875597b3bed0ccdc0adb289fde"><td class="memItemLeft" align="right" valign="top">std::set&lt; unsigned int &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a8cbabc875597b3bed0ccdc0adb289fde">ComputeSplitAxis</a> (const <a class="el" href="namespacearmnn.xhtml#a60291543fe872b795e71e05bcd835fd1">armnn::SplitterDescriptor</a> &amp;desc, const <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> &amp;input)</td></tr>
+<tr class="separator:a8cbabc875597b3bed0ccdc0adb289fde"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a44a3b98b37a25c995aa9e4dae7d7b456"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a44a3b98b37a25c995aa9e4dae7d7b456">ComputeAclAxis</a> (const int &amp;armnnAxis, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> &amp;tensor)</td></tr>
+<tr class="memdesc:a44a3b98b37a25c995aa9e4dae7d7b456"><td class="mdescLeft">&#160;</td><td class="mdescRight">Function to convert ArmNN axis (left to right) to ACL axis (right to left) ranging from [-rank, rank) <a href="#a44a3b98b37a25c995aa9e4dae7d7b456">More...</a><br /></td></tr>
+<tr class="separator:a44a3b98b37a25c995aa9e4dae7d7b456"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa1e65a4dea8c65b76423e121b880d059"><td class="memItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aa1e65a4dea8c65b76423e121b880d059">ComputePositiveAxis</a> (const int &amp;axis, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> &amp;tensor)</td></tr>
+<tr class="memdesc:aa1e65a4dea8c65b76423e121b880d059"><td class="mdescLeft">&#160;</td><td class="mdescRight">Function to convert axis to its positive equivalent value. <a href="#aa1e65a4dea8c65b76423e121b880d059">More...</a><br /></td></tr>
+<tr class="separator:aa1e65a4dea8c65b76423e121b880d059"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a855760e957668804d33c0691a802496e"><td class="memItemLeft" align="right" valign="top">arm_compute::Conv3dInfo&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a855760e957668804d33c0691a802496e">ComputeConv3DInfo</a> (const <a class="el" href="structarmnn_1_1_convolution3d_descriptor.xhtml">armnn::Convolution3dDescriptor</a> descriptor, bool isFastMathEnabled, const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> *activationDescriptor)</td></tr>
+<tr class="memdesc:a855760e957668804d33c0691a802496e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Utility function used to setup an arm_compute::Conv3dInfo object from convolution3d descriptor. <a href="#a855760e957668804d33c0691a802496e">More...</a><br /></td></tr>
+<tr class="separator:a855760e957668804d33c0691a802496e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3f2c9ea2505a2cac1d05e17e989aff2b"><td class="memItemLeft" align="right" valign="top">arm_compute::Conv3dInfo&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a3f2c9ea2505a2cac1d05e17e989aff2b">ComputeConv3DInfo</a> (const <a class="el" href="structarmnn_1_1_convolution3d_queue_descriptor.xhtml">armnn::Convolution3dQueueDescriptor</a> queueDescriptor, bool isFastMathEnabled)</td></tr>
+<tr class="separator:a3f2c9ea2505a2cac1d05e17e989aff2b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adf5a024ace0dbe2af2d5b1a1b9623771"><td class="memItemLeft" align="right" valign="top">arm_compute::PaddingMode&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#adf5a024ace0dbe2af2d5b1a1b9623771">ConvertPaddingModeToAcl</a> (const <a class="el" href="namespacearmnn.xhtml#a14d24d90ab4ba2956e92e27890ba4c91">PaddingMode</a> &amp;paddingMode)</td></tr>
+<tr class="separator:adf5a024ace0dbe2af2d5b1a1b9623771"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a03ab984d93d0f240f31274499b72e6b0"><td class="memItemLeft" align="right" valign="top">arm_compute::ReductionOperation&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a03ab984d93d0f240f31274499b72e6b0">ConvertReductionOperationToAcl</a> (const <a class="el" href="structarmnn_1_1_reduce_descriptor.xhtml">ReduceDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:a03ab984d93d0f240f31274499b72e6b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9d43aa01b882d8776ab9403eea3cf779"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a9d43aa01b882d8776ab9403eea3cf779">ComputeReductionTensorShape</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> &amp;input, const std::vector&lt; uint32_t &gt; &amp;vAxis, const bool keepDims)</td></tr>
+<tr class="memdesc:a9d43aa01b882d8776ab9403eea3cf779"><td class="mdescLeft">&#160;</td><td class="mdescRight">Function to compute the output tensor shape based on the axes and if keepDims is set. <a href="#a9d43aa01b882d8776ab9403eea3cf779">More...</a><br /></td></tr>
+<tr class="separator:a9d43aa01b882d8776ab9403eea3cf779"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ada0fb4f79f3673b4ebd94a42175bf78d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_optional.xhtml">armnn::Optional</a>&lt; <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ada0fb4f79f3673b4ebd94a42175bf78d">GetBiasTypeFromWeightsType</a> (<a class="el" href="classarmnn_1_1_optional.xhtml">armnn::Optional</a>&lt; <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a> &gt; weightsType)</td></tr>
+<tr class="separator:ada0fb4f79f3673b4ebd94a42175bf78d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acea2d8c53b441e24b6d60b090fda37c9"><td class="memTemplParams" colspan="2">template&lt;typename F &gt; </td></tr>
+<tr class="memitem:acea2d8c53b441e24b6d60b090fda37c9"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#acea2d8c53b441e24b6d60b090fda37c9">CheckSupportRule</a> (F rule, <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; std::string &amp;&gt; reasonIfUnsupported, const char *reason)</td></tr>
+<tr class="separator:acea2d8c53b441e24b6d60b090fda37c9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5980f7b42f4df041efebdc6ae242f686"><td class="memTemplParams" colspan="2">template&lt;typename T &gt; </td></tr>
+<tr class="memitem:a5980f7b42f4df041efebdc6ae242f686"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a5980f7b42f4df041efebdc6ae242f686">AllTypesAreEqualImpl</a> (T)</td></tr>
+<tr class="separator:a5980f7b42f4df041efebdc6ae242f686"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2a0bcfb4df0a03357b4cbb8d9e89a3da"><td class="memTemplParams" colspan="2">template&lt;typename T , typename... Rest&gt; </td></tr>
+<tr class="memitem:a2a0bcfb4df0a03357b4cbb8d9e89a3da"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a2a0bcfb4df0a03357b4cbb8d9e89a3da">AllTypesAreEqualImpl</a> (T t1, T t2, Rest... rest)</td></tr>
+<tr class="separator:a2a0bcfb4df0a03357b4cbb8d9e89a3da"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7c8192a429fc68220e4fc308062a02ba"><td class="memItemLeft" align="right" valign="top">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_i_memory_optimizer_strategy.xhtml">IMemoryOptimizerStrategy</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a7c8192a429fc68220e4fc308062a02ba">GetMemoryOptimizerStrategy</a> (const std::string &amp;strategyName)</td></tr>
+<tr class="separator:a7c8192a429fc68220e4fc308062a02ba"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aedc54936fd5ebb2d5697c8001532401a"><td class="memItemLeft" align="right" valign="top">const std::vector&lt; std::string &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aedc54936fd5ebb2d5697c8001532401a">GetMemoryOptimizerStrategyNames</a> ()</td></tr>
+<tr class="separator:aedc54936fd5ebb2d5697c8001532401a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adcc09cc21e8c43acd9f4f74d78b67e3e"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#adcc09cc21e8c43acd9f4f74d78b67e3e">TEST_SUITE</a> (&quot;MemoryManagerTests&quot;)</td></tr>
+<tr class="separator:adcc09cc21e8c43acd9f4f74d78b67e3e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac38529227e1adeef300d31625826382b"><td class="memItemLeft" align="right" valign="top">constexpr const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ac38529227e1adeef300d31625826382b">MockImportBackendId</a> ()</td></tr>
+<tr class="separator:ac38529227e1adeef300d31625826382b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aafe6180ef80d9f334f3a3ba9cc0db35d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_const_tensor.xhtml">armnn::ConstTensor</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aafe6180ef80d9f334f3a3ba9cc0db35d">PermuteTensor</a> (const <a class="el" href="classarmnn_1_1_const_tensor_handle.xhtml">ConstTensorHandle</a> *tensor, const <a class="el" href="classarmnn_1_1_permutation_vector.xhtml">PermutationVector</a> &amp;permutationVector, void *permuteBuffer)</td></tr>
+<tr class="separator:aafe6180ef80d9f334f3a3ba9cc0db35d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3170fdd696155a247ecd81d445c0e2e1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a3170fdd696155a247ecd81d445c0e2e1">ReshapeWeightsForAcl</a> (<a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;weightInfo, <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> dataLayout)</td></tr>
+<tr class="separator:a3170fdd696155a247ecd81d445c0e2e1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a52b301fd3adce20b51c4482cb52f1a38"><td class="memTemplParams" colspan="2">template&lt;typename DataType &gt; </td></tr>
+<tr class="memitem:a52b301fd3adce20b51c4482cb52f1a38"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_const_tensor.xhtml">ConstTensor</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a52b301fd3adce20b51c4482cb52f1a38">ReorderWeightChannelsForAcl</a> (const <a class="el" href="classarmnn_1_1_const_tensor.xhtml">ConstTensor</a> &amp;weightHandle, <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> dataLayout, void *permuteBuffer)</td></tr>
+<tr class="separator:a52b301fd3adce20b51c4482cb52f1a38"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1e8288eac7e909fdb58b6113d816763a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a1e8288eac7e909fdb58b6113d816763a">ConvertWeightTensorInfoFromArmnnToAcl</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;weightInfo, <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> dataLayout)</td></tr>
+<tr class="separator:a1e8288eac7e909fdb58b6113d816763a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af35f79341ec6c10a8bd4c8caf0585ffb"><td class="memItemLeft" align="right" valign="top">std::tuple&lt; <a class="el" href="classarmnn_1_1_const_tensor.xhtml">ConstTensor</a>, unsigned int &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#af35f79341ec6c10a8bd4c8caf0585ffb">Convert1HWOTensorToAcl</a> (const <a class="el" href="classarmnn_1_1_const_tensor_handle.xhtml">ConstTensorHandle</a> *weightTensor, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;inputInfo, const <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> dataLayout, void *permuteBuffer)</td></tr>
+<tr class="memdesc:af35f79341ec6c10a8bd4c8caf0585ffb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Weights for depthwise have a datalayout of [1,H,W,O] = [1,H,W,I*M] This function coverts a ConstCpuTensorHandle from [1,H,W,I*M] to [1,I*M,H,W] (if NCHW) or keeps it at [1,H,W,I*M] (if NHWC) as required by the compute library. <a href="#af35f79341ec6c10a8bd4c8caf0585ffb">More...</a><br /></td></tr>
+<tr class="separator:af35f79341ec6c10a8bd4c8caf0585ffb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac4aa9e41515b354234645f115c49de32"><td class="memItemLeft" align="right" valign="top">std::tuple&lt; <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>, unsigned int &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ac4aa9e41515b354234645f115c49de32">Convert1HWOTensorInfoToAcl</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;weightInfo, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;inputInfo, const <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> dataLayout)</td></tr>
+<tr class="memdesc:ac4aa9e41515b354234645f115c49de32"><td class="mdescLeft">&#160;</td><td class="mdescRight">Weights for depthwise have a datalayout of [1,H,W,O] = [1,H,W,I*M] This function coverts a <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> from [1,H,W,I*M] to [1,I*M,H,W] (if NCHW) or keeps it at [1,H,W,I*M] (if NHWC) as required by the compute library Returns a tuple of converted weights tensor info and depth multiplier. <a href="#ac4aa9e41515b354234645f115c49de32">More...</a><br /></td></tr>
+<tr class="separator:ac4aa9e41515b354234645f115c49de32"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa22a82f5240a0eb0d61135345080aa2d"><td class="memItemLeft" align="right" valign="top">std::tuple&lt; <a class="el" href="classarmnn_1_1_const_tensor.xhtml">ConstTensor</a>, unsigned int &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aa22a82f5240a0eb0d61135345080aa2d">Convert1HWOtoMIHW</a> (const <a class="el" href="classarmnn_1_1_const_tensor_handle.xhtml">ConstTensorHandle</a> *weightTensor, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;inputInfo, const <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> &amp;dataLayout, void *permuteBuffer)</td></tr>
+<tr class="memdesc:aa22a82f5240a0eb0d61135345080aa2d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Converts a (weights) tensor from [1, H, W, I*M] = [1, H, W, O] to [M, I, H, W]. <a href="#aa22a82f5240a0eb0d61135345080aa2d">More...</a><br /></td></tr>
+<tr class="separator:aa22a82f5240a0eb0d61135345080aa2d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8ca9f249dc67c111b8234b2c78d672cd"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_const_tensor.xhtml">armnn::ConstTensor</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a8ca9f249dc67c111b8234b2c78d672cd">ConvertWeightTensorFromArmnnToAcl</a> (const <a class="el" href="classarmnn_1_1_const_tensor_handle.xhtml">ConstTensorHandle</a> *weightTensor, <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> dataLayout, void *permuteBuffer)</td></tr>
+<tr class="separator:a8ca9f249dc67c111b8234b2c78d672cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad69ffa576a596b9eb20ab6a41420c541"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ad69ffa576a596b9eb20ab6a41420c541">ConvertMaskToACLFormat</a> (int32_t mask, int32_t numDim)</td></tr>
+<tr class="separator:ad69ffa576a596b9eb20ab6a41420c541"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a92c91193007aa49f4732d6dba5397f8d"><td class="memTemplParams" colspan="2">template&lt;typename CopyFunc &gt; </td></tr>
+<tr class="memitem:a92c91193007aa49f4732d6dba5397f8d"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a92c91193007aa49f4732d6dba5397f8d">CopyTensorContentsGeneric</a> (const <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> *srcTensor, <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> *dstTensor, CopyFunc copy)</td></tr>
+<tr class="separator:a92c91193007aa49f4732d6dba5397f8d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afb5b53a8b0c01d4f27830bef0f25ca09"><td class="memTemplParams" colspan="2">template&lt;typename SrcTensorHandleType , typename DstTensorHandleType , typename DescriptorType &gt; </td></tr>
+<tr class="memitem:afb5b53a8b0c01d4f27830bef0f25ca09"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#afb5b53a8b0c01d4f27830bef0f25ca09">GatherTensorHandlePairs</a> (const DescriptorType &amp;descriptor, std::vector&lt; std::pair&lt; SrcTensorHandleType *, DstTensorHandleType *&gt;&gt; &amp;tensorHandlePairs)</td></tr>
+<tr class="separator:afb5b53a8b0c01d4f27830bef0f25ca09"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a27ecdfeeea12de313f2b97d309a35d9d"><td class="memItemLeft" align="right" valign="top">std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a27ecdfeeea12de313f2b97d309a35d9d">LowerString</a> (std::string value)</td></tr>
+<tr class="separator:a27ecdfeeea12de313f2b97d309a35d9d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3ca05ac77af0a0444ff34c1319094f6d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.xhtml#a707090747256af276c389e0cf1cb0a9a">TuningLevel</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a3ca05ac77af0a0444ff34c1319094f6d">ParseTuningLevel</a> (const <a class="el" href="classarmnn_1_1_backend_options_1_1_var.xhtml">BackendOptions::Var</a> &amp;value, <a class="el" href="namespacearmnn.xhtml#a707090747256af276c389e0cf1cb0a9a">TuningLevel</a> defaultValue)</td></tr>
+<tr class="separator:a3ca05ac77af0a0444ff34c1319094f6d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af464d406b22309a891ed0aa3008a7953"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#af464d406b22309a891ed0aa3008a7953">ParseBoolean</a> (const <a class="el" href="classarmnn_1_1_backend_options_1_1_var.xhtml">BackendOptions::Var</a> &amp;value, bool defaultValue)</td></tr>
+<tr class="separator:af464d406b22309a891ed0aa3008a7953"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4e9a59f936f3d2050a17597d22825f53"><td class="memItemLeft" align="right" valign="top">std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a4e9a59f936f3d2050a17597d22825f53">ParseFile</a> (const <a class="el" href="classarmnn_1_1_backend_options_1_1_var.xhtml">BackendOptions::Var</a> &amp;value, std::string defaultValue)</td></tr>
+<tr class="separator:a4e9a59f936f3d2050a17597d22825f53"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab562537b5c1ef1e6cde9db9f5fa322bd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ab562537b5c1ef1e6cde9db9f5fa322bd">ConfigureTuner</a> (arm_compute::CLTuner &amp;tuner, <a class="el" href="namespacearmnn.xhtml#a707090747256af276c389e0cf1cb0a9a">TuningLevel</a> level)</td></tr>
+<tr class="separator:ab562537b5c1ef1e6cde9db9f5fa322bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adfe10e7086e3e3b98927cf84aee03dd0"><td class="memItemLeft" align="right" valign="top">constexpr const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#adfe10e7086e3e3b98927cf84aee03dd0">ClBackendId</a> ()</td></tr>
+<tr class="separator:adfe10e7086e3e3b98927cf84aee03dd0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac845f99ae84c2fcf016b676769da7c51"><td class="memItemLeft" align="right" valign="top">flatbuffers::Offset&lt; ClContext &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ac845f99ae84c2fcf016b676769da7c51">CreateClContext</a> (flatbuffers::FlatBufferBuilder &amp;_fbb, flatbuffers::Offset&lt; flatbuffers::Vector&lt; flatbuffers::Offset&lt; armnn::Program &gt;&gt;&gt; programs=0)</td></tr>
+<tr class="separator:ac845f99ae84c2fcf016b676769da7c51"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8e0f170f651bf2e8d101b923b33efe5e"><td class="memItemLeft" align="right" valign="top">flatbuffers::Offset&lt; ClContext &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a8e0f170f651bf2e8d101b923b33efe5e">CreateClContextDirect</a> (flatbuffers::FlatBufferBuilder &amp;_fbb, const std::vector&lt; flatbuffers::Offset&lt; armnn::Program &gt;&gt; *programs=nullptr)</td></tr>
+<tr class="separator:a8e0f170f651bf2e8d101b923b33efe5e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0f37510801ba4f2500e4e9558c81f93c"><td class="memItemLeft" align="right" valign="top">flatbuffers::Offset&lt; Program &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a0f37510801ba4f2500e4e9558c81f93c">CreateProgram</a> (flatbuffers::FlatBufferBuilder &amp;_fbb, flatbuffers::Offset&lt; flatbuffers::String &gt; name=0, flatbuffers::Offset&lt; flatbuffers::Vector&lt; uint8_t &gt;&gt; binary=0)</td></tr>
+<tr class="separator:a0f37510801ba4f2500e4e9558c81f93c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6c31acdf17825e7ec0ec0da7e129cb69"><td class="memItemLeft" align="right" valign="top">flatbuffers::Offset&lt; Program &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a6c31acdf17825e7ec0ec0da7e129cb69">CreateProgramDirect</a> (flatbuffers::FlatBufferBuilder &amp;_fbb, const char *name=nullptr, const std::vector&lt; uint8_t &gt; *binary=nullptr)</td></tr>
+<tr class="separator:a6c31acdf17825e7ec0ec0da7e129cb69"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac3dec65fab0e6a1a6fef52e6321b4993"><td class="memItemLeft" align="right" valign="top">const armnn::ClContext *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ac3dec65fab0e6a1a6fef52e6321b4993">GetClContext</a> (const void *buf)</td></tr>
+<tr class="separator:ac3dec65fab0e6a1a6fef52e6321b4993"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab4c4804c2b7c7b4b25a8eca3272e12d4"><td class="memItemLeft" align="right" valign="top">const armnn::ClContext *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ab4c4804c2b7c7b4b25a8eca3272e12d4">GetSizePrefixedClContext</a> (const void *buf)</td></tr>
+<tr class="separator:ab4c4804c2b7c7b4b25a8eca3272e12d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab672391d036102ab6864bb181d4844d5"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ab672391d036102ab6864bb181d4844d5">ClContextIdentifier</a> ()</td></tr>
+<tr class="separator:ab672391d036102ab6864bb181d4844d5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a744cd226e45f7c948e0533abbd166b1f"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a744cd226e45f7c948e0533abbd166b1f">ClContextBufferHasIdentifier</a> (const void *buf)</td></tr>
+<tr class="separator:a744cd226e45f7c948e0533abbd166b1f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acda1e285d7be5f9b456d98bd29be4591"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#acda1e285d7be5f9b456d98bd29be4591">VerifyClContextBuffer</a> (flatbuffers::Verifier &amp;verifier)</td></tr>
+<tr class="separator:acda1e285d7be5f9b456d98bd29be4591"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acc7af054e783ad1bf6dce0111366d64c"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#acc7af054e783ad1bf6dce0111366d64c">VerifySizePrefixedClContextBuffer</a> (flatbuffers::Verifier &amp;verifier)</td></tr>
+<tr class="separator:acc7af054e783ad1bf6dce0111366d64c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab4e35e40c433e5fb0a0b89ca7c89988d"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ab4e35e40c433e5fb0a0b89ca7c89988d">ClContextExtension</a> ()</td></tr>
+<tr class="separator:ab4e35e40c433e5fb0a0b89ca7c89988d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a122d3124b7b19958eb053ffb9ace0dac"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a122d3124b7b19958eb053ffb9ace0dac">FinishClContextBuffer</a> (flatbuffers::FlatBufferBuilder &amp;fbb, flatbuffers::Offset&lt; armnn::ClContext &gt; root)</td></tr>
+<tr class="separator:a122d3124b7b19958eb053ffb9ace0dac"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4761eadb938ae8e1322d60ac319276d2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a4761eadb938ae8e1322d60ac319276d2">FinishSizePrefixedClContextBuffer</a> (flatbuffers::FlatBufferBuilder &amp;fbb, flatbuffers::Offset&lt; armnn::ClContext &gt; root)</td></tr>
+<tr class="separator:a4761eadb938ae8e1322d60ac319276d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab1545eea543ad790732f0722ce35cc80"><td class="memItemLeft" align="right" valign="top">constexpr const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ab1545eea543ad790732f0722ce35cc80">ClImportTensorHandleFactoryId</a> ()</td></tr>
+<tr class="separator:ab1545eea543ad790732f0722ce35cc80"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac86fc56b9a27576bfe930a7012a402d5"><td class="memItemLeft" align="right" valign="top">constexpr const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ac86fc56b9a27576bfe930a7012a402d5">ClTensorHandleFactoryId</a> ()</td></tr>
+<tr class="separator:ac86fc56b9a27576bfe930a7012a402d5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1391582cd6e145b67c98f3410667968e"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a1391582cd6e145b67c98f3410667968e">ClAbsWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output)</td></tr>
+<tr class="separator:a1391582cd6e145b67c98f3410667968e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a42ef3cee193102dc7755193579209cca"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a42ef3cee193102dc7755193579209cca">ClActivationWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:a42ef3cee193102dc7755193579209cca"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a24fc3e8e29d3fa56cc6b2d81e48625d1"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a24fc3e8e29d3fa56cc6b2d81e48625d1">ClAdditionValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input1, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> *activationDescriptor)</td></tr>
+<tr class="separator:a24fc3e8e29d3fa56cc6b2d81e48625d1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab80423b306d8e0436b9a316922911d4d"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ab80423b306d8e0436b9a316922911d4d">ClArgMinMaxWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_arg_min_max_descriptor.xhtml">ArgMinMaxDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:ab80423b306d8e0436b9a316922911d4d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a29bd65c1ec4ff9f75b636ec8e7b038be"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a29bd65c1ec4ff9f75b636ec8e7b038be">ClBatchNormalizationValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;mean, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;var, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;beta, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;gamma, const <a class="el" href="structarmnn_1_1_batch_normalization_descriptor.xhtml">BatchNormalizationDescriptor</a> &amp;descriptor, const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> *activationDescriptor)</td></tr>
+<tr class="separator:a29bd65c1ec4ff9f75b636ec8e7b038be"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae87476befb36d9cc4fb926337ba65b5d"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ae87476befb36d9cc4fb926337ba65b5d">ClBatchToSpaceNdWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_batch_to_space_nd_descriptor.xhtml">BatchToSpaceNdDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:ae87476befb36d9cc4fb926337ba65b5d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7f82264f26183ae3c66390e33be14ec6"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a7f82264f26183ae3c66390e33be14ec6">ClCastValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output)</td></tr>
+<tr class="separator:a7f82264f26183ae3c66390e33be14ec6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a02e646180897aca9fcbc02d16efdd784"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a02e646180897aca9fcbc02d16efdd784">ClChannelShuffleValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_channel_shuffle_descriptor.xhtml">ChannelShuffleDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:a02e646180897aca9fcbc02d16efdd784"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af6f6476c5d1c4c85153020f5229ebd14"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#af6f6476c5d1c4c85153020f5229ebd14">ClComparisonWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input1, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_comparison_descriptor.xhtml">ComparisonDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:af6f6476c5d1c4c85153020f5229ebd14"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7782f0809076f14363eacb4a38964b9f"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a7782f0809076f14363eacb4a38964b9f">ClConcatWorkloadValidate</a> (const std::vector&lt; const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> *&gt; &amp;inputs, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_origins_descriptor.xhtml">OriginsDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:a7782f0809076f14363eacb4a38964b9f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2f5c2e8794174361f2308f4a0d3f9c73"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a2f5c2e8794174361f2308f4a0d3f9c73">ClConstantWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output)</td></tr>
+<tr class="separator:a2f5c2e8794174361f2308f4a0d3f9c73"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a46efae0191388fd33db4e95c5d79e2be"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a46efae0191388fd33db4e95c5d79e2be">ClConvertFp16ToFp32WorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output)</td></tr>
+<tr class="separator:a46efae0191388fd33db4e95c5d79e2be"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a37f6946bfb7a9c7d64881b7a2e13945f"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a37f6946bfb7a9c7d64881b7a2e13945f">ClConvertFp32ToFp16WorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output)</td></tr>
+<tr class="separator:a37f6946bfb7a9c7d64881b7a2e13945f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a61cf0886d4c1a6e24c101a57ccb2ec31"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a61cf0886d4c1a6e24c101a57ccb2ec31">ClConvolution2dWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_convolution2d_descriptor.xhtml">Convolution2dDescriptor</a> &amp;descriptor, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;weights, const <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &gt; &amp;biases, bool isFastMathEnabled, const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> *activationDescriptor)</td></tr>
+<tr class="separator:a61cf0886d4c1a6e24c101a57ccb2ec31"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae387b3587bcce82eb33623b300097a8c"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ae387b3587bcce82eb33623b300097a8c">ClConvolution3dWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_convolution3d_descriptor.xhtml">Convolution3dDescriptor</a> &amp;descriptor, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;weights, const <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &gt; &amp;biases, bool isFastMathEnabled, const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> *activationDescriptor)</td></tr>
+<tr class="separator:ae387b3587bcce82eb33623b300097a8c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab3624c723d9a0ec93722b19060b76115"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ab3624c723d9a0ec93722b19060b76115">ClDepthToSpaceWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="namespacearmnn.xhtml#a3647f60510bc8ddaced01c51b0ee8714">DepthToSpaceDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:ab3624c723d9a0ec93722b19060b76115"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa6670a2fcf9f365da69f3f3092dfa64b"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aa6670a2fcf9f365da69f3f3092dfa64b">ClDepthwiseConvolutionWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml">DepthwiseConvolution2dDescriptor</a> &amp;descriptor, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;weights, const <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &gt; &amp;biases, const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> *activationDescriptor)</td></tr>
+<tr class="separator:aa6670a2fcf9f365da69f3f3092dfa64b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a75045734c29d7d6635342c05adbc151b"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a75045734c29d7d6635342c05adbc151b">ClDequantizeWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output)</td></tr>
+<tr class="separator:a75045734c29d7d6635342c05adbc151b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0591ff61ac269187164ea23713d33852"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a0591ff61ac269187164ea23713d33852">ClDivisionWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input1, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> *activationDescriptor)</td></tr>
+<tr class="separator:a0591ff61ac269187164ea23713d33852"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9831849c09391e90e50de46e2ee16403"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a9831849c09391e90e50de46e2ee16403">ClExpWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output)</td></tr>
+<tr class="separator:a9831849c09391e90e50de46e2ee16403"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8874961260f35da85229554f92e16ca9"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a8874961260f35da85229554f92e16ca9">ClFloorWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output)</td></tr>
+<tr class="separator:a8874961260f35da85229554f92e16ca9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a18c7eef8533ca0acbbe081cd1a1fec98"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a18c7eef8533ca0acbbe081cd1a1fec98">ClFullyConnectedWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;weights, const <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &gt; &amp;biases, const <a class="el" href="structarmnn_1_1_fully_connected_descriptor.xhtml">FullyConnectedDescriptor</a> &amp;descriptor, const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> *activationDescriptor)</td></tr>
+<tr class="separator:a18c7eef8533ca0acbbe081cd1a1fec98"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aff9e3b78a938c14a4420ce6365b997fb"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aff9e3b78a938c14a4420ce6365b997fb">ClGatherWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;indices, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_gather_descriptor.xhtml">GatherDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:aff9e3b78a938c14a4420ce6365b997fb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a79d362f0c6e04d51807e0d81b5b05f3a"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a79d362f0c6e04d51807e0d81b5b05f3a">ClInstanceNormalizationWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_instance_normalization_descriptor.xhtml">InstanceNormalizationDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:a79d362f0c6e04d51807e0d81b5b05f3a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aef334cdb24000c330f4d2e5f1b384784"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aef334cdb24000c330f4d2e5f1b384784">ClL2NormalizationWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_l2_normalization_descriptor.xhtml">L2NormalizationDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:aef334cdb24000c330f4d2e5f1b384784"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7900acef495ac8033a08d3ed74f06970"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a7900acef495ac8033a08d3ed74f06970">ClLogicalAndWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input1, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output)</td></tr>
+<tr class="separator:a7900acef495ac8033a08d3ed74f06970"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ace776a194a715c709136a9966ada1a48"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ace776a194a715c709136a9966ada1a48">ClLogicalNotWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output)</td></tr>
+<tr class="separator:ace776a194a715c709136a9966ada1a48"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a89391e63f7a679b023e6bd1798186db6"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a89391e63f7a679b023e6bd1798186db6">ClLogicalOrWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input1, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output)</td></tr>
+<tr class="separator:a89391e63f7a679b023e6bd1798186db6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7071f5d6693d3014ddcb34c886ffc734"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a7071f5d6693d3014ddcb34c886ffc734">ClLogSoftmaxWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="namespacearmnn.xhtml#ac14705405cbcdd580df613de6766fe65">LogSoftmaxDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:a7071f5d6693d3014ddcb34c886ffc734"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a64806be3c31d35b75546da7c6b6b46d0"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a64806be3c31d35b75546da7c6b6b46d0">ClLogWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output)</td></tr>
+<tr class="separator:a64806be3c31d35b75546da7c6b6b46d0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a90ab88fe4c7aa9466c4653404a6b2213"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a90ab88fe4c7aa9466c4653404a6b2213">ClLstmFloatWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;outputStateIn, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;cellStateIn, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;scratchBuffer, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;outputStateOut, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;cellStateOut, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_lstm_descriptor.xhtml">LstmDescriptor</a> &amp;descriptor, const <a class="el" href="structarmnn_1_1_lstm_input_params_info.xhtml">LstmInputParamsInfo</a> &amp;paramsInfo)</td></tr>
+<tr class="separator:a90ab88fe4c7aa9466c4653404a6b2213"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a553706c6338ffc52b0d916859f642587"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a553706c6338ffc52b0d916859f642587">ClMaximumWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input1, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output)</td></tr>
+<tr class="separator:a553706c6338ffc52b0d916859f642587"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a048a8ea8b1b39343a73ca7458024ea54"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a048a8ea8b1b39343a73ca7458024ea54">ClMeanValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_mean_descriptor.xhtml">MeanDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:a048a8ea8b1b39343a73ca7458024ea54"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8c04c8e796a4fbec706df42ed9c27e4e"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a8c04c8e796a4fbec706df42ed9c27e4e">ClMinimumWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input1, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output)</td></tr>
+<tr class="separator:a8c04c8e796a4fbec706df42ed9c27e4e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9638165cb6c1baae3b2b5fd9f0f75201"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a9638165cb6c1baae3b2b5fd9f0f75201">ClMultiplicationWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input1, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> *activationDescriptor)</td></tr>
+<tr class="separator:a9638165cb6c1baae3b2b5fd9f0f75201"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a66a3a6c05b38e48508bbbb3f32023ab7"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a66a3a6c05b38e48508bbbb3f32023ab7">ClNegWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output)</td></tr>
+<tr class="separator:a66a3a6c05b38e48508bbbb3f32023ab7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a144c2e243a255715f309999077ed1792"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a144c2e243a255715f309999077ed1792">ClNormalizationWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_normalization_descriptor.xhtml">NormalizationDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:a144c2e243a255715f309999077ed1792"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adcf7b7d939bac1cfaeb333c7b3175bb8"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#adcf7b7d939bac1cfaeb333c7b3175bb8">ClPadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_pad_descriptor.xhtml">PadDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:adcf7b7d939bac1cfaeb333c7b3175bb8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a26c25df9e2271333ab4d4ef71db41dca"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a26c25df9e2271333ab4d4ef71db41dca">ClPermuteWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_permute_descriptor.xhtml">PermuteDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:a26c25df9e2271333ab4d4ef71db41dca"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8a21bb33f7f054ce7b48a8c7df9e6d4a"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a8a21bb33f7f054ce7b48a8c7df9e6d4a">ClPooling2dWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_pooling2d_descriptor.xhtml">Pooling2dDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:a8a21bb33f7f054ce7b48a8c7df9e6d4a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae58d1f4437a779274037bc86efac9e26"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ae58d1f4437a779274037bc86efac9e26">ClPreluWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;alpha, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output)</td></tr>
+<tr class="separator:ae58d1f4437a779274037bc86efac9e26"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8cdb508cb0ebc06e39dc1661815d73b0"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a8cdb508cb0ebc06e39dc1661815d73b0">ClQLstmWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;cellStateIn, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;outputStateIn, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;cellStateOut, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;outputStateOut, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_q_lstm_descriptor.xhtml">QLstmDescriptor</a> &amp;descriptor, const <a class="el" href="structarmnn_1_1_lstm_input_params_info.xhtml">LstmInputParamsInfo</a> &amp;paramsInfo)</td></tr>
+<tr class="separator:a8cdb508cb0ebc06e39dc1661815d73b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5fb7fe07abfb2373103d842b47a24726"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a5fb7fe07abfb2373103d842b47a24726">ClQuantizedLstmWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;previousCellStateIn, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;previousOutputIn, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;cellStateOut, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_quantized_lstm_input_params_info.xhtml">QuantizedLstmInputParamsInfo</a> &amp;paramsInfo)</td></tr>
+<tr class="separator:a5fb7fe07abfb2373103d842b47a24726"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9c1b478e30a1e8a4ecac874cf15f13d4"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a9c1b478e30a1e8a4ecac874cf15f13d4">ClQuantizeWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output)</td></tr>
+<tr class="separator:a9c1b478e30a1e8a4ecac874cf15f13d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4c42dfd9db4a47e470b5800bb11a8374"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a4c42dfd9db4a47e470b5800bb11a8374">ClReduceWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_reduce_descriptor.xhtml">ReduceDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:a4c42dfd9db4a47e470b5800bb11a8374"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af5bb7a834a74983cbbc249785d0c392b"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#af5bb7a834a74983cbbc249785d0c392b">ClReshapeWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output)</td></tr>
+<tr class="separator:af5bb7a834a74983cbbc249785d0c392b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a95b187d3c6b7b46f4fbdc60be69fc02c"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a95b187d3c6b7b46f4fbdc60be69fc02c">ClResizeWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_resize_descriptor.xhtml">ResizeDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:a95b187d3c6b7b46f4fbdc60be69fc02c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3f6f9f0d3567ae04b49ea88727845900"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a3f6f9f0d3567ae04b49ea88727845900">ClRsqrtWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output)</td></tr>
+<tr class="separator:a3f6f9f0d3567ae04b49ea88727845900"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac5cd8464c73415025cb8c8f6ada74e15"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ac5cd8464c73415025cb8c8f6ada74e15">ClSinWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output)</td></tr>
+<tr class="separator:ac5cd8464c73415025cb8c8f6ada74e15"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6d85d2806d0a90140832ad8113c1d350"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a6d85d2806d0a90140832ad8113c1d350">ClSliceWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_slice_descriptor.xhtml">SliceDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:a6d85d2806d0a90140832ad8113c1d350"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abc6f7e5fe77e5aed3f7842755dd34073"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#abc6f7e5fe77e5aed3f7842755dd34073">ClSoftmaxWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_softmax_descriptor.xhtml">SoftmaxDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:abc6f7e5fe77e5aed3f7842755dd34073"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a534b28fd4b345bbc938d055ff5b8970f"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a534b28fd4b345bbc938d055ff5b8970f">ClSpaceToBatchNdWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_space_to_batch_nd_descriptor.xhtml">SpaceToBatchNdDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:a534b28fd4b345bbc938d055ff5b8970f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4fa3292a277dde3b46be6a44b2de9713"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a4fa3292a277dde3b46be6a44b2de9713">ClSpaceToDepthWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_space_to_depth_descriptor.xhtml">SpaceToDepthDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:a4fa3292a277dde3b46be6a44b2de9713"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3ac8a60f837b19b20987e4fd238ce0cd"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a3ac8a60f837b19b20987e4fd238ce0cd">ClSplitterWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const std::vector&lt; std::reference_wrapper&lt; <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &gt;&gt; &amp;outputs, unsigned int splitAxis)</td></tr>
+<tr class="separator:a3ac8a60f837b19b20987e4fd238ce0cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8c9fec997dbb5db4cdb433c36d075782"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a8c9fec997dbb5db4cdb433c36d075782">ClStackWorkloadValidate</a> (const std::vector&lt; const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> *&gt; &amp;inputs, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_stack_descriptor.xhtml">StackDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:a8c9fec997dbb5db4cdb433c36d075782"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a157e0508f6d6d08e3ca4cf6c661242e6"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a157e0508f6d6d08e3ca4cf6c661242e6">ClStridedSliceWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_strided_slice_descriptor.xhtml">StridedSliceDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:a157e0508f6d6d08e3ca4cf6c661242e6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afa9933f1d9de469ffba5ba0fcee769f8"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#afa9933f1d9de469ffba5ba0fcee769f8">ClSubtractionValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input1, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> *activationDescriptor)</td></tr>
+<tr class="separator:afa9933f1d9de469ffba5ba0fcee769f8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a719ea81939d6a25f8636b52c59165d66"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a719ea81939d6a25f8636b52c59165d66">ClTransposeConvolution2dWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_transpose_convolution2d_descriptor.xhtml">TransposeConvolution2dDescriptor</a> &amp;descriptor, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;weights, const <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &gt; &amp;biases)</td></tr>
+<tr class="separator:a719ea81939d6a25f8636b52c59165d66"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1c3a39fbecb45be0bb15dd665c9be61d"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a1c3a39fbecb45be0bb15dd665c9be61d">ClTransposeWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_transpose_descriptor.xhtml">TransposeDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:a1c3a39fbecb45be0bb15dd665c9be61d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a63833af8e1986a93f86d15397b9062c2"><td class="memItemLeft" align="right" valign="top">std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a63833af8e1986a93f86d15397b9062c2">GetConvolutionMethodString</a> (arm_compute::ConvolutionMethod &amp;convolutionMethod)</td></tr>
+<tr class="separator:a63833af8e1986a93f86d15397b9062c2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a73447f827b995cf90d4029151514b4ba"><td class="memTemplParams" colspan="2">template&lt;typename T &gt; </td></tr>
+<tr class="memitem:a73447f827b995cf90d4029151514b4ba"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a73447f827b995cf90d4029151514b4ba">CopyArmComputeClTensorData</a> (arm_compute::CLTensor &amp;dstTensor, const T *srcData)</td></tr>
+<tr class="separator:a73447f827b995cf90d4029151514b4ba"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6d4bdf4368a1422943f8f2b1740ec491"><td class="memItemLeft" align="right" valign="top">auto&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a6d4bdf4368a1422943f8f2b1740ec491">SetClStridedSliceData</a> (const std::vector&lt; int &gt; &amp;m_begin, const std::vector&lt; int &gt; &amp;m_end, const std::vector&lt; int &gt; &amp;m_stride)</td></tr>
+<tr class="separator:a6d4bdf4368a1422943f8f2b1740ec491"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a460e01ad4cd0bfa6bde4eccaf0e77220"><td class="memItemLeft" align="right" valign="top">auto&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a460e01ad4cd0bfa6bde4eccaf0e77220">SetClSliceData</a> (const std::vector&lt; unsigned int &gt; &amp;m_begin, const std::vector&lt; unsigned int &gt; &amp;m_size)</td></tr>
+<tr class="separator:a460e01ad4cd0bfa6bde4eccaf0e77220"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0eec4a463a166fad55307d9f26ba3a68"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a0eec4a463a166fad55307d9f26ba3a68">InitializeArmComputeClTensorData</a> (arm_compute::CLTensor &amp;clTensor, const <a class="el" href="classarmnn_1_1_const_tensor_handle.xhtml">ConstTensorHandle</a> *handle)</td></tr>
+<tr class="separator:a0eec4a463a166fad55307d9f26ba3a68"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2192b5ff59aacdb27f8b0238323915dc"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_runtime_exception.xhtml">RuntimeException</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a2192b5ff59aacdb27f8b0238323915dc">WrapClError</a> (const <a class="el" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da902b0d55fddef6f8d651fe1035b7d4bd">cl::Error</a> &amp;clError, const <a class="el" href="structarmnn_1_1_check_location.xhtml">CheckLocation</a> &amp;location)</td></tr>
+<tr class="separator:a2192b5ff59aacdb27f8b0238323915dc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aff5bee79757341daf750c7dd7c123a15"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aff5bee79757341daf750c7dd7c123a15">RunClFunction</a> (arm_compute::IFunction &amp;function, const <a class="el" href="structarmnn_1_1_check_location.xhtml">CheckLocation</a> &amp;location)</td></tr>
+<tr class="separator:aff5bee79757341daf750c7dd7c123a15"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae9f37e0b5f15afd89a29788a319da9ec"><td class="memTemplParams" colspan="2">template&lt;typename DataType , typename PayloadType &gt; </td></tr>
+<tr class="memitem:ae9f37e0b5f15afd89a29788a319da9ec"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ae9f37e0b5f15afd89a29788a319da9ec">GetOutputTensorData</a> (unsigned int idx, const PayloadType &amp;data)</td></tr>
+<tr class="separator:ae9f37e0b5f15afd89a29788a319da9ec"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3a34a305e5187f3a3c67030d3bebbdb0"><td class="memItemLeft" align="right" valign="top">constexpr const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a3a34a305e5187f3a3c67030d3bebbdb0">NeonBackendId</a> ()</td></tr>
+<tr class="separator:a3a34a305e5187f3a3c67030d3bebbdb0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aad5d4888304a57fb22c4608dc5d94dc1"><td class="memItemLeft" align="right" valign="top">constexpr const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aad5d4888304a57fb22c4608dc5d94dc1">NeonTensorHandleFactoryId</a> ()</td></tr>
+<tr class="separator:aad5d4888304a57fb22c4608dc5d94dc1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afc773aec6f845adc0cc547ce475dfe3f"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#afc773aec6f845adc0cc547ce475dfe3f">NeonAbsWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output)</td></tr>
+<tr class="separator:afc773aec6f845adc0cc547ce475dfe3f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a46495807633a01d826851e1cb498f071"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a46495807633a01d826851e1cb498f071">NeonActivationWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:a46495807633a01d826851e1cb498f071"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1b03e82a1a53b686aedea3734b2fb957"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a1b03e82a1a53b686aedea3734b2fb957">NeonAdditionWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input1, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> *activationDescriptor)</td></tr>
+<tr class="separator:a1b03e82a1a53b686aedea3734b2fb957"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a61d1f39297fec6e3062e4047dc5f236e"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a61d1f39297fec6e3062e4047dc5f236e">NeonArgMinMaxWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_arg_min_max_descriptor.xhtml">ArgMinMaxDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:a61d1f39297fec6e3062e4047dc5f236e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac1be1c9a317b23b5684c83af59fb2c96"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ac1be1c9a317b23b5684c83af59fb2c96">NeonBatchNormalizationValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;mean, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;var, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;beta, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;gamma, const <a class="el" href="structarmnn_1_1_batch_normalization_descriptor.xhtml">BatchNormalizationDescriptor</a> &amp;descriptor, const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> *activationDescriptor)</td></tr>
+<tr class="separator:ac1be1c9a317b23b5684c83af59fb2c96"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aad5f7f0fcd2dbb0aad7016ff984e7cc6"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aad5f7f0fcd2dbb0aad7016ff984e7cc6">NeonBatchToSpaceNdWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_batch_to_space_nd_descriptor.xhtml">BatchToSpaceNdDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:aad5f7f0fcd2dbb0aad7016ff984e7cc6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3ab69cec1cab301e096a2830f65a36ec"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a3ab69cec1cab301e096a2830f65a36ec">NeonCastValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output)</td></tr>
+<tr class="separator:a3ab69cec1cab301e096a2830f65a36ec"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2ee21869ffad00d6344afffb0a9baba1"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a2ee21869ffad00d6344afffb0a9baba1">NeonChannelShuffleValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_channel_shuffle_descriptor.xhtml">ChannelShuffleDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:a2ee21869ffad00d6344afffb0a9baba1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae412e8e64d6a6dde3ace908b59c29c06"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ae412e8e64d6a6dde3ace908b59c29c06">NeonComparisonWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input1, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_comparison_descriptor.xhtml">ComparisonDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:ae412e8e64d6a6dde3ace908b59c29c06"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8a219633e750d6daffcef3b641fa11f3"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a8a219633e750d6daffcef3b641fa11f3">NeonConcatWorkloadValidate</a> (const std::vector&lt; const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> *&gt; &amp;inputs, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_origins_descriptor.xhtml">OriginsDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:a8a219633e750d6daffcef3b641fa11f3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afb681fd9b8afe0b236d51b6c868ae660"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#afb681fd9b8afe0b236d51b6c868ae660">NeonConstantWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output)</td></tr>
+<tr class="separator:afb681fd9b8afe0b236d51b6c868ae660"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a45691b0c4a46c239b4986cfed95de13b"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a45691b0c4a46c239b4986cfed95de13b">NeonConvolution2dWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_convolution2d_descriptor.xhtml">Convolution2dDescriptor</a> &amp;descriptor, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;weights, const <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &gt; &amp;biases, bool isFastMathEnabled, const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> *activationDescriptor)</td></tr>
+<tr class="separator:a45691b0c4a46c239b4986cfed95de13b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acbb4d7b86eb01bb437230e1586b9aeb4"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#acbb4d7b86eb01bb437230e1586b9aeb4">NeonConvolution3dWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_convolution3d_descriptor.xhtml">Convolution3dDescriptor</a> &amp;descriptor, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;weights, const <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &gt; &amp;biases, bool isFastMathEnabled, const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> *activationDescriptor)</td></tr>
+<tr class="separator:acbb4d7b86eb01bb437230e1586b9aeb4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a116d88067bf98ce9858ab73e68f605f9"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a116d88067bf98ce9858ab73e68f605f9">NeonDepthToSpaceWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="namespacearmnn.xhtml#a3647f60510bc8ddaced01c51b0ee8714">DepthToSpaceDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:a116d88067bf98ce9858ab73e68f605f9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a63d684b26fb838b22123490d780bce08"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a63d684b26fb838b22123490d780bce08">NeonDepthwiseConvolutionWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml">DepthwiseConvolution2dDescriptor</a> &amp;descriptor, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;weights, const <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &gt; &amp;biases, const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> *activationDescriptor)</td></tr>
+<tr class="separator:a63d684b26fb838b22123490d780bce08"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acefede7cc57c71ea4cfe1c888bb413e0"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#acefede7cc57c71ea4cfe1c888bb413e0">NeonDequantizeWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output)</td></tr>
+<tr class="separator:acefede7cc57c71ea4cfe1c888bb413e0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a35d5394615a3062b629db056d414ae4f"><td class="memItemLeft" align="right" valign="top">arm_compute::DetectionPostProcessLayerInfo&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a35d5394615a3062b629db056d414ae4f">MakeInfo</a> (const <a class="el" href="structarmnn_1_1_detection_post_process_descriptor.xhtml">DetectionPostProcessDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:a35d5394615a3062b629db056d414ae4f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab816c37fc6a6243badf4f7a3d0c88d46"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ab816c37fc6a6243badf4f7a3d0c88d46">NeonDetectionPostProcessValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;boxEncodings, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;scores, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;anchors, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;detectionBoxes, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;detectionClasses, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;detectionScores, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;numDetections, const <a class="el" href="structarmnn_1_1_detection_post_process_descriptor.xhtml">DetectionPostProcessDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:ab816c37fc6a6243badf4f7a3d0c88d46"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a65c912bfcf02b3096f36caf21fa175d0"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a65c912bfcf02b3096f36caf21fa175d0">NeonDivisionWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input1, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> *activationDescriptor)</td></tr>
+<tr class="separator:a65c912bfcf02b3096f36caf21fa175d0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aec5669eb9285cbca1ee6c7e1dd7bcf6a"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aec5669eb9285cbca1ee6c7e1dd7bcf6a">NeonExpWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output)</td></tr>
+<tr class="separator:aec5669eb9285cbca1ee6c7e1dd7bcf6a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae455144d3472c502b636697f4775400c"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ae455144d3472c502b636697f4775400c">NeonFullyConnectedWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;weights, const <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &gt; &amp;biases, const <a class="el" href="structarmnn_1_1_fully_connected_descriptor.xhtml">FullyConnectedDescriptor</a> &amp;descriptor, const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> *activationDescriptor)</td></tr>
+<tr class="separator:ae455144d3472c502b636697f4775400c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6c354904637149b84767275e6f725741"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a6c354904637149b84767275e6f725741">NeonGatherWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;indices, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_gather_descriptor.xhtml">GatherDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:a6c354904637149b84767275e6f725741"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aea722abe239545030f4c6fe4e083816f"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aea722abe239545030f4c6fe4e083816f">NeonInstanceNormalizationWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_instance_normalization_descriptor.xhtml">InstanceNormalizationDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:aea722abe239545030f4c6fe4e083816f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae838df3960d2b5d18d73ed2a07aee917"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ae838df3960d2b5d18d73ed2a07aee917">NeonL2NormalizationWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_l2_normalization_descriptor.xhtml">L2NormalizationDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:ae838df3960d2b5d18d73ed2a07aee917"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7832b675e7efeb1315b31067e46ce705"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a7832b675e7efeb1315b31067e46ce705">NeonLogicalAndWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input1, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output)</td></tr>
+<tr class="separator:a7832b675e7efeb1315b31067e46ce705"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af4f8e11ae5715973420a82d841dfa676"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#af4f8e11ae5715973420a82d841dfa676">NeonLogicalNotWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output)</td></tr>
+<tr class="separator:af4f8e11ae5715973420a82d841dfa676"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2de04fd10d0a2419e0a05f12741017dc"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a2de04fd10d0a2419e0a05f12741017dc">NeonLogicalOrWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input1, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output)</td></tr>
+<tr class="separator:a2de04fd10d0a2419e0a05f12741017dc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac57d1e00cc24022c21aa7ff95eb618ba"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ac57d1e00cc24022c21aa7ff95eb618ba">NeonLogSoftmaxWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="namespacearmnn.xhtml#ac14705405cbcdd580df613de6766fe65">LogSoftmaxDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:ac57d1e00cc24022c21aa7ff95eb618ba"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad1991a3499a991b1fdd71d918f793f13"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ad1991a3499a991b1fdd71d918f793f13">NeonLogWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output)</td></tr>
+<tr class="separator:ad1991a3499a991b1fdd71d918f793f13"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9e06cc2a2ac8b88fc72972695a17910f"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a9e06cc2a2ac8b88fc72972695a17910f">NeonLstmFloatWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;outputStateIn, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;cellStateIn, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;scratchBuffer, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;outputStateOut, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;cellStateOut, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_lstm_descriptor.xhtml">LstmDescriptor</a> &amp;descriptor, const <a class="el" href="structarmnn_1_1_lstm_input_params_info.xhtml">LstmInputParamsInfo</a> &amp;paramsInfo)</td></tr>
+<tr class="separator:a9e06cc2a2ac8b88fc72972695a17910f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8d2ea79addd8ef64be2ca0dad3408f00"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a8d2ea79addd8ef64be2ca0dad3408f00">NeonMaximumWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input1, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output)</td></tr>
+<tr class="separator:a8d2ea79addd8ef64be2ca0dad3408f00"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae74e210a3f716c1f5f32663a8ec66345"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ae74e210a3f716c1f5f32663a8ec66345">NeonMeanWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_mean_descriptor.xhtml">MeanDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:ae74e210a3f716c1f5f32663a8ec66345"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab81159ebfa638af1b91fe1e8c5de1955"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ab81159ebfa638af1b91fe1e8c5de1955">NeonMinimumWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input1, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output)</td></tr>
+<tr class="memdesc:ab81159ebfa638af1b91fe1e8c5de1955"><td class="mdescLeft">&#160;</td><td class="mdescRight">Validate function for validating the inputs and output. <a href="#ab81159ebfa638af1b91fe1e8c5de1955">More...</a><br /></td></tr>
+<tr class="separator:ab81159ebfa638af1b91fe1e8c5de1955"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad512520e809bfed4fbd3db9fbc241263"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ad512520e809bfed4fbd3db9fbc241263">NeonMultiplicationWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input1, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> *activationDescriptor)</td></tr>
+<tr class="separator:ad512520e809bfed4fbd3db9fbc241263"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7f955750d00cdcae6038f07cc73686ea"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a7f955750d00cdcae6038f07cc73686ea">NeonNegWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output)</td></tr>
+<tr class="separator:a7f955750d00cdcae6038f07cc73686ea"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2ec6297db90d1d4c258c13d2d72b13d9"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a2ec6297db90d1d4c258c13d2d72b13d9">NeonNormalizationWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_normalization_descriptor.xhtml">NormalizationDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:a2ec6297db90d1d4c258c13d2d72b13d9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a39209c0c078e83227222eb885317c2c5"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a39209c0c078e83227222eb885317c2c5">NeonPadWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_pad_descriptor.xhtml">PadDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:a39209c0c078e83227222eb885317c2c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a70650f6b1d3b8511fcdb989ca769cdbb"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a70650f6b1d3b8511fcdb989ca769cdbb">NeonPermuteWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_permute_descriptor.xhtml">PermuteDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:a70650f6b1d3b8511fcdb989ca769cdbb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1f07655db8ad7f2738bb0d3d9e2316cc"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a1f07655db8ad7f2738bb0d3d9e2316cc">NeonPooling2dWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_pooling2d_descriptor.xhtml">Pooling2dDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:a1f07655db8ad7f2738bb0d3d9e2316cc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a188adc104b16db3dc23ed2c5ff06cbb8"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a188adc104b16db3dc23ed2c5ff06cbb8">NeonPreluWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;alpha, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output)</td></tr>
+<tr class="separator:a188adc104b16db3dc23ed2c5ff06cbb8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6e6f731864d33c0acd4140c7dfe17b0a"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a6e6f731864d33c0acd4140c7dfe17b0a">NeonQLstmWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;cellStateIn, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;outputStateIn, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;cellStateOut, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;outputStateOut, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_q_lstm_descriptor.xhtml">QLstmDescriptor</a> &amp;descriptor, const <a class="el" href="structarmnn_1_1_lstm_input_params_info.xhtml">LstmInputParamsInfo</a> &amp;paramsInfo)</td></tr>
+<tr class="separator:a6e6f731864d33c0acd4140c7dfe17b0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae83632e641892ad2de78f316376f6bd0"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ae83632e641892ad2de78f316376f6bd0">NeonQuantizedLstmWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;cellStateIn, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;outputStateIn, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;cellStateOut, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;outputStateOut, const <a class="el" href="structarmnn_1_1_quantized_lstm_input_params_info.xhtml">QuantizedLstmInputParamsInfo</a> &amp;paramsInfo)</td></tr>
+<tr class="separator:ae83632e641892ad2de78f316376f6bd0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4d1e35c8bbe48e99dd522ac0f75f77d7"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a4d1e35c8bbe48e99dd522ac0f75f77d7">NeonQuantizeWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output)</td></tr>
+<tr class="separator:a4d1e35c8bbe48e99dd522ac0f75f77d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aceb6d218204c4e0e7b4c968d6266917c"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aceb6d218204c4e0e7b4c968d6266917c">NeonReduceWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_reduce_descriptor.xhtml">ReduceDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:aceb6d218204c4e0e7b4c968d6266917c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a430021076042c8157a926a3bb3a37152"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a430021076042c8157a926a3bb3a37152">NeonReshapeWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output)</td></tr>
+<tr class="separator:a430021076042c8157a926a3bb3a37152"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a552d65f4e0a6c9e7c7796e77590063e9"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a552d65f4e0a6c9e7c7796e77590063e9">NeonResizeWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_resize_descriptor.xhtml">ResizeDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:a552d65f4e0a6c9e7c7796e77590063e9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa7d1b5e38aa8cb731519ff12e2a73350"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aa7d1b5e38aa8cb731519ff12e2a73350">NeonRsqrtWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output)</td></tr>
+<tr class="separator:aa7d1b5e38aa8cb731519ff12e2a73350"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af873a38f5251d348f37f0e94a2adc400"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#af873a38f5251d348f37f0e94a2adc400">NeonSinWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output)</td></tr>
+<tr class="separator:af873a38f5251d348f37f0e94a2adc400"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0a223c0997e3f7faa373ed55f954252b"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a0a223c0997e3f7faa373ed55f954252b">NeonSliceWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_slice_descriptor.xhtml">SliceDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:a0a223c0997e3f7faa373ed55f954252b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4077a9771ba9c551f4ce61863f65e798"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a4077a9771ba9c551f4ce61863f65e798">NeonSoftmaxWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_softmax_descriptor.xhtml">SoftmaxDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:a4077a9771ba9c551f4ce61863f65e798"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab29257da888af2c4971db1344d8a526c"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ab29257da888af2c4971db1344d8a526c">NeonSpaceToBatchNdWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_space_to_batch_nd_descriptor.xhtml">SpaceToBatchNdDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:ab29257da888af2c4971db1344d8a526c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af6d2d40482240def4614deb694933d1e"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#af6d2d40482240def4614deb694933d1e">NeonSpaceToDepthWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_space_to_depth_descriptor.xhtml">SpaceToDepthDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:af6d2d40482240def4614deb694933d1e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aab5ea316b3decb05430323d847e3a773"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aab5ea316b3decb05430323d847e3a773">NeonSplitterWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const std::vector&lt; std::reference_wrapper&lt; <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &gt;&gt; &amp;outputs, unsigned int splitAxis)</td></tr>
+<tr class="separator:aab5ea316b3decb05430323d847e3a773"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a65c83c74bdbd66cdd547d331998952eb"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a65c83c74bdbd66cdd547d331998952eb">NeonStackWorkloadValidate</a> (const std::vector&lt; const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> *&gt; &amp;inputs, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_stack_descriptor.xhtml">StackDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:a65c83c74bdbd66cdd547d331998952eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac71d08bf1257807c112b4d019802acc3"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ac71d08bf1257807c112b4d019802acc3">NeonStridedSliceWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_strided_slice_descriptor.xhtml">StridedSliceDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:ac71d08bf1257807c112b4d019802acc3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abc968e1323027f9e42cbc7642800d5ce"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#abc968e1323027f9e42cbc7642800d5ce">NeonSubtractionWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input0, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input1, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> *activationDescriptor)</td></tr>
+<tr class="separator:abc968e1323027f9e42cbc7642800d5ce"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abc73c3c9a09f91c22c64d7c166e9be4d"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#abc73c3c9a09f91c22c64d7c166e9be4d">NeonTransposeConvolution2dWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_transpose_convolution2d_descriptor.xhtml">TransposeConvolution2dDescriptor</a> &amp;descriptor, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;weights, const <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &gt; &amp;biases)</td></tr>
+<tr class="separator:abc73c3c9a09f91c22c64d7c166e9be4d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2b8555526752015115fa7fa00d88542b"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a2b8555526752015115fa7fa00d88542b">NeonTransposeWorkloadValidate</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;input, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;output, const <a class="el" href="structarmnn_1_1_transpose_descriptor.xhtml">TransposeDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:a2b8555526752015115fa7fa00d88542b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1351e01f9fb983937caf79e353142b41"><td class="memTemplParams" colspan="2">template&lt;typename T &gt; </td></tr>
+<tr class="memitem:a1351e01f9fb983937caf79e353142b41"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a> (arm_compute::Tensor &amp;dstTensor, const T *srcData)</td></tr>
+<tr class="separator:a1351e01f9fb983937caf79e353142b41"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acf8e1f43fc13cf7603564cc15743fce2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#acf8e1f43fc13cf7603564cc15743fce2">InitializeArmComputeTensorData</a> (arm_compute::Tensor &amp;tensor, const <a class="el" href="classarmnn_1_1_const_tensor_handle.xhtml">ConstTensorHandle</a> *handle)</td></tr>
+<tr class="separator:acf8e1f43fc13cf7603564cc15743fce2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a01d1e745f360ccd0b655214645bcef32"><td class="memItemLeft" align="right" valign="top">auto&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a01d1e745f360ccd0b655214645bcef32">SetNeonStridedSliceData</a> (const std::vector&lt; int &gt; &amp;m_begin, const std::vector&lt; int &gt; &amp;m_end, const std::vector&lt; int &gt; &amp;m_stride)</td></tr>
+<tr class="separator:a01d1e745f360ccd0b655214645bcef32"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab40e30cea5a328a3c35aa32f9b7db1c1"><td class="memItemLeft" align="right" valign="top">auto&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ab40e30cea5a328a3c35aa32f9b7db1c1">SetNeonSliceData</a> (const std::vector&lt; unsigned int &gt; &amp;m_begin, const std::vector&lt; unsigned int &gt; &amp;m_size)</td></tr>
+<tr class="separator:ab40e30cea5a328a3c35aa32f9b7db1c1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae7d50846b2769f81521af24d063bc093"><td class="memItemLeft" align="right" valign="top">constexpr const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ae7d50846b2769f81521af24d063bc093">RefBackendId</a> ()</td></tr>
+<tr class="separator:ae7d50846b2769f81521af24d063bc093"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5baedac4819656984488bc1fe5fe1505"><td class="memItemLeft" align="right" valign="top">constexpr const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a5baedac4819656984488bc1fe5fe1505">RefTensorHandleFactoryId</a> ()</td></tr>
+<tr class="separator:a5baedac4819656984488bc1fe5fe1505"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6a2e058d934e9d784eab57ee7121d69c"><td class="memTemplParams" colspan="2">template&lt;DataType ArmnnType&gt; </td></tr>
+<tr class="memitem:a6a2e058d934e9d784eab57ee7121d69c"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a6a2e058d934e9d784eab57ee7121d69c">IsDataType</a> (const <a class="el" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a> &amp;info)</td></tr>
+<tr class="separator:a6a2e058d934e9d784eab57ee7121d69c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a87b99791ccf8793961db67ea19eb6fa4"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a87b99791ccf8793961db67ea19eb6fa4">IsSigned32</a> (const <a class="el" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a> &amp;info)</td></tr>
+<tr class="separator:a87b99791ccf8793961db67ea19eb6fa4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3d504240723912bf9c76ff3afeaa25c5"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a3d504240723912bf9c76ff3afeaa25c5">IsBFloat16</a> (const <a class="el" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a> &amp;info)</td></tr>
+<tr class="separator:a3d504240723912bf9c76ff3afeaa25c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad78d822be14a8d585cd038cf0e73cd7e"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ad78d822be14a8d585cd038cf0e73cd7e">IsFloat16</a> (const <a class="el" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a> &amp;info)</td></tr>
+<tr class="separator:ad78d822be14a8d585cd038cf0e73cd7e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abcd0d843d5736b78740ae73249b6b977"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#abcd0d843d5736b78740ae73249b6b977">IsQSymmS16</a> (const <a class="el" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a> &amp;info)</td></tr>
+<tr class="separator:abcd0d843d5736b78740ae73249b6b977"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a09a7cd515c3b495e61b2a5116bf6a335"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a09a7cd515c3b495e61b2a5116bf6a335">IsQSymmS8</a> (const <a class="el" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a> &amp;info)</td></tr>
+<tr class="separator:a09a7cd515c3b495e61b2a5116bf6a335"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a47d136a5519331dee24f5e01b206ae7c"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a47d136a5519331dee24f5e01b206ae7c">IsQAsymmS8</a> (const <a class="el" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a> &amp;info)</td></tr>
+<tr class="separator:a47d136a5519331dee24f5e01b206ae7c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a37c36bbf668cd8a0d7dcd731c9b591d7"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a37c36bbf668cd8a0d7dcd731c9b591d7">IsQAsymmU8</a> (const <a class="el" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a> &amp;info)</td></tr>
+<tr class="separator:a37c36bbf668cd8a0d7dcd731c9b591d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad05c0670c947d35d39b3b0217e9975cf"><td class="memTemplParams" colspan="2">template&lt;typename QueueDescriptorType &gt; </td></tr>
+<tr class="memitem:ad05c0670c947d35d39b3b0217e9975cf"><td class="memTemplItemLeft" align="right" valign="top">constexpr bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ad05c0670c947d35d39b3b0217e9975cf">IsOperationQueueDescriptor</a> (const QueueDescriptorType &amp;)</td></tr>
+<tr class="separator:ad05c0670c947d35d39b3b0217e9975cf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a93e7b76d19b33076b2a4eae44014d5ea"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a93e7b76d19b33076b2a4eae44014d5ea"><td class="memTemplItemLeft" align="right" valign="top">constexpr bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a93e7b76d19b33076b2a4eae44014d5ea">IsOperationQueueDescriptor</a> (const <a class="el" href="structarmnn_1_1_mem_copy_queue_descriptor.xhtml">MemCopyQueueDescriptor</a> &amp;)</td></tr>
+<tr class="separator:a93e7b76d19b33076b2a4eae44014d5ea"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a05323af66b9f762e269a27562a2bbdd0"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a05323af66b9f762e269a27562a2bbdd0"><td class="memTemplItemLeft" align="right" valign="top">constexpr bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a05323af66b9f762e269a27562a2bbdd0">IsOperationQueueDescriptor</a> (const <a class="el" href="structarmnn_1_1_constant_queue_descriptor.xhtml">ConstantQueueDescriptor</a> &amp;)</td></tr>
+<tr class="separator:a05323af66b9f762e269a27562a2bbdd0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a91332212b6a2cc9c0ea32af03c600b4f"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a91332212b6a2cc9c0ea32af03c600b4f"><td class="memTemplItemLeft" align="right" valign="top">constexpr bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a91332212b6a2cc9c0ea32af03c600b4f">IsOperationQueueDescriptor</a> (const <a class="el" href="structarmnn_1_1_permute_queue_descriptor.xhtml">PermuteQueueDescriptor</a> &amp;)</td></tr>
+<tr class="separator:a91332212b6a2cc9c0ea32af03c600b4f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7636fbbc4f8ea2d0cf9f3ac2d12a4c62"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a7636fbbc4f8ea2d0cf9f3ac2d12a4c62">Activation</a> (float in, <a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9ea">ActivationFunction</a> function, float a, float b)</td></tr>
+<tr class="separator:a7636fbbc4f8ea2d0cf9f3ac2d12a4c62"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad10d72a6f8859949bbe6134c638ce171"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ad10d72a6f8859949bbe6134c638ce171">Activation</a> (<a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;in, <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt; &amp;out, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;tensorInfo, <a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9ea">ActivationFunction</a> function, float a, float b)</td></tr>
+<tr class="separator:ad10d72a6f8859949bbe6134c638ce171"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad441be836a142e8935e0413f4a22c9ec"><td class="memTemplParams" colspan="2">template&lt;typename OUT &gt; </td></tr>
+<tr class="memitem:ad441be836a142e8935e0413f4a22c9ec"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ad441be836a142e8935e0413f4a22c9ec">ArgMinMax</a> (<a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;in, OUT *out, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;inputTensorInfo, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;outputTensorInfo, <a class="el" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeae">ArgMinMaxFunction</a> function, int axis)</td></tr>
+<tr class="separator:ad441be836a142e8935e0413f4a22c9ec"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1687cef9e4d417595f05519f3b67bf0f"><td class="memItemLeft" align="right" valign="top">template void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a1687cef9e4d417595f05519f3b67bf0f">ArgMinMax</a> (<a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;in, int32_t *out, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;inputTensorInfo, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;outputTensorInfo, <a class="el" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeae">ArgMinMaxFunction</a> function, int axis)</td></tr>
+<tr class="separator:a1687cef9e4d417595f05519f3b67bf0f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4ef59ef40b2161e37f3e5eb990a342ad"><td class="memItemLeft" align="right" valign="top">template void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a4ef59ef40b2161e37f3e5eb990a342ad">ArgMinMax</a> (<a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;in, int64_t *out, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;inputTensorInfo, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;outputTensorInfo, <a class="el" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeae">ArgMinMaxFunction</a> function, int axis)</td></tr>
+<tr class="separator:a4ef59ef40b2161e37f3e5eb990a342ad"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adc251e65d99405496d503811589e9a20"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#adc251e65d99405496d503811589e9a20">BatchNormImpl</a> (const <a class="el" href="structarmnn_1_1_batch_normalization_queue_descriptor.xhtml">BatchNormalizationQueueDescriptor</a> &amp;data, <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;meanDecoder, <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;varianceDecoder, <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;betaDecoder, <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;gammaDecoder, <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;inputDecoder, <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt; &amp;outputEncoder)</td></tr>
+<tr class="separator:adc251e65d99405496d503811589e9a20"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac70a495c61526a0500b33b23db86ca27"><td class="memItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ac70a495c61526a0500b33b23db86ca27">Offset</a> (const <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> &amp;shape, unsigned int batch, unsigned int height, unsigned int width, unsigned int channels, const <a class="el" href="classarmnn_utils_1_1_data_layout_indexed.xhtml">DataLayoutIndexed</a> &amp;dataLayout)</td></tr>
+<tr class="separator:ac70a495c61526a0500b33b23db86ca27"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8746512fab5ec10c2c57800c66311ba7"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a8746512fab5ec10c2c57800c66311ba7">BatchToSpaceNd</a> (const <a class="el" href="classarmnn_utils_1_1_data_layout_indexed.xhtml">DataLayoutIndexed</a> &amp;dataLayout, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;inputTensorInfo, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;outputTensorInfo, const std::vector&lt; unsigned int &gt; &amp;blockShape, const std::vector&lt; std::pair&lt; unsigned int, unsigned int &gt;&gt; &amp;cropsData, <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;inputDecoder, <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt; &amp;outputEncoder)</td></tr>
+<tr class="separator:a8746512fab5ec10c2c57800c66311ba7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa58cffc192978865f4fc8d3b39f62460"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aa58cffc192978865f4fc8d3b39f62460">Concatenate</a> (const <a class="el" href="structarmnn_1_1_concat_queue_descriptor.xhtml">ConcatQueueDescriptor</a> &amp;data, std::vector&lt; <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> *&gt; inputs, std::vector&lt; <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> *&gt; outputs)</td></tr>
+<tr class="separator:aa58cffc192978865f4fc8d3b39f62460"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9750dc088a62ed91b79f636dfaa2d9a1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a9750dc088a62ed91b79f636dfaa2d9a1">Convolve3d</a> (const <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> &amp;rInputShape, <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;rInputDecoder, const <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> &amp;rOutputShape, <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt; &amp;rOutputEncoder, const <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> &amp;rFilterShape, <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;rFilterDecoder, bool biasEnabled, <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; *pBiasDecoder, <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> dataLayout, unsigned int paddingTop, unsigned int paddingLeft, unsigned int paddingFront, unsigned int xStride, unsigned int yStride, unsigned int zStride, unsigned int xDilation, unsigned int yDilation, unsigned int zDilation)</td></tr>
+<tr class="separator:a9750dc088a62ed91b79f636dfaa2d9a1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af98115cd07776d3fa8424434d2a7a897"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#af98115cd07776d3fa8424434d2a7a897">Convolve</a> (const <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> &amp;rInputShape, <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;rInputDecoder, const <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> &amp;rOutputShape, <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt; &amp;rOutputEncoder, const <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> &amp;rFilterShape, <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;rFilterDecoder, bool biasEnabled, <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; *pBiasDecoder, <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> dataLayout, unsigned int paddingTop, unsigned int paddingLeft, unsigned int xStride, unsigned int yStride, unsigned int xDilation, unsigned int yDilation, bool depthwise)</td></tr>
+<tr class="separator:af98115cd07776d3fa8424434d2a7a897"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5aae369ef847a00062925cea8e9be9c4"><td class="memTemplParams" colspan="2">template&lt;typename T &gt; </td></tr>
+<tr class="memitem:a5aae369ef847a00062925cea8e9be9c4"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a5aae369ef847a00062925cea8e9be9c4">Debug</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;inputInfo, const T *inputData, <a class="el" href="namespacearmnn.xhtml#afad4088a9a058114ee5f87246f87bf49">LayerGuid</a> guid, const std::string &amp;layerName, unsigned int slotIndex)</td></tr>
+<tr class="separator:a5aae369ef847a00062925cea8e9be9c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a43791bdad23b9c3dd62711c03f793881"><td class="memItemLeft" align="right" valign="top">template void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a43791bdad23b9c3dd62711c03f793881">Debug&lt; BFloat16 &gt;</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;inputInfo, const <a class="el" href="classarmnn_1_1_b_float16.xhtml">BFloat16</a> *inputData, <a class="el" href="namespacearmnn.xhtml#afad4088a9a058114ee5f87246f87bf49">LayerGuid</a> guid, const std::string &amp;layerName, unsigned int slotIndex)</td></tr>
+<tr class="separator:a43791bdad23b9c3dd62711c03f793881"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3b0ab9518e3fd6a0447c174df57a313c"><td class="memItemLeft" align="right" valign="top">template void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a3b0ab9518e3fd6a0447c174df57a313c">Debug&lt; Half &gt;</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;inputInfo, const <a class="el" href="namespacearmnn.xhtml#a0f38fa92b2468d5378258a2b074c1a31">Half</a> *inputData, <a class="el" href="namespacearmnn.xhtml#afad4088a9a058114ee5f87246f87bf49">LayerGuid</a> guid, const std::string &amp;layerName, unsigned int slotIndex)</td></tr>
+<tr class="separator:a3b0ab9518e3fd6a0447c174df57a313c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a26abbe393a88835dd569523bec69719b"><td class="memItemLeft" align="right" valign="top">template void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a26abbe393a88835dd569523bec69719b">Debug&lt; float &gt;</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;inputInfo, const float *inputData, <a class="el" href="namespacearmnn.xhtml#afad4088a9a058114ee5f87246f87bf49">LayerGuid</a> guid, const std::string &amp;layerName, unsigned int slotIndex)</td></tr>
+<tr class="separator:a26abbe393a88835dd569523bec69719b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1121718a486db835afa99328650e7e89"><td class="memItemLeft" align="right" valign="top">template void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a1121718a486db835afa99328650e7e89">Debug&lt; uint8_t &gt;</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;inputInfo, const uint8_t *inputData, <a class="el" href="namespacearmnn.xhtml#afad4088a9a058114ee5f87246f87bf49">LayerGuid</a> guid, const std::string &amp;layerName, unsigned int slotIndex)</td></tr>
+<tr class="separator:a1121718a486db835afa99328650e7e89"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac2167b3a09fab7c9b58af461bd990c3b"><td class="memItemLeft" align="right" valign="top">template void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ac2167b3a09fab7c9b58af461bd990c3b">Debug&lt; int8_t &gt;</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;inputInfo, const int8_t *inputData, <a class="el" href="namespacearmnn.xhtml#afad4088a9a058114ee5f87246f87bf49">LayerGuid</a> guid, const std::string &amp;layerName, unsigned int slotIndex)</td></tr>
+<tr class="separator:ac2167b3a09fab7c9b58af461bd990c3b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acc771f233bb7884932260ba353118b46"><td class="memItemLeft" align="right" valign="top">template void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#acc771f233bb7884932260ba353118b46">Debug&lt; int16_t &gt;</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;inputInfo, const int16_t *inputData, <a class="el" href="namespacearmnn.xhtml#afad4088a9a058114ee5f87246f87bf49">LayerGuid</a> guid, const std::string &amp;layerName, unsigned int slotIndex)</td></tr>
+<tr class="separator:acc771f233bb7884932260ba353118b46"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7c1cb9cf0678f74b1dcfff310d1475fd"><td class="memItemLeft" align="right" valign="top">template void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a7c1cb9cf0678f74b1dcfff310d1475fd">Debug&lt; int32_t &gt;</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;inputInfo, const int32_t *inputData, <a class="el" href="namespacearmnn.xhtml#afad4088a9a058114ee5f87246f87bf49">LayerGuid</a> guid, const std::string &amp;layerName, unsigned int slotIndex)</td></tr>
+<tr class="separator:a7c1cb9cf0678f74b1dcfff310d1475fd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1545cb162c5a64d75d9c0c05e8ea387c"><td class="memTemplParams" colspan="2">template&lt;typename T &gt; </td></tr>
+<tr class="memitem:a1545cb162c5a64d75d9c0c05e8ea387c"><td class="memTemplItemLeft" align="right" valign="top">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; T &gt; &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a1545cb162c5a64d75d9c0c05e8ea387c">MakeDecoder</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;info, const void *data=nullptr)</td></tr>
+<tr class="separator:a1545cb162c5a64d75d9c0c05e8ea387c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adb59a379c467b6d48874e946183b4d21"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:adb59a379c467b6d48874e946183b4d21"><td class="memTemplItemLeft" align="right" valign="top">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#adb59a379c467b6d48874e946183b4d21">MakeDecoder</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;info, const void *data)</td></tr>
+<tr class="separator:adb59a379c467b6d48874e946183b4d21"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a59c4fab5981602d8117d0b024eafd9ec"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a59c4fab5981602d8117d0b024eafd9ec"><td class="memTemplItemLeft" align="right" valign="top">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; bool &gt; &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a59c4fab5981602d8117d0b024eafd9ec">MakeDecoder</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;info, const void *data)</td></tr>
+<tr class="separator:a59c4fab5981602d8117d0b024eafd9ec"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a21c5697c38df92463d1e767db8a95267"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a21c5697c38df92463d1e767db8a95267"><td class="memTemplItemLeft" align="right" valign="top">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; int32_t &gt; &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a21c5697c38df92463d1e767db8a95267">MakeDecoder</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;info, const void *data)</td></tr>
+<tr class="separator:a21c5697c38df92463d1e767db8a95267"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab023d9a7687e35c0f108458a094c1f56"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ab023d9a7687e35c0f108458a094c1f56">DepthToSpace</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;inputInfo, const <a class="el" href="namespacearmnn.xhtml#a3647f60510bc8ddaced01c51b0ee8714">DepthToSpaceDescriptor</a> &amp;descriptor, const void *inputData, void *outputData, unsigned int dataTypeSize)</td></tr>
+<tr class="separator:ab023d9a7687e35c0f108458a094c1f56"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acae7e910f899ae67340c9ce29e406a86"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#acae7e910f899ae67340c9ce29e406a86">Dequantize</a> (<a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;inputDecoder, <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt; &amp;outputEncoder, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;inputInfo, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;outputInfo)</td></tr>
+<tr class="separator:acae7e910f899ae67340c9ce29e406a86"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae8ed5c640761fb6744aec0ee16388417"><td class="memItemLeft" align="right" valign="top">std::vector&lt; unsigned int &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ae8ed5c640761fb6744aec0ee16388417">GenerateRangeK</a> (unsigned int k)</td></tr>
+<tr class="separator:ae8ed5c640761fb6744aec0ee16388417"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2748f45e58b1c612d473043f711d1434"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a2748f45e58b1c612d473043f711d1434">TopKSort</a> (unsigned int k, unsigned int *indices, const float *values, unsigned int numElement)</td></tr>
+<tr class="separator:a2748f45e58b1c612d473043f711d1434"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abf6aad7bc221f8ad22b4d99cd020373b"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#abf6aad7bc221f8ad22b4d99cd020373b">IntersectionOverUnion</a> (const float *boxI, const float *boxJ)</td></tr>
+<tr class="separator:abf6aad7bc221f8ad22b4d99cd020373b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac8c641d4a69c9a85c487cfbc7ea4d73c"><td class="memItemLeft" align="right" valign="top">std::vector&lt; unsigned int &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ac8c641d4a69c9a85c487cfbc7ea4d73c">NonMaxSuppression</a> (unsigned int numBoxes, const std::vector&lt; float &gt; &amp;boxCorners, const std::vector&lt; float &gt; &amp;scores, float nmsScoreThreshold, unsigned int maxDetection, float nmsIouThreshold)</td></tr>
+<tr class="separator:ac8c641d4a69c9a85c487cfbc7ea4d73c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae8dcbb74cf0c855724f12833a55a5684"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ae8dcbb74cf0c855724f12833a55a5684">AllocateOutputData</a> (unsigned int numOutput, unsigned int numSelected, const std::vector&lt; float &gt; &amp;boxCorners, const std::vector&lt; unsigned int &gt; &amp;outputIndices, const std::vector&lt; unsigned int &gt; &amp;selectedBoxes, const std::vector&lt; unsigned int &gt; &amp;selectedClasses, const std::vector&lt; float &gt; &amp;selectedScores, float *detectionBoxes, float *detectionScores, float *detectionClasses, float *numDetections)</td></tr>
+<tr class="separator:ae8dcbb74cf0c855724f12833a55a5684"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae76ce23fa9fc18e56448d52b37dd3f32"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ae76ce23fa9fc18e56448d52b37dd3f32">DetectionPostProcess</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;boxEncodingsInfo, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;scoresInfo, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;anchorsInfo, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;detectionBoxesInfo, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;detectionClassesInfo, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;detectionScoresInfo, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;numDetectionsInfo, const <a class="el" href="structarmnn_1_1_detection_post_process_descriptor.xhtml">DetectionPostProcessDescriptor</a> &amp;desc, <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;boxEncodings, <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;scores, <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;anchors, float *detectionBoxes, float *detectionClasses, float *detectionScores, float *numDetections)</td></tr>
+<tr class="separator:ae76ce23fa9fc18e56448d52b37dd3f32"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a56867cc5245724ab56953604b1eec9ee"><td class="memTemplParams" colspan="2">template&lt;typename T &gt; </td></tr>
+<tr class="memitem:a56867cc5245724ab56953604b1eec9ee"><td class="memTemplItemLeft" align="right" valign="top">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; T &gt; &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a56867cc5245724ab56953604b1eec9ee">MakeEncoder</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;info, void *data=nullptr)</td></tr>
+<tr class="separator:a56867cc5245724ab56953604b1eec9ee"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a363da7c8d642ea382e3bd2f1c6283d52"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a363da7c8d642ea382e3bd2f1c6283d52"><td class="memTemplItemLeft" align="right" valign="top">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt; &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a363da7c8d642ea382e3bd2f1c6283d52">MakeEncoder</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;info, void *data)</td></tr>
+<tr class="separator:a363da7c8d642ea382e3bd2f1c6283d52"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6fcd01a9cdee158d3022ad089c27c078"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a6fcd01a9cdee158d3022ad089c27c078"><td class="memTemplItemLeft" align="right" valign="top">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; bool &gt; &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a6fcd01a9cdee158d3022ad089c27c078">MakeEncoder</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;info, void *data)</td></tr>
+<tr class="separator:a6fcd01a9cdee158d3022ad089c27c078"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae5cb90ec4c498ed366d2ca03a270ab91"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:ae5cb90ec4c498ed366d2ca03a270ab91"><td class="memTemplItemLeft" align="right" valign="top">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; int32_t &gt; &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ae5cb90ec4c498ed366d2ca03a270ab91">MakeEncoder</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;info, void *data)</td></tr>
+<tr class="separator:ae5cb90ec4c498ed366d2ca03a270ab91"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a88bebdfe6309aa2cd6831cfa73c296f0"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a88bebdfe6309aa2cd6831cfa73c296f0">Fill</a> (<a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt; &amp;output, const <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> &amp;desiredOutputShape, const float value)</td></tr>
+<tr class="memdesc:a88bebdfe6309aa2cd6831cfa73c296f0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates a tensor and fills it with a scalar value. <a href="#a88bebdfe6309aa2cd6831cfa73c296f0">More...</a><br /></td></tr>
+<tr class="separator:a88bebdfe6309aa2cd6831cfa73c296f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a435f9350a94adfbb0d5b9abb5f430914"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a435f9350a94adfbb0d5b9abb5f430914">FullyConnected</a> (const <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> &amp;rInputShape, <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;rInputDecoder, const <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> &amp;rOutputShape, <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt; &amp;rOutputEncoder, const <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> &amp;rWeightsShape, <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;rWeightDecoder, <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; *rBiasDecoder, bool biasEnabled, unsigned int K, bool transposeWeights)</td></tr>
+<tr class="memdesc:a435f9350a94adfbb0d5b9abb5f430914"><td class="mdescLeft">&#160;</td><td class="mdescRight">Performs a matrix multiplication and optionally adds a bias. <a href="#a435f9350a94adfbb0d5b9abb5f430914">More...</a><br /></td></tr>
+<tr class="separator:a435f9350a94adfbb0d5b9abb5f430914"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a38c9c1724b660b2558a19895b681a8fb"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a38c9c1724b660b2558a19895b681a8fb">Gather</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;paramsInfo, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;indicesInfo, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;outputInfo, <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;params, const int32_t *indices, <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt; &amp;output, const int32_t axis)</td></tr>
+<tr class="separator:a38c9c1724b660b2558a19895b681a8fb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad5ca459a0ad2c2015f137170d9dd1cf8"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ad5ca459a0ad2c2015f137170d9dd1cf8">InstanceNorm</a> (const <a class="el" href="structarmnn_1_1_instance_normalization_queue_descriptor.xhtml">InstanceNormalizationQueueDescriptor</a> &amp;data, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;inputInfo, <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;inputDecoder, <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt; &amp;outputEncoder)</td></tr>
+<tr class="separator:ad5ca459a0ad2c2015f137170d9dd1cf8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac52e04c0e349e25bcdaa72c27395ef8f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ac52e04c0e349e25bcdaa72c27395ef8f">LogSoftmax</a> (<a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;input, <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt; &amp;output, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;inputInfo, const <a class="el" href="namespacearmnn.xhtml#ac14705405cbcdd580df613de6766fe65">LogSoftmaxDescriptor</a> &amp;descriptor)</td></tr>
+<tr class="separator:ac52e04c0e349e25bcdaa72c27395ef8f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a952423703fa6b92f18d19df3995633b4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a952423703fa6b92f18d19df3995633b4">LstmImpl</a> (const <a class="el" href="structarmnn_1_1_lstm_descriptor.xhtml">LstmDescriptor</a> &amp;descriptor, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;inputInfo, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;outputInfo, const <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> &amp;inputToOutputWeightsShape, const <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> &amp;recurrentToOutputWeightsShape, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;inputData, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;outputStateIn, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;cellStateIn, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt;&gt; &amp;outputStateOut, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt;&gt; &amp;cellStateOut, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt;&gt; &amp;output, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;cellStateOutDecoder, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;outputDecoder, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;inputToInputWeightsTensor, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;inputToForgetWeightsTensor, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;inputToCellWeightsTensor, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;inputToOutputWeightsTensor, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;recurrentToInputWeightsTensor, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;recurrentToForgetWeightsTensor, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;recurrentToCellWeightsTensor, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;recurrentToOutputWeightsTensor, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;cellToInputWeightsTensor, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;cellToForgetWeightsTensor, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;cellToOutputWeightsTensor, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;inputGateBiasTensor, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;forgetGateBiasTensor, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;cellBiasTensor, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;outputGateBiasTensor, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;projectionWeightsTensor, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;projectionBiasTensor, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;inputLayerNormWeights, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;forgetLayerNormWeights, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;cellLayerNormWeights, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;outputLayerNormWeights, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt;&gt; &amp;inputGateScratch, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt;&gt; &amp;cellScratch, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt;&gt; &amp;forgetGateScratch, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt;&gt; &amp;outputGateScratch, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;inputGateScratchDecoder, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;cellScratchDecoder, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;forgetGateScratchDecoder, std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;outputGateScratchDecoder, float layerNormEpsilon)</td></tr>
+<tr class="separator:a952423703fa6b92f18d19df3995633b4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4e3efb65a77cf35dc5dc09e4f3646029"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a4e3efb65a77cf35dc5dc09e4f3646029">MirrorPad</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;inputInfo, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;outputInfo, const <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> *inputHandle, <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> *outputHandle, const <a class="el" href="structarmnn_1_1_pad_queue_descriptor.xhtml">PadQueueDescriptor</a> &amp;data)</td></tr>
+<tr class="separator:a4e3efb65a77cf35dc5dc09e4f3646029"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3c62b52d21e28088f040a4b6c2a06022"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a3c62b52d21e28088f040a4b6c2a06022">Pad</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;inputInfo, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;outputInfo, const <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> *inputHandle, <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> *outputHandle, const <a class="el" href="structarmnn_1_1_pad_queue_descriptor.xhtml">PadQueueDescriptor</a> &amp;data)</td></tr>
+<tr class="separator:a3c62b52d21e28088f040a4b6c2a06022"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae2e93e304cf516841c521e3eaee025cd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ae2e93e304cf516841c521e3eaee025cd">Pooling2d</a> (<a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;rInputDecoder, <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt; &amp;rOutputEncoder, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;inputInfo, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;outputInfo, const <a class="el" href="structarmnn_1_1_pooling2d_descriptor.xhtml">Pooling2dDescriptor</a> &amp;params)</td></tr>
+<tr class="memdesc:ae2e93e304cf516841c521e3eaee025cd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes the Pooling2d operation. <a href="#ae2e93e304cf516841c521e3eaee025cd">More...</a><br /></td></tr>
+<tr class="separator:ae2e93e304cf516841c521e3eaee025cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a69acbef24cd1cc572b93fc3e1e6ac030"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a69acbef24cd1cc572b93fc3e1e6ac030">Pooling3d</a> (<a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;rInputDecoder, <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt; &amp;rOutputEncoder, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;inputInfo, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;outputInfo, const <a class="el" href="structarmnn_1_1_pooling3d_descriptor.xhtml">Pooling3dDescriptor</a> &amp;params)</td></tr>
+<tr class="memdesc:a69acbef24cd1cc572b93fc3e1e6ac030"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes the Pooling3d operation. <a href="#a69acbef24cd1cc572b93fc3e1e6ac030">More...</a><br /></td></tr>
+<tr class="separator:a69acbef24cd1cc572b93fc3e1e6ac030"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3be2f69aaf56e58a64ce62054c497fbc"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a3be2f69aaf56e58a64ce62054c497fbc">PreluImpl</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;inputInfo, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;alphaInfo, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;outputInfo, <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;inputData, <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;alphaData, <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt; &amp;outputData)</td></tr>
+<tr class="separator:a3be2f69aaf56e58a64ce62054c497fbc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a869f740e9c2fcb8642350c6e3d0b3742"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a869f740e9c2fcb8642350c6e3d0b3742">NextIndex</a> (const unsigned int numDims, const <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a> &amp;dims, std::vector&lt; unsigned int &gt; &amp;current)</td></tr>
+<tr class="separator:a869f740e9c2fcb8642350c6e3d0b3742"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae86f1ca23eaa764da9e589cc8e39a969"><td class="memItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ae86f1ca23eaa764da9e589cc8e39a969">ReducedOutputOffset</a> (const unsigned int numDims, const <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a> &amp;dims, std::vector&lt; unsigned int &gt; &amp;index, const unsigned int numAxis, const std::vector&lt; unsigned int &gt; &amp;axis)</td></tr>
+<tr class="separator:ae86f1ca23eaa764da9e589cc8e39a969"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad64b7a275169ba1b1ba2d15679f7e8b1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ad64b7a275169ba1b1ba2d15679f7e8b1">Reduce</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;inputInfo, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;outputInfo, <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;input, <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt; &amp;output, const std::vector&lt; uint32_t &gt; axis, const <a class="el" href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0">ReduceOperation</a> reduceOperation)</td></tr>
+<tr class="separator:ad64b7a275169ba1b1ba2d15679f7e8b1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab3c0b7e1a78b1b98c24934221f36a7c3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ab3c0b7e1a78b1b98c24934221f36a7c3">FakeQuantization</a> (const float *inputData, float *outputData, uint32_t numElements, float min, float max)</td></tr>
+<tr class="separator:ab3c0b7e1a78b1b98c24934221f36a7c3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af7ec4c0fa4375a45a70e4e31f3d8af47"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#af7ec4c0fa4375a45a70e4e31f3d8af47">GetTensorInfo</a> (const <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> *tensorHandle)</td></tr>
+<tr class="memdesc:af7ec4c0fa4375a45a70e4e31f3d8af47"><td class="mdescLeft">&#160;</td><td class="mdescRight">float32 helpers <a href="#af7ec4c0fa4375a45a70e4e31f3d8af47">More...</a><br /></td></tr>
+<tr class="separator:af7ec4c0fa4375a45a70e4e31f3d8af47"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2187ea15b1ae8c323a0cc5c211fc43d9"><td class="memTemplParams" colspan="2">template&lt;typename DataType , typename PayloadType &gt; </td></tr>
+<tr class="memitem:a2187ea15b1ae8c323a0cc5c211fc43d9"><td class="memTemplItemLeft" align="right" valign="top">const <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a2187ea15b1ae8c323a0cc5c211fc43d9">GetInputTensorData</a> (unsigned int idx, const PayloadType &amp;data)</td></tr>
+<tr class="separator:a2187ea15b1ae8c323a0cc5c211fc43d9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5442d22144b3608bcfc7eea1bc55e35d"><td class="memTemplParams" colspan="2">template&lt;typename DataType &gt; </td></tr>
+<tr class="memitem:a5442d22144b3608bcfc7eea1bc55e35d"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a5442d22144b3608bcfc7eea1bc55e35d">GetOutputTensorData</a> (<a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> *tensorHandle)</td></tr>
+<tr class="separator:a5442d22144b3608bcfc7eea1bc55e35d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a691846a9eee59b0cd5b22fb5f674e007"><td class="memTemplParams" colspan="2">template&lt;typename PayloadType &gt; </td></tr>
+<tr class="memitem:a691846a9eee59b0cd5b22fb5f674e007"><td class="memTemplItemLeft" align="right" valign="top">const float *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a691846a9eee59b0cd5b22fb5f674e007">GetInputTensorDataFloat</a> (unsigned int idx, const PayloadType &amp;data)</td></tr>
+<tr class="separator:a691846a9eee59b0cd5b22fb5f674e007"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab5f0afc1e37fd100843ecd55d8f284c1"><td class="memTemplParams" colspan="2">template&lt;typename PayloadType &gt; </td></tr>
+<tr class="memitem:ab5f0afc1e37fd100843ecd55d8f284c1"><td class="memTemplItemLeft" align="right" valign="top">float *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ab5f0afc1e37fd100843ecd55d8f284c1">GetOutputTensorDataFloat</a> (unsigned int idx, const PayloadType &amp;data)</td></tr>
+<tr class="separator:ab5f0afc1e37fd100843ecd55d8f284c1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a084b0ce273bef78aa314bd97fc574b84"><td class="memTemplParams" colspan="2">template&lt;typename PayloadType &gt; </td></tr>
+<tr class="memitem:a084b0ce273bef78aa314bd97fc574b84"><td class="memTemplItemLeft" align="right" valign="top">const <a class="el" href="namespacearmnn.xhtml#a0f38fa92b2468d5378258a2b074c1a31">Half</a> *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a084b0ce273bef78aa314bd97fc574b84">GetInputTensorDataHalf</a> (unsigned int idx, const PayloadType &amp;data)</td></tr>
+<tr class="separator:a084b0ce273bef78aa314bd97fc574b84"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab98e77207c3d676b0b9ffa67357dbc6a"><td class="memTemplParams" colspan="2">template&lt;typename PayloadType &gt; </td></tr>
+<tr class="memitem:ab98e77207c3d676b0b9ffa67357dbc6a"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.xhtml#a0f38fa92b2468d5378258a2b074c1a31">Half</a> *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ab98e77207c3d676b0b9ffa67357dbc6a">GetOutputTensorDataHalf</a> (unsigned int idx, const PayloadType &amp;data)</td></tr>
+<tr class="separator:ab98e77207c3d676b0b9ffa67357dbc6a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac44cb4d413a43342b120b2c4d047d648"><td class="memTemplParams" colspan="2">template&lt;typename PayloadType &gt; </td></tr>
+<tr class="memitem:ac44cb4d413a43342b120b2c4d047d648"><td class="memTemplItemLeft" align="right" valign="top">const <a class="el" href="classarmnn_1_1_b_float16.xhtml">BFloat16</a> *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ac44cb4d413a43342b120b2c4d047d648">GetInputTensorDataBFloat16</a> (unsigned int idx, const PayloadType &amp;data)</td></tr>
+<tr class="separator:ac44cb4d413a43342b120b2c4d047d648"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a85ace5e5f41a093622a8c04150d24c60"><td class="memTemplParams" colspan="2">template&lt;typename PayloadType &gt; </td></tr>
+<tr class="memitem:a85ace5e5f41a093622a8c04150d24c60"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_b_float16.xhtml">BFloat16</a> *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a85ace5e5f41a093622a8c04150d24c60">GetOutputTensorDataBFloat16</a> (unsigned int idx, const PayloadType &amp;data)</td></tr>
+<tr class="separator:a85ace5e5f41a093622a8c04150d24c60"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4144d7535639c617fca0d095379493f0"><td class="memTemplParams" colspan="2">template&lt;typename T &gt; </td></tr>
+<tr class="memitem:a4144d7535639c617fca0d095379493f0"><td class="memTemplItemLeft" align="right" valign="top">std::vector&lt; float &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a4144d7535639c617fca0d095379493f0">Dequantize</a> (const T *quant, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;info)</td></tr>
+<tr class="memdesc:a4144d7535639c617fca0d095379493f0"><td class="mdescLeft">&#160;</td><td class="mdescRight">u8 helpers <a href="#a4144d7535639c617fca0d095379493f0">More...</a><br /></td></tr>
+<tr class="separator:a4144d7535639c617fca0d095379493f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1204727d8ce3ee1e60daf08079eb892e"><td class="memTemplParams" colspan="2">template&lt;typename T &gt; </td></tr>
+<tr class="memitem:a1204727d8ce3ee1e60daf08079eb892e"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a1204727d8ce3ee1e60daf08079eb892e">Dequantize</a> (const T *inputData, float *outputData, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;info)</td></tr>
+<tr class="separator:a1204727d8ce3ee1e60daf08079eb892e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abbbe4a59b72fba606f21e7c24dcbd8c0"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#abbbe4a59b72fba606f21e7c24dcbd8c0">Quantize</a> (uint8_t *quant, const float *dequant, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;info)</td></tr>
+<tr class="separator:abbbe4a59b72fba606f21e7c24dcbd8c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6894316aa645fd5e837739135bef04bb"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a6894316aa645fd5e837739135bef04bb">Resize</a> (<a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;in, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;inputInfo, <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt; &amp;out, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;outputInfo, <a class="el" href="classarmnn_utils_1_1_data_layout_indexed.xhtml">DataLayoutIndexed</a> dataLayout, <a class="el" href="namespacearmnn.xhtml#a9a2af2f8c4af4f9efa8e79417d505ac4">armnn::ResizeMethod</a> resizeMethod, bool alignCorners, bool halfPixelCenters)</td></tr>
+<tr class="separator:a6894316aa645fd5e837739135bef04bb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a044ea0cc993d4d1fbe4ec877b17b8d39"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a044ea0cc993d4d1fbe4ec877b17b8d39">Slice</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;inputInfo, const <a class="el" href="structarmnn_1_1_slice_descriptor.xhtml">SliceDescriptor</a> &amp;descriptor, const void *inputData, void *outputData, unsigned int dataTypeSize)</td></tr>
+<tr class="separator:a044ea0cc993d4d1fbe4ec877b17b8d39"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa999ff2585ad75b95954a9323f63c32b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aa999ff2585ad75b95954a9323f63c32b">Softmax</a> (<a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;in, <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt; &amp;out, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;inputTensorInfo, float beta, int axis)</td></tr>
+<tr class="memdesc:aa999ff2585ad75b95954a9323f63c32b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes the softmax function on some inputs, into outputs, with a shape given by tensorInfo. <a href="#aa999ff2585ad75b95954a9323f63c32b">More...</a><br /></td></tr>
+<tr class="separator:aa999ff2585ad75b95954a9323f63c32b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adafb0fd0a3f6435c2bdf41f971761ecf"><td class="memItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#adafb0fd0a3f6435c2bdf41f971761ecf">GetOffset</a> (const <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> &amp;shape, unsigned int b, unsigned int h, unsigned int w, unsigned int c, const <a class="el" href="classarmnn_utils_1_1_data_layout_indexed.xhtml">DataLayoutIndexed</a> &amp;dataLayout)</td></tr>
+<tr class="separator:adafb0fd0a3f6435c2bdf41f971761ecf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4a180e425d4c19b2cdea4ce5760180e1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a4a180e425d4c19b2cdea4ce5760180e1">SpaceToBatchNd</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;inputInfo, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;outputInfo, const <a class="el" href="structarmnn_1_1_space_to_batch_nd_descriptor.xhtml">SpaceToBatchNdDescriptor</a> &amp;params, <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;inputData, <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt; &amp;outputData)</td></tr>
+<tr class="separator:a4a180e425d4c19b2cdea4ce5760180e1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5e1dc69443b64ad16b669388a6023f7a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a5e1dc69443b64ad16b669388a6023f7a">SpaceToDepth</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;inputInfo, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;outputInfo, const <a class="el" href="structarmnn_1_1_space_to_depth_descriptor.xhtml">SpaceToDepthDescriptor</a> &amp;params, <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;inputData, <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt; &amp;outputData)</td></tr>
+<tr class="separator:a5e1dc69443b64ad16b669388a6023f7a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7cc1fc0ee4d88d16e9684a9c964718ce"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a7cc1fc0ee4d88d16e9684a9c964718ce">Split</a> (const <a class="el" href="structarmnn_1_1_splitter_queue_descriptor.xhtml">SplitterQueueDescriptor</a> &amp;data, std::vector&lt; <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> *&gt; inputs, std::vector&lt; <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> *&gt; outputs)</td></tr>
+<tr class="separator:a7cc1fc0ee4d88d16e9684a9c964718ce"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac90715a0439d1e77922996a27ef3a534"><td class="memTemplParams" colspan="2">template&lt;typename DataType &gt; </td></tr>
+<tr class="memitem:ac90715a0439d1e77922996a27ef3a534"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ac90715a0439d1e77922996a27ef3a534">Splitter</a> (const <a class="el" href="structarmnn_1_1_splitter_queue_descriptor.xhtml">SplitterQueueDescriptor</a> &amp;data, std::vector&lt; <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> *&gt; inputs, std::vector&lt; <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> *&gt; outputs)</td></tr>
+<tr class="separator:ac90715a0439d1e77922996a27ef3a534"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac245fda400649db10eed0dc96c1b5c37"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ac245fda400649db10eed0dc96c1b5c37">Stack</a> (const <a class="el" href="structarmnn_1_1_stack_queue_descriptor.xhtml">StackQueueDescriptor</a> &amp;data, std::vector&lt; std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt;&gt; &amp;inputs, <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt; &amp;output, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;inputInfo, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;outputInfo)</td></tr>
+<tr class="separator:ac245fda400649db10eed0dc96c1b5c37"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a86d7a7168ac00b75b4971f9aad623698"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a86d7a7168ac00b75b4971f9aad623698">StridedSlice</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;inputInfo, const <a class="el" href="structarmnn_1_1_strided_slice_descriptor.xhtml">StridedSliceDescriptor</a> &amp;params, const void *inputData, void *outputData, unsigned int dataTypeSize)</td></tr>
+<tr class="separator:a86d7a7168ac00b75b4971f9aad623698"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:affec174d91f234497dfbceba5e251dee"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#affec174d91f234497dfbceba5e251dee">TransposeConvolution2dImpl</a> (const <a class="el" href="structarmnn_1_1_transpose_convolution2d_descriptor.xhtml">TransposeConvolution2dDescriptor</a> &amp;descriptor, const <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> &amp;inputShape, <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;inputDecoder, const <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> &amp;outputShape, <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt; &amp;outputEncoder, const <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> &amp;weightsShape, <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;weightsDecoder, <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; *biasesDecoder)</td></tr>
+<tr class="separator:affec174d91f234497dfbceba5e251dee"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8022a6869bffa6233fec784a471c1680"><td class="memItemLeft" align="right" valign="top">std::istream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a8022a6869bffa6233fec784a471c1680">operator&gt;&gt;</a> (std::istream &amp;in, <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456ae">armnn::Compute</a> &amp;compute)</td></tr>
+<tr class="separator:a8022a6869bffa6233fec784a471c1680"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3c51506c471a4513dcc3364514d75f39"><td class="memItemLeft" align="right" valign="top">std::istream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a3c51506c471a4513dcc3364514d75f39">operator&gt;&gt;</a> (std::istream &amp;in, <a class="el" href="classarmnn_1_1_backend_id.xhtml">armnn::BackendId</a> &amp;backend)</td></tr>
+<tr class="separator:a3c51506c471a4513dcc3364514d75f39"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:abdcd184ed3bd648bb31d385040cafd5d"><td class="memItemLeft" align="right" valign="top">constexpr unsigned int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#abdcd184ed3bd648bb31d385040cafd5d">MaxNumOfTensorDimensions</a> = 5U</td></tr>
+<tr class="separator:abdcd184ed3bd648bb31d385040cafd5d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a602ddc6408c3347ba4c1eba623003984"><td class="memItemLeft" align="right" valign="top">constexpr unsigned int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a602ddc6408c3347ba4c1eba623003984">LOWEST_CAPTURE_PERIOD</a> = 10000u</td></tr>
+<tr class="memdesc:a602ddc6408c3347ba4c1eba623003984"><td class="mdescLeft">&#160;</td><td class="mdescRight">The lowest performance data capture interval we support is 10 miliseconds. <a href="#a602ddc6408c3347ba4c1eba623003984">More...</a><br /></td></tr>
+<tr class="separator:a602ddc6408c3347ba4c1eba623003984"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a61d2390e44601830cdc9b400b9910bbf"><td class="memItemLeft" align="right" valign="top">constexpr unsigned int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a61d2390e44601830cdc9b400b9910bbf">EXPIRE_RATE</a> = 3U</td></tr>
+<tr class="memdesc:a61d2390e44601830cdc9b400b9910bbf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Variable to control expire rate of priority queue. <a href="#a61d2390e44601830cdc9b400b9910bbf">More...</a><br /></td></tr>
+<tr class="separator:a61d2390e44601830cdc9b400b9910bbf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a43ecd194778b7653578044060ba8695e"><td class="memItemLeft" align="right" valign="top">constexpr std::size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a43ecd194778b7653578044060ba8695e">g_ProfilingEventCountHint</a> = 1024</td></tr>
+<tr class="separator:a43ecd194778b7653578044060ba8695e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a41794552ff67b0dad16de60f9b8e7d7c"><td class="memItemLeft" align="right" valign="top">constexpr bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a41794552ff67b0dad16de60f9b8e7d7c">g_WriteProfilingEventSequence</a> = true</td></tr>
+<tr class="separator:a41794552ff67b0dad16de60f9b8e7d7c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aacc0d11e271ebbfcff9d613dd17604aa"><td class="memItemLeft" align="right" valign="top">constexpr bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aacc0d11e271ebbfcff9d613dd17604aa">g_AggregateProfilingEventsByInference</a> = true</td></tr>
+<tr class="separator:aacc0d11e271ebbfcff9d613dd17604aa"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6ce7e56eb10e440463f09eee8f213adc"><td class="memItemLeft" align="right" valign="top">constexpr bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a6ce7e56eb10e440463f09eee8f213adc">g_WriteReportToStdOutOnProfilerDestruction</a> = false</td></tr>
+<tr class="separator:a6ce7e56eb10e440463f09eee8f213adc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acb96b901eccb58267042c6bb7d41185f"><td class="memItemLeft" align="right" valign="top">thread_local <a class="el" href="classarmnn_1_1_i_profiler.xhtml">IProfiler</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#acb96b901eccb58267042c6bb7d41185f">tl_Profiler</a> = nullptr</td></tr>
+<tr class="separator:acb96b901eccb58267042c6bb7d41185f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa2b4a5cd5b7f1555cba80a6072824024"><td class="memItemLeft" align="right" valign="top">constexpr size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aa2b4a5cd5b7f1555cba80a6072824024">wordSize</a> = sizeof(size_t) * 8</td></tr>
+<tr class="separator:aa2b4a5cd5b7f1555cba80a6072824024"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a468f6472f6d28fba4a9e43c8c793df9f"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="namespacearmnn.xhtml#aa9c506b558b8aa33a228b15164f40dc3">BackendCapabilities</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a468f6472f6d28fba4a9e43c8c793df9f">gpuAccCapabilities</a> (&quot;GpuAcc&quot;, { {&quot;NonConstWeights&quot;, false}, {&quot;AsyncExecution&quot;, false}, {&quot;ProtectedContentAllocation&quot;, true}, {&quot;ConstantTensorsAsInputs&quot;, false}, {&quot;PreImportIOTensors&quot;, false}, {&quot;ExternallyManagedMemory&quot;, true}, {&quot;MultiAxisPacking&quot;, false}, {&quot;SingleAxisPacking&quot;, true} })</td></tr>
+<tr class="separator:a468f6472f6d28fba4a9e43c8c793df9f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a59b7d5f8cd8e403a46183a527afe1d4b"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="namespacearmnn.xhtml#aa9c506b558b8aa33a228b15164f40dc3">BackendCapabilities</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a59b7d5f8cd8e403a46183a527afe1d4b">cpuAccCapabilities</a> (&quot;CpuAcc&quot;, { {&quot;NonConstWeights&quot;, false}, {&quot;AsyncExecution&quot;, false}, {&quot;ProtectedContentAllocation&quot;, false}, {&quot;ConstantTensorsAsInputs&quot;, false}, {&quot;PreImportIOTensors&quot;, false}, {&quot;ExternallyManagedMemory&quot;, true}, {&quot;MultiAxisPacking&quot;, false}, {&quot;SingleAxisPacking&quot;, true} })</td></tr>
+<tr class="separator:a59b7d5f8cd8e403a46183a527afe1d4b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a57af7c2f79db8ab6ccc1611a2172b6e6"><td class="memItemLeft" align="right" valign="top">const std::set&lt; <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">armnn::LayerType</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a57af7c2f79db8ab6ccc1611a2172b6e6">paddingRequiredLayers</a></td></tr>
+<tr class="separator:a57af7c2f79db8ab6ccc1611a2172b6e6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abf951dc00760f423e98e6295c8edd595"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="namespacearmnn.xhtml#aa9c506b558b8aa33a228b15164f40dc3">BackendCapabilities</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#abf951dc00760f423e98e6295c8edd595">cpuRefCapabilities</a> (&quot;CpuRef&quot;, { {&quot;NonConstWeights&quot;, true}, {&quot;AsyncExecution&quot;, true}, {&quot;ProtectedContentAllocation&quot;, false}, {&quot;ConstantTensorsAsInputs&quot;, true}, {&quot;PreImportIOTensors&quot;, true}, {&quot;ExternallyManagedMemory&quot;, true}, {&quot;MultiAxisPacking&quot;, false}, {&quot;SingleAxisPacking&quot;, true} })</td></tr>
+<tr class="separator:abf951dc00760f423e98e6295c8edd595"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab7a35288d329560ff76ddf785e852507"><td class="memItemLeft" align="right" valign="top">const std::set&lt; <a class="el" href="namespacearmnn.xhtml#ab24d74259a053475f6040dd701a01952">armnn::BackendCapability</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ab7a35288d329560ff76ddf785e852507">oldCpuRefCapabilities</a></td></tr>
+<tr class="separator:ab7a35288d329560ff76ddf785e852507"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2021 ARM Limited and Contributors. </p>
+<p><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> is a drop in replacement for std::optional until we migrate to c++-17.</p>
+<p>Create pages for each tool so they appear nicely in the doxygen tree-view.</p>
+<p>All rights reserved.</p>
+<p>SPDX-License-Identifier: MIT</p>
+<p>Subpages are not listed there. Also we can overwrite the page name this way.</p>
+<p>Subpages are not listed there.</p>
+<p>Note: The parser, serializer and deserializer pages are created in 01_parsers.dox or 02_deserializer_serializer.dox</p>
+<p>Only a subset of the optional features are implemented that we intend to use in ArmNN. There are two distinct implementations here:</p>
+<p>1, for normal constructable/destructable types and reference types 2, for reference types The std::optional features we support are:</p>
+<ul>
+<li>has_value() and operator bool() to tell if the optional has a value</li>
+<li>value() returns a reference to the held object </li>
+</ul>
+</div><h2 class="groupheader">Typedef Documentation</h2>
+<a id="af206e37bc077be6083853fd8365b999a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af206e37bc077be6083853fd8365b999a">&#9670;&nbsp;</a></span>ACLMemManagerOnDemand</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#af206e37bc077be6083853fd8365b999a">ACLMemManagerOnDemand</a> = std::shared_ptr&lt;arm_compute::MemoryManagerOnDemand&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_fully_connected_workload_8cpp_source.xhtml#l00022">22</a> of file <a class="el" href="_neon_fully_connected_workload_8cpp_source.xhtml">NeonFullyConnectedWorkload.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a2a5caf3721af872f43c7642fec9449bc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2a5caf3721af872f43c7642fec9449bc">&#9670;&nbsp;</a></span>AdditionalInfoObjectPtr</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a2a5caf3721af872f43c7642fec9449bc">AdditionalInfoObjectPtr</a> = std::shared_ptr&lt;void&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layer_8hpp_source.xhtml#l00213">213</a> of file <a class="el" href="_layer_8hpp_source.xhtml">Layer.hpp</a>.</p>
+
+</div>
+</div>
+<a id="aa9c506b558b8aa33a228b15164f40dc3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa9c506b558b8aa33a228b15164f40dc3">&#9670;&nbsp;</a></span>BackendCapabilities</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#aa9c506b558b8aa33a228b15164f40dc3">BackendCapabilities</a> = <a class="el" href="structarmnn_1_1_backend_options.xhtml">BackendOptions</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_backend_options_8hpp_source.xhtml#l00019">19</a> of file <a class="el" href="_backend_options_8hpp_source.xhtml">BackendOptions.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a1854d9cda81304325664363c1fd0fb27"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1854d9cda81304325664363c1fd0fb27">&#9670;&nbsp;</a></span>BackendIdSet</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a1854d9cda81304325664363c1fd0fb27">BackendIdSet</a> = std::unordered_set&lt;<a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_backend_id_8hpp_source.xhtml#l00193">193</a> of file <a class="el" href="_backend_id_8hpp_source.xhtml">BackendId.hpp</a>.</p>
+
+</div>
+</div>
+<a id="ac858d91eedb7b4dba1bcd0aa760ab510"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac858d91eedb7b4dba1bcd0aa760ab510">&#9670;&nbsp;</a></span>BackendIdVector</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#ac858d91eedb7b4dba1bcd0aa760ab510">BackendIdVector</a> = std::vector&lt;<a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_backend_id_8hpp_source.xhtml#l00192">192</a> of file <a class="el" href="_backend_id_8hpp_source.xhtml">BackendId.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a9173495a61a0092b5f38b855f02c3585"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9173495a61a0092b5f38b855f02c3585">&#9670;&nbsp;</a></span>BackendsMap</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a> = std::map&lt;<a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a>, std::unique_ptr&lt;class <a class="el" href="classarmnn_1_1_i_backend_internal.xhtml">IBackendInternal</a>&gt; &gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_network_8hpp_source.xhtml#l00287">287</a> of file <a class="el" href="_network_8hpp_source.xhtml">Network.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a20d2055c37fedf3f39db9facf2c8c697"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a20d2055c37fedf3f39db9facf2c8c697">&#9670;&nbsp;</a></span>BaseFloat32ComparisonWorkload</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a20d2055c37fedf3f39db9facf2c8c697">BaseFloat32ComparisonWorkload</a> = <a class="el" href="classarmnn_1_1_multi_typed_workload.xhtml">MultiTypedWorkload</a>&lt;<a class="el" href="structarmnn_1_1_queue_descriptor.xhtml">QueueDescriptor</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">armnn::DataType::Boolean</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="include_2armnn_2backends_2_workload_8hpp_source.xhtml#l00206">206</a> of file <a class="el" href="include_2armnn_2backends_2_workload_8hpp_source.xhtml">Workload.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a9cbc0957cf0637cc3fd9702086117cc0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9cbc0957cf0637cc3fd9702086117cc0">&#9670;&nbsp;</a></span>BaseUint8ComparisonWorkload</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a9cbc0957cf0637cc3fd9702086117cc0">BaseUint8ComparisonWorkload</a> = <a class="el" href="classarmnn_1_1_multi_typed_workload.xhtml">MultiTypedWorkload</a>&lt;<a class="el" href="structarmnn_1_1_queue_descriptor.xhtml">QueueDescriptor</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">armnn::DataType::QAsymmU8</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">armnn::DataType::Boolean</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="include_2armnn_2backends_2_workload_8hpp_source.xhtml#l00211">211</a> of file <a class="el" href="include_2armnn_2backends_2_workload_8hpp_source.xhtml">Workload.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a96b023ab3b395df841cc706f77c236cc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a96b023ab3b395df841cc706f77c236cc">&#9670;&nbsp;</a></span>BFloat16ToFloat32Workload</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a96b023ab3b395df841cc706f77c236cc">BFloat16ToFloat32Workload</a> = <a class="el" href="classarmnn_1_1_multi_typed_workload.xhtml">MultiTypedWorkload</a>&lt;<a class="el" href="structarmnn_1_1_queue_descriptor.xhtml">QueueDescriptor</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">armnn::DataType::BFloat16</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="include_2armnn_2backends_2_workload_8hpp_source.xhtml#l00216">216</a> of file <a class="el" href="include_2armnn_2backends_2_workload_8hpp_source.xhtml">Workload.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a280670a263dc4fd40491f6d0a2737f44"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a280670a263dc4fd40491f6d0a2737f44">&#9670;&nbsp;</a></span>BindingPointInfo</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a280670a263dc4fd40491f6d0a2737f44">BindingPointInfo</a> = std::pair&lt;<a class="el" href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">armnn::LayerBindingId</a>, <a class="el" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tensor_8hpp_source.xhtml#l00274">274</a> of file <a class="el" href="_tensor_8hpp_source.xhtml">Tensor.hpp</a>.</p>
+
+</div>
+</div>
+<a id="ab539ef5a0c152536da71c8fcc065efb5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab539ef5a0c152536da71c8fcc065efb5">&#9670;&nbsp;</a></span>BooleanWorkload</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#ab539ef5a0c152536da71c8fcc065efb5">BooleanWorkload</a> = <a class="el" href="classarmnn_1_1_typed_workload.xhtml">TypedWorkload</a>&lt;<a class="el" href="structarmnn_1_1_queue_descriptor.xhtml">QueueDescriptor</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">armnn::DataType::Boolean</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="include_2armnn_2backends_2_workload_8hpp_source.xhtml#l00201">201</a> of file <a class="el" href="include_2armnn_2backends_2_workload_8hpp_source.xhtml">Workload.hpp</a>.</p>
+
+</div>
+</div>
+<a id="af244057f8225833d8e9dc03949a6f0a2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af244057f8225833d8e9dc03949a6f0a2">&#9670;&nbsp;</a></span>CompiledBlobDeleter</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef std::function&lt; void(const void *)&gt; <a class="el" href="namespacearmnn.xhtml#af244057f8225833d8e9dc03949a6f0a2">CompiledBlobDeleter</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_i_network_8hpp_source.xhtml#l00244">244</a> of file <a class="el" href="_i_network_8hpp_source.xhtml">INetwork.hpp</a>.</p>
+
+</div>
+</div>
+<a id="af362583b7b4c471c434cb0fdb86c2ae2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af362583b7b4c471c434cb0fdb86c2ae2">&#9670;&nbsp;</a></span>CompiledBlobPtr</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef std::unique_ptr&lt; void, <a class="el" href="namespacearmnn.xhtml#af244057f8225833d8e9dc03949a6f0a2">CompiledBlobDeleter</a> &gt; <a class="el" href="namespacearmnn.xhtml#af362583b7b4c471c434cb0fdb86c2ae2">CompiledBlobPtr</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_i_network_8hpp_source.xhtml#l00245">245</a> of file <a class="el" href="_i_network_8hpp_source.xhtml">INetwork.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a7863c179ff92feec660c48ab7b95ae55"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7863c179ff92feec660c48ab7b95ae55">&#9670;&nbsp;</a></span>ConcatDescriptor</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a7863c179ff92feec660c48ab7b95ae55">ConcatDescriptor</a> = <a class="el" href="structarmnn_1_1_origins_descriptor.xhtml">OriginsDescriptor</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_descriptors_fwd_8hpp_source.xhtml#l00055">55</a> of file <a class="el" href="_descriptors_fwd_8hpp_source.xhtml">DescriptorsFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="ac6e86c1def7f674d3c4cb7f577874aa6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac6e86c1def7f674d3c4cb7f577874aa6">&#9670;&nbsp;</a></span>Coordinates</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">Coordinates</a> = std::array&lt;unsigned int, <a class="el" href="namespacearmnn.xhtml#abdcd184ed3bd648bb31d385040cafd5d">MaxNumOfTensorDimensions</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_internal_types_8hpp_source.xhtml#l00015">15</a> of file <a class="el" href="_internal_types_8hpp_source.xhtml">InternalTypes.hpp</a>.</p>
+
+</div>
+</div>
+<a id="afda19bd482bb55233fe27b4c2e044a3d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afda19bd482bb55233fe27b4c2e044a3d">&#9670;&nbsp;</a></span>CopyAndImportFactoryPairs</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#afda19bd482bb55233fe27b4c2e044a3d">CopyAndImportFactoryPairs</a> = std::map&lt;<a class="el" href="classarmnn_1_1_i_tensor_handle_factory.xhtml#a32f4aa6a7089d877af08928139c2c277">ITensorHandleFactory::FactoryId</a>, <a class="el" href="classarmnn_1_1_i_tensor_handle_factory.xhtml#a32f4aa6a7089d877af08928139c2c277">ITensorHandleFactory::FactoryId</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tensor_handle_factory_registry_8hpp_source.xhtml#l00019">19</a> of file <a class="el" href="_tensor_handle_factory_registry_8hpp_source.xhtml">TensorHandleFactoryRegistry.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a15f3ad9b5e4e3d46b0a6dda246a7bc28"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a15f3ad9b5e4e3d46b0a6dda246a7bc28">&#9670;&nbsp;</a></span>DebugCallbackFunction</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a15f3ad9b5e4e3d46b0a6dda246a7bc28">DebugCallbackFunction</a> = std::function&lt;void(<a class="el" href="namespacearmnn.xhtml#afad4088a9a058114ee5f87246f87bf49">LayerGuid</a> guid, unsigned int slotIndex, <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a>* tensorHandle)&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Define the type of callback for the Debug layer to call. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">guid</td><td>- guid of layer connected to the input of the Debug layer </td></tr>
+ <tr><td class="paramname">slotIndex</td><td>- index of the output slot connected to the input of the Debug layer </td></tr>
+ <tr><td class="paramname">tensorHandle</td><td>- <a class="el" href="classarmnn_1_1_tensor_handle.xhtml">TensorHandle</a> for the input tensor to the Debug layer </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00371">371</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a3647f60510bc8ddaced01c51b0ee8714"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3647f60510bc8ddaced01c51b0ee8714">&#9670;&nbsp;</a></span>DepthToSpaceDescriptor</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef <a class="el" href="structarmnn_1_1_space_to_depth_descriptor.xhtml">SpaceToDepthDescriptor</a> <a class="el" href="namespacearmnn.xhtml#a3647f60510bc8ddaced01c51b0ee8714">DepthToSpaceDescriptor</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>A DepthToSpaceDescriptor for the <a class="el" href="classarmnn_1_1_depth_to_space_layer.xhtml" title="This layer represents a DepthToSpace operation. ">DepthToSpaceLayer</a>. </p>
+
+<p class="definition">Definition at line <a class="el" href="_descriptors_8hpp_source.xhtml#l01075">1075</a> of file <a class="el" href="_descriptors_8hpp_source.xhtml">Descriptors.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a293695a94110c1a0eb77e29c22dce79a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a293695a94110c1a0eb77e29c22dce79a">&#9670;&nbsp;</a></span>Dimensions</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a293695a94110c1a0eb77e29c22dce79a">Dimensions</a> = std::array&lt;unsigned int, <a class="el" href="namespacearmnn.xhtml#abdcd184ed3bd648bb31d385040cafd5d">MaxNumOfTensorDimensions</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_internal_types_8hpp_source.xhtml#l00016">16</a> of file <a class="el" href="_internal_types_8hpp_source.xhtml">InternalTypes.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a754d43dc24a0fe36ecb3044d8f13a413"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a754d43dc24a0fe36ecb3044d8f13a413">&#9670;&nbsp;</a></span>DynamicBackendPtr</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a754d43dc24a0fe36ecb3044d8f13a413">DynamicBackendPtr</a> = std::unique_ptr&lt;<a class="el" href="classarmnn_1_1_dynamic_backend.xhtml">DynamicBackend</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="include_2armnn_2backends_2_dynamic_backend_8hpp_source.xhtml#l00052">52</a> of file <a class="el" href="include_2armnn_2backends_2_dynamic_backend_8hpp_source.xhtml">DynamicBackend.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a947e07902b1b5d98b57eeae34053146b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a947e07902b1b5d98b57eeae34053146b">&#9670;&nbsp;</a></span>FactoryId</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef <a class="el" href="classarmnn_1_1_i_tensor_handle_factory.xhtml#a32f4aa6a7089d877af08928139c2c277">ITensorHandleFactory::FactoryId</a> <a class="el" href="namespacearmnn.xhtml#a947e07902b1b5d98b57eeae34053146b">FactoryId</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_mock_tensor_handle_factory_8cpp_source.xhtml#l00012">12</a> of file <a class="el" href="_mock_tensor_handle_factory_8cpp_source.xhtml">MockTensorHandleFactory.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a827d59b5a779a8089017802172817f3c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a827d59b5a779a8089017802172817f3c">&#9670;&nbsp;</a></span>Float16ToFloat32Workload</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a827d59b5a779a8089017802172817f3c">Float16ToFloat32Workload</a> = <a class="el" href="classarmnn_1_1_multi_typed_workload.xhtml">MultiTypedWorkload</a>&lt;<a class="el" href="structarmnn_1_1_queue_descriptor.xhtml">QueueDescriptor</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">armnn::DataType::Float16</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="include_2armnn_2backends_2_workload_8hpp_source.xhtml#l00226">226</a> of file <a class="el" href="include_2armnn_2backends_2_workload_8hpp_source.xhtml">Workload.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a6ef601b454db749320636d9425b1f4c2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6ef601b454db749320636d9425b1f4c2">&#9670;&nbsp;</a></span>Float32ToBFloat16Workload</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a6ef601b454db749320636d9425b1f4c2">Float32ToBFloat16Workload</a> = <a class="el" href="classarmnn_1_1_multi_typed_workload.xhtml">MultiTypedWorkload</a>&lt;<a class="el" href="structarmnn_1_1_queue_descriptor.xhtml">QueueDescriptor</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">armnn::DataType::BFloat16</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="include_2armnn_2backends_2_workload_8hpp_source.xhtml#l00221">221</a> of file <a class="el" href="include_2armnn_2backends_2_workload_8hpp_source.xhtml">Workload.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a6486138451112140f98516c0bee18615"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6486138451112140f98516c0bee18615">&#9670;&nbsp;</a></span>Float32ToFloat16Workload</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a6486138451112140f98516c0bee18615">Float32ToFloat16Workload</a> = <a class="el" href="classarmnn_1_1_multi_typed_workload.xhtml">MultiTypedWorkload</a>&lt;<a class="el" href="structarmnn_1_1_queue_descriptor.xhtml">QueueDescriptor</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">armnn::DataType::Float16</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="include_2armnn_2backends_2_workload_8hpp_source.xhtml#l00231">231</a> of file <a class="el" href="include_2armnn_2backends_2_workload_8hpp_source.xhtml">Workload.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a0493144f15b35804a133c9aa0b63fcc9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0493144f15b35804a133c9aa0b63fcc9">&#9670;&nbsp;</a></span>Float32Workload</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a0493144f15b35804a133c9aa0b63fcc9">Float32Workload</a> = <a class="el" href="classarmnn_1_1_typed_workload.xhtml">TypedWorkload</a>&lt;<a class="el" href="structarmnn_1_1_queue_descriptor.xhtml">QueueDescriptor</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="include_2armnn_2backends_2_workload_8hpp_source.xhtml#l00192">192</a> of file <a class="el" href="include_2armnn_2backends_2_workload_8hpp_source.xhtml">Workload.hpp</a>.</p>
+
+</div>
+</div>
+<a id="abaedcfd0ae08790c03bfe8ba7586dd84"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abaedcfd0ae08790c03bfe8ba7586dd84">&#9670;&nbsp;</a></span>FloatWorkload</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#abaedcfd0ae08790c03bfe8ba7586dd84">FloatWorkload</a> = <a class="el" href="classarmnn_1_1_typed_workload.xhtml">TypedWorkload</a>&lt;<a class="el" href="structarmnn_1_1_queue_descriptor.xhtml">QueueDescriptor</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">armnn::DataType::Float16</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="include_2armnn_2backends_2_workload_8hpp_source.xhtml#l00189">189</a> of file <a class="el" href="include_2armnn_2backends_2_workload_8hpp_source.xhtml">Workload.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a0f38fa92b2468d5378258a2b074c1a31"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0f38fa92b2468d5378258a2b074c1a31">&#9670;&nbsp;</a></span>Half</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a0f38fa92b2468d5378258a2b074c1a31">Half</a> = half_float::half</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_half_8hpp_source.xhtml#l00018">18</a> of file <a class="el" href="_half_8hpp_source.xhtml">Half.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a4b3cb628c15e1eea1b09ec848e9ae8c4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4b3cb628c15e1eea1b09ec848e9ae8c4">&#9670;&nbsp;</a></span>HighResolutionClock</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a4b3cb628c15e1eea1b09ec848e9ae8c4">HighResolutionClock</a> = std::chrono::high_resolution_clock::time_point</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Define a timer and associated inference ID for recording execution times. </p>
+
+<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00374">374</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a65a0ad0a7b807e70295481a7b9cb93ac"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a65a0ad0a7b807e70295481a7b9cb93ac">&#9670;&nbsp;</a></span>IBackendContextUniquePtr</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a65a0ad0a7b807e70295481a7b9cb93ac">IBackendContextUniquePtr</a> = std::unique_ptr&lt;<a class="el" href="classarmnn_1_1_i_backend_context.xhtml">IBackendContext</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="include_2armnn_2backends_2_i_backend_context_8hpp_source.xhtml#l00034">34</a> of file <a class="el" href="include_2armnn_2backends_2_i_backend_context_8hpp_source.xhtml">IBackendContext.hpp</a>.</p>
+
+</div>
+</div>
+<a id="ade0af9dacaa52cafdd701bef2e901c77"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ade0af9dacaa52cafdd701bef2e901c77">&#9670;&nbsp;</a></span>IBackendInternalUniquePtr</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_i_backend_internal.xhtml">IBackendInternal</a> &gt; <a class="el" href="namespacearmnn.xhtml#ade0af9dacaa52cafdd701bef2e901c77">IBackendInternalUniquePtr</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_backend_registry_8hpp_source.xhtml#l00026">26</a> of file <a class="el" href="_backend_registry_8hpp_source.xhtml">BackendRegistry.hpp</a>.</p>
+
+</div>
+</div>
+<a id="ae18caa7ee6287aa7f8c2a5ce6bc92382"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae18caa7ee6287aa7f8c2a5ce6bc92382">&#9670;&nbsp;</a></span>IBackendSharedPtr</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#ae18caa7ee6287aa7f8c2a5ce6bc92382">IBackendSharedPtr</a> = std::shared_ptr&lt;<a class="el" href="classarmnn_1_1_i_backend.xhtml">IBackend</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00250">250</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a5a665483e56a688e9f8180accdf72d80"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5a665483e56a688e9f8180accdf72d80">&#9670;&nbsp;</a></span>IBackendUniquePtr</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a5a665483e56a688e9f8180accdf72d80">IBackendUniquePtr</a> = std::unique_ptr&lt;<a class="el" href="classarmnn_1_1_i_backend.xhtml">IBackend</a>, void(*)(<a class="el" href="classarmnn_1_1_i_backend.xhtml">IBackend</a>* backend)&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00251">251</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a2d3a708a26ac6d77bf8f15506e89a25a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2d3a708a26ac6d77bf8f15506e89a25a">&#9670;&nbsp;</a></span>IGpuAccTunedParametersPtr</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a2d3a708a26ac6d77bf8f15506e89a25a">IGpuAccTunedParametersPtr</a> = std::shared_ptr&lt;<a class="el" href="classarmnn_1_1_i_gpu_acc_tuned_parameters.xhtml">IGpuAccTunedParameters</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>The following API is replaced by the backend options API. </p>
+
+<p class="definition">Definition at line <a class="el" href="_i_runtime_8hpp_source.xhtml#l00293">293</a> of file <a class="el" href="_i_runtime_8hpp_source.xhtml">IRuntime.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a11fa919c11fe46aad613b2e960fcfe90"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a11fa919c11fe46aad613b2e960fcfe90">&#9670;&nbsp;</a></span>ILayerSupportSharedPtr</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a11fa919c11fe46aad613b2e960fcfe90">ILayerSupportSharedPtr</a> = std::shared_ptr&lt;<a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_i_layer_support_8hpp_source.xhtml#l00572">572</a> of file <a class="el" href="_i_layer_support_8hpp_source.xhtml">ILayerSupport.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a12bff6d51d63dac1375c89bc8415dc46"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a12bff6d51d63dac1375c89bc8415dc46">&#9670;&nbsp;</a></span>IMemoryManagerUniquePtr</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a12bff6d51d63dac1375c89bc8415dc46">IMemoryManagerUniquePtr</a> = std::unique_ptr&lt;<a class="el" href="classarmnn_1_1_i_memory_manager.xhtml">IMemoryManager</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="include_2armnn_2backends_2_i_memory_manager_8hpp_source.xhtml#l00024">24</a> of file <a class="el" href="include_2armnn_2backends_2_i_memory_manager_8hpp_source.xhtml">IMemoryManager.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a1c5ec805688cb558465a82a8d9f56a90"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1c5ec805688cb558465a82a8d9f56a90">&#9670;&nbsp;</a></span>ImportedInputId</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a1c5ec805688cb558465a82a8d9f56a90">ImportedInputId</a> = unsigned int</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00278">278</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
+
+</div>
+</div>
+<a id="ac68a434f0e78e33726bfb22a39ec813f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac68a434f0e78e33726bfb22a39ec813f">&#9670;&nbsp;</a></span>ImportedOutputId</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#ac68a434f0e78e33726bfb22a39ec813f">ImportedOutputId</a> = unsigned int</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00279">279</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
+
+</div>
+</div>
+<a id="ace74f6f9feb95a964a49d79458232703"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ace74f6f9feb95a964a49d79458232703">&#9670;&nbsp;</a></span>INetworkPtr</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#ace74f6f9feb95a964a49d79458232703">INetworkPtr</a> = std::unique_ptr&lt;<a class="el" href="classarmnn_1_1_i_network.xhtml">INetwork</a>, void(*)(<a class="el" href="classarmnn_1_1_i_network.xhtml">INetwork</a>* network)&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_i_network_8hpp_source.xhtml#l00241">241</a> of file <a class="el" href="_i_network_8hpp_source.xhtml">INetwork.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a51611ed886390df47733157d0c105453"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a51611ed886390df47733157d0c105453">&#9670;&nbsp;</a></span>InferenceTimingPair</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a51611ed886390df47733157d0c105453">InferenceTimingPair</a> = std::pair&lt;<a class="el" href="namespacearmnn.xhtml#a4b3cb628c15e1eea1b09ec848e9ae8c4">HighResolutionClock</a>, <a class="el" href="namespacearmnn.xhtml#a4b3cb628c15e1eea1b09ec848e9ae8c4">HighResolutionClock</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00375">375</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a2231ac018fe2c465f2d42fef597d67e7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2231ac018fe2c465f2d42fef597d67e7">&#9670;&nbsp;</a></span>InputQueueDescriptor</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a2231ac018fe2c465f2d42fef597d67e7">InputQueueDescriptor</a> = <a class="el" href="structarmnn_1_1_mem_copy_queue_descriptor.xhtml">MemCopyQueueDescriptor</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="include_2armnn_2backends_2_workload_data_8hpp_source.xhtml#l00079">79</a> of file <a class="el" href="include_2armnn_2backends_2_workload_data_8hpp_source.xhtml">WorkloadData.hpp</a>.</p>
+
+</div>
+</div>
+<a id="aa01bce88f89975a5a031db4cc8861527"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa01bce88f89975a5a031db4cc8861527">&#9670;&nbsp;</a></span>InputTensors</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#aa01bce88f89975a5a031db4cc8861527">InputTensors</a> = std::vector&lt;std::pair&lt;<a class="el" href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">LayerBindingId</a>, class <a class="el" href="classarmnn_1_1_const_tensor.xhtml">ConstTensor</a>&gt; &gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tensor_8hpp_source.xhtml#l00392">392</a> of file <a class="el" href="_tensor_8hpp_source.xhtml">Tensor.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a546bd17050a4147165f295e365d56171"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a546bd17050a4147165f295e365d56171">&#9670;&nbsp;</a></span>instead</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef <a class="el" href="classarmnn_1_1_const_passthrough_tensor_handle.xhtml">ConstPassthroughTensorHandle</a> <a class="el" href="namespacearmnn.xhtml#a546bd17050a4147165f295e365d56171">instead</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="include_2armnn_2backends_2_tensor_handle_8hpp_source.xhtml#l00255">255</a> of file <a class="el" href="include_2armnn_2backends_2_tensor_handle_8hpp_source.xhtml">TensorHandle.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a3e4b88b993c90b274e0bd268c35d798e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3e4b88b993c90b274e0bd268c35d798e">&#9670;&nbsp;</a></span>Int32Workload</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a3e4b88b993c90b274e0bd268c35d798e">Int32Workload</a> = <a class="el" href="classarmnn_1_1_typed_workload.xhtml">TypedWorkload</a>&lt;<a class="el" href="structarmnn_1_1_queue_descriptor.xhtml">QueueDescriptor</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">armnn::DataType::Signed32</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="include_2armnn_2backends_2_workload_8hpp_source.xhtml#l00198">198</a> of file <a class="el" href="include_2armnn_2backends_2_workload_8hpp_source.xhtml">Workload.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a674efcf6cbdb9e831d653ff0e821fb38"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a674efcf6cbdb9e831d653ff0e821fb38">&#9670;&nbsp;</a></span>IOptimizedNetworkPtr</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a674efcf6cbdb9e831d653ff0e821fb38">IOptimizedNetworkPtr</a> = std::unique_ptr&lt;<a class="el" href="classarmnn_1_1_i_optimized_network.xhtml">IOptimizedNetwork</a>, void(*)(<a class="el" href="classarmnn_1_1_i_optimized_network.xhtml">IOptimizedNetwork</a>* network)&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_i_network_8hpp_source.xhtml#l00242">242</a> of file <a class="el" href="_i_network_8hpp_source.xhtml">INetwork.hpp</a>.</p>
+
+</div>
+</div>
+<a id="af55a349b17603163f3dc948928501c00"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af55a349b17603163f3dc948928501c00">&#9670;&nbsp;</a></span>IReportStructure</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="classarmnn_1_1profiling_1_1_i_report_structure.xhtml">IReportStructure</a> = <a class="el" href="classarmnn_1_1profiling_1_1_i_report_structure.xhtml">profiling::IReportStructure</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_runtime_8hpp_source.xhtml#l00028">28</a> of file <a class="el" href="_runtime_8hpp_source.xhtml">Runtime.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a150468a02bd7b2d2d061c4aaaee939f0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a150468a02bd7b2d2d061c4aaaee939f0">&#9670;&nbsp;</a></span>IRuntimePtr</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a150468a02bd7b2d2d061c4aaaee939f0">IRuntimePtr</a> = std::unique_ptr&lt;<a class="el" href="classarmnn_1_1_i_runtime.xhtml">IRuntime</a>, void(*)(<a class="el" href="classarmnn_1_1_i_runtime.xhtml">IRuntime</a>* runtime)&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_i_runtime_8hpp_source.xhtml#l00031">31</a> of file <a class="el" href="_i_runtime_8hpp_source.xhtml">IRuntime.hpp</a>.</p>
+
+</div>
+</div>
+<a id="ab8cf8f9fb6792e654c2d8d8382f6f01b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab8cf8f9fb6792e654c2d8d8382f6f01b">&#9670;&nbsp;</a></span>LayerBindingId</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">LayerBindingId</a> = int</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Type of identifiers for bindable layers (inputs, outputs). </p>
+
+<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00277">277</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
+
+</div>
+</div>
+<a id="afad4088a9a058114ee5f87246f87bf49"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afad4088a9a058114ee5f87246f87bf49">&#9670;&nbsp;</a></span>LayerGuid</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#afad4088a9a058114ee5f87246f87bf49">LayerGuid</a> = profiling::ProfilingGuid</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Define LayerGuid type. </p>
+
+<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00363">363</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a419086ecb4dc9d0f9e5d8933c87e2ea2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a419086ecb4dc9d0f9e5d8933c87e2ea2">&#9670;&nbsp;</a></span>LayerPriority</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a419086ecb4dc9d0f9e5d8933c87e2ea2">LayerPriority</a> = unsigned int</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layer_8hpp_source.xhtml#l00212">212</a> of file <a class="el" href="_layer_8hpp_source.xhtml">Layer.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a6b5db6cc9aad8ec0ac7b14f859aacdab"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6b5db6cc9aad8ec0ac7b14f859aacdab">&#9670;&nbsp;</a></span>LayerTypeOf</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a6b5db6cc9aad8ec0ac7b14f859aacdab">LayerTypeOf</a> = typename <a class="el" href="structarmnn_1_1_layer_type_of_impl.xhtml">LayerTypeOfImpl</a>&lt;Type&gt;::Type</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00089">89</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a12f6b97ee3f1060ecb6240e022678a8b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a12f6b97ee3f1060ecb6240e022678a8b">&#9670;&nbsp;</a></span>LoadedNetworks</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a12f6b97ee3f1060ecb6240e022678a8b">LoadedNetworks</a> = std::unordered_map&lt;<a class="el" href="namespacearmnn.xhtml#a0d8160388a127c1a23b37bc88dc6e2ec">NetworkId</a>, std::unique_ptr&lt;<a class="el" href="classarmnn_1_1_loaded_network.xhtml">LoadedNetwork</a>&gt; &gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_runtime_8hpp_source.xhtml#l00027">27</a> of file <a class="el" href="_runtime_8hpp_source.xhtml">Runtime.hpp</a>.</p>
+
+</div>
+</div>
+<a id="ac14705405cbcdd580df613de6766fe65"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac14705405cbcdd580df613de6766fe65">&#9670;&nbsp;</a></span>LogSoftmaxDescriptor</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef <a class="el" href="structarmnn_1_1_softmax_descriptor.xhtml">SoftmaxDescriptor</a> <a class="el" href="namespacearmnn.xhtml#ac14705405cbcdd580df613de6766fe65">LogSoftmaxDescriptor</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>A LogSoftmaxDescriptor for the <a class="el" href="classarmnn_1_1_log_softmax_layer.xhtml" title="This layer represents a log softmax operation. ">LogSoftmaxLayer</a>. </p>
+
+<p class="definition">Definition at line <a class="el" href="_descriptors_8hpp_source.xhtml#l00169">169</a> of file <a class="el" href="_descriptors_8hpp_source.xhtml">Descriptors.hpp</a>.</p>
+
+</div>
+</div>
+<a id="abb25db39e8d7f30b3736701b65ce514b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abb25db39e8d7f30b3736701b65ce514b">&#9670;&nbsp;</a></span>MemoryOptimizerStrategiesMapRef</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#abb25db39e8d7f30b3736701b65ce514b">MemoryOptimizerStrategiesMapRef</a> = std::unordered_map&lt;<a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a>, std::shared_ptr&lt;<a class="el" href="classarmnn_1_1_i_memory_optimizer_strategy.xhtml">IMemoryOptimizerStrategy</a>&gt; &gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_backend_registry_8hpp_source.xhtml#l00027">27</a> of file <a class="el" href="_backend_registry_8hpp_source.xhtml">BackendRegistry.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a5b05f3b7208ec7cea3338e30057c0bac"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5b05f3b7208ec7cea3338e30057c0bac">&#9670;&nbsp;</a></span>MemorySourceFlags</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a5b05f3b7208ec7cea3338e30057c0bac">MemorySourceFlags</a> = unsigned int</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_memory_sources_8hpp_source.xhtml#l00015">15</a> of file <a class="el" href="_memory_sources_8hpp_source.xhtml">MemorySources.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a003d213dd28b0b8c0f26fbf268ccb975"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a003d213dd28b0b8c0f26fbf268ccb975">&#9670;&nbsp;</a></span>MergerDescriptor</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a003d213dd28b0b8c0f26fbf268ccb975">MergerDescriptor</a> = <a class="el" href="structarmnn_1_1_origins_descriptor.xhtml">OriginsDescriptor</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>MergerDescriptor is deprecated, use ConcatDescriptor instead. </p>
+
+<p class="definition">Definition at line <a class="el" href="_descriptors_fwd_8hpp_source.xhtml#l00059">59</a> of file <a class="el" href="_descriptors_fwd_8hpp_source.xhtml">DescriptorsFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a308ba160745ba35e1de8d698d0139eb4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a308ba160745ba35e1de8d698d0139eb4">&#9670;&nbsp;</a></span>MergerQueueDescriptor</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a308ba160745ba35e1de8d698d0139eb4">MergerQueueDescriptor</a> = <a class="el" href="structarmnn_1_1_concat_queue_descriptor.xhtml">ConcatQueueDescriptor</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="include_2armnn_2backends_2_workload_data_8hpp_source.xhtml#l00137">137</a> of file <a class="el" href="include_2armnn_2backends_2_workload_data_8hpp_source.xhtml">WorkloadData.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a5b6893cda5b69359a4244c06054da18f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5b6893cda5b69359a4244c06054da18f">&#9670;&nbsp;</a></span>ModelOptions</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a5b6893cda5b69359a4244c06054da18f">ModelOptions</a> = std::vector&lt;<a class="el" href="structarmnn_1_1_backend_options.xhtml">BackendOptions</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_backend_options_8hpp_source.xhtml#l00018">18</a> of file <a class="el" href="_backend_options_8hpp_source.xhtml">BackendOptions.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a0d8160388a127c1a23b37bc88dc6e2ec"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0d8160388a127c1a23b37bc88dc6e2ec">&#9670;&nbsp;</a></span>NetworkId</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef int <a class="el" href="namespacearmnn.xhtml#a0d8160388a127c1a23b37bc88dc6e2ec">NetworkId</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_i_runtime_8hpp_source.xhtml#l00025">25</a> of file <a class="el" href="_i_runtime_8hpp_source.xhtml">IRuntime.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a08eb5e20e6b0ce43c5729e8f88b6a910"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a08eb5e20e6b0ce43c5729e8f88b6a910">&#9670;&nbsp;</a></span>NetworkImplPtr</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a08eb5e20e6b0ce43c5729e8f88b6a910">NetworkImplPtr</a> = std::unique_ptr&lt;<a class="el" href="classarmnn_1_1_network_impl.xhtml">NetworkImpl</a>, void (*)(<a class="el" href="classarmnn_1_1_network_impl.xhtml">NetworkImpl</a>* network)&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_network_8hpp_source.xhtml#l00028">28</a> of file <a class="el" href="_network_8hpp_source.xhtml">Network.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a4de71c3661093e5c4ae7775114f43413"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4de71c3661093e5c4ae7775114f43413">&#9670;&nbsp;</a></span>NetworkOptions</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a4de71c3661093e5c4ae7775114f43413">NetworkOptions</a> = std::vector&lt;<a class="el" href="structarmnn_1_1_backend_options.xhtml">BackendOptions</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_backend_options_8hpp_source.xhtml#l00016">16</a> of file <a class="el" href="_backend_options_8hpp_source.xhtml">BackendOptions.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a37a1a6b381ccc76df203fee023234996"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a37a1a6b381ccc76df203fee023234996">&#9670;&nbsp;</a></span>OutputQueueDescriptor</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a37a1a6b381ccc76df203fee023234996">OutputQueueDescriptor</a> = <a class="el" href="structarmnn_1_1_mem_copy_queue_descriptor.xhtml">MemCopyQueueDescriptor</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="include_2armnn_2backends_2_workload_data_8hpp_source.xhtml#l00080">80</a> of file <a class="el" href="include_2armnn_2backends_2_workload_data_8hpp_source.xhtml">WorkloadData.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a8f091a512915d1cb29a4ebf13dfc53ea"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8f091a512915d1cb29a4ebf13dfc53ea">&#9670;&nbsp;</a></span>OutputTensors</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a8f091a512915d1cb29a4ebf13dfc53ea">OutputTensors</a> = std::vector&lt;std::pair&lt;<a class="el" href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">LayerBindingId</a>, class <a class="el" href="classarmnn_1_1_tensor.xhtml">Tensor</a>&gt; &gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tensor_8hpp_source.xhtml#l00393">393</a> of file <a class="el" href="_tensor_8hpp_source.xhtml">Tensor.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a8c42c6647e31ebe525aeba878d133e45"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8c42c6647e31ebe525aeba878d133e45">&#9670;&nbsp;</a></span>ParameterStringifyFunction</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a8c42c6647e31ebe525aeba878d133e45">ParameterStringifyFunction</a> = std::function&lt;void(const std::string&amp; name, const std::string&amp; value)&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_serialize_layer_parameters_8hpp_source.xhtml#l00014">14</a> of file <a class="el" href="_serialize_layer_parameters_8hpp_source.xhtml">SerializeLayerParameters.hpp</a>.</p>
+
+</div>
+</div>
+<a id="ae73bf7cb78cc552c5511431b0d583f14"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae73bf7cb78cc552c5511431b0d583f14">&#9670;&nbsp;</a></span>PreCompiledObjectDeleter</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#ae73bf7cb78cc552c5511431b0d583f14">PreCompiledObjectDeleter</a> = std::function&lt;void(const void*)&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_pre_compiled_layer_8hpp_source.xhtml#l00019">19</a> of file <a class="el" href="_pre_compiled_layer_8hpp_source.xhtml">PreCompiledLayer.hpp</a>.</p>
+
+</div>
+</div>
+<a id="ae3bff3986cb5a50637c9b3238d821f54"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae3bff3986cb5a50637c9b3238d821f54">&#9670;&nbsp;</a></span>PreCompiledObjectPtr</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#ae3bff3986cb5a50637c9b3238d821f54">PreCompiledObjectPtr</a> = std::unique_ptr&lt;void, <a class="el" href="namespacearmnn.xhtml#ae73bf7cb78cc552c5511431b0d583f14">PreCompiledObjectDeleter</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_pre_compiled_layer_8hpp_source.xhtml#l00020">20</a> of file <a class="el" href="_pre_compiled_layer_8hpp_source.xhtml">PreCompiledLayer.hpp</a>.</p>
+
+</div>
+</div>
+<a id="ad6f30c5f3c1297502d240068d97a25b9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad6f30c5f3c1297502d240068d97a25b9">&#9670;&nbsp;</a></span>RefAdditionWorkload</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#ad6f30c5f3c1297502d240068d97a25b9">RefAdditionWorkload</a> = <a class="el" href="classarmnn_1_1_ref_elementwise_workload.xhtml">RefElementwiseWorkload</a>&lt;std::plus&lt;<a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>&gt;, <a class="el" href="structarmnn_1_1_addition_queue_descriptor.xhtml">AdditionQueueDescriptor</a>, <a class="el" href="structarmnn_1_1_string_mapping.xhtml#a4e7b349a05a558fa6792c71c11a6bf11a5b84f797c82a1ad494549330af517ad5">StringMapping::RefAdditionWorkload_Execute</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ref_elementwise_workload_8hpp_source.xhtml#l00040">40</a> of file <a class="el" href="_ref_elementwise_workload_8hpp_source.xhtml">RefElementwiseWorkload.hpp</a>.</p>
+
+</div>
+</div>
+<a id="ab51075960a6cf82a8bb6ee81c9efa97d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab51075960a6cf82a8bb6ee81c9efa97d">&#9670;&nbsp;</a></span>RefDebugBFloat16Workload</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#ab51075960a6cf82a8bb6ee81c9efa97d">RefDebugBFloat16Workload</a> = <a class="el" href="classarmnn_1_1_ref_debug_workload.xhtml">RefDebugWorkload</a>&lt;<a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ref_debug_workload_8hpp_source.xhtml#l00042">42</a> of file <a class="el" href="_ref_debug_workload_8hpp_source.xhtml">RefDebugWorkload.hpp</a>.</p>
+
+</div>
+</div>
+<a id="ac8d7aa6e66fb59a839833b160f619228"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac8d7aa6e66fb59a839833b160f619228">&#9670;&nbsp;</a></span>RefDebugFloat16Workload</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#ac8d7aa6e66fb59a839833b160f619228">RefDebugFloat16Workload</a> = <a class="el" href="classarmnn_1_1_ref_debug_workload.xhtml">RefDebugWorkload</a>&lt;<a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ref_debug_workload_8hpp_source.xhtml#l00043">43</a> of file <a class="el" href="_ref_debug_workload_8hpp_source.xhtml">RefDebugWorkload.hpp</a>.</p>
+
+</div>
+</div>
+<a id="ad194629946077375dcce05b2449334c8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad194629946077375dcce05b2449334c8">&#9670;&nbsp;</a></span>RefDebugFloat32Workload</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#ad194629946077375dcce05b2449334c8">RefDebugFloat32Workload</a> = <a class="el" href="classarmnn_1_1_ref_debug_workload.xhtml">RefDebugWorkload</a>&lt;<a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ref_debug_workload_8hpp_source.xhtml#l00044">44</a> of file <a class="el" href="_ref_debug_workload_8hpp_source.xhtml">RefDebugWorkload.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a44ab486f2a7728d75bbf52ffa1025ab5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a44ab486f2a7728d75bbf52ffa1025ab5">&#9670;&nbsp;</a></span>RefDebugQAsymmS8Workload</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a44ab486f2a7728d75bbf52ffa1025ab5">RefDebugQAsymmS8Workload</a> = <a class="el" href="classarmnn_1_1_ref_debug_workload.xhtml">RefDebugWorkload</a>&lt;<a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ref_debug_workload_8hpp_source.xhtml#l00046">46</a> of file <a class="el" href="_ref_debug_workload_8hpp_source.xhtml">RefDebugWorkload.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a0c1df21c99a094d2f078ca90047a73ff"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0c1df21c99a094d2f078ca90047a73ff">&#9670;&nbsp;</a></span>RefDebugQAsymmU8Workload</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a0c1df21c99a094d2f078ca90047a73ff">RefDebugQAsymmU8Workload</a> = <a class="el" href="classarmnn_1_1_ref_debug_workload.xhtml">RefDebugWorkload</a>&lt;<a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ref_debug_workload_8hpp_source.xhtml#l00045">45</a> of file <a class="el" href="_ref_debug_workload_8hpp_source.xhtml">RefDebugWorkload.hpp</a>.</p>
+
+</div>
+</div>
+<a id="ae6d1d064ec7d33b2cc5bcc8afafbe193"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae6d1d064ec7d33b2cc5bcc8afafbe193">&#9670;&nbsp;</a></span>RefDebugQSymmS16Workload</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#ae6d1d064ec7d33b2cc5bcc8afafbe193">RefDebugQSymmS16Workload</a> = <a class="el" href="classarmnn_1_1_ref_debug_workload.xhtml">RefDebugWorkload</a>&lt;<a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ref_debug_workload_8hpp_source.xhtml#l00047">47</a> of file <a class="el" href="_ref_debug_workload_8hpp_source.xhtml">RefDebugWorkload.hpp</a>.</p>
+
+</div>
+</div>
+<a id="ad607a96fafba334ba5bde946947dd0af"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad607a96fafba334ba5bde946947dd0af">&#9670;&nbsp;</a></span>RefDebugQSymmS8Workload</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#ad607a96fafba334ba5bde946947dd0af">RefDebugQSymmS8Workload</a> = <a class="el" href="classarmnn_1_1_ref_debug_workload.xhtml">RefDebugWorkload</a>&lt;<a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">DataType::QSymmS8</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ref_debug_workload_8hpp_source.xhtml#l00048">48</a> of file <a class="el" href="_ref_debug_workload_8hpp_source.xhtml">RefDebugWorkload.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a2b2b0a60cbb51bf3eb9bd2899aee2c86"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2b2b0a60cbb51bf3eb9bd2899aee2c86">&#9670;&nbsp;</a></span>RefDebugSigned32Workload</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a2b2b0a60cbb51bf3eb9bd2899aee2c86">RefDebugSigned32Workload</a> = <a class="el" href="classarmnn_1_1_ref_debug_workload.xhtml">RefDebugWorkload</a>&lt;<a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">DataType::Signed32</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ref_debug_workload_8hpp_source.xhtml#l00049">49</a> of file <a class="el" href="_ref_debug_workload_8hpp_source.xhtml">RefDebugWorkload.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a49ef5a7147c0b8a89436f1ad110ad2d9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a49ef5a7147c0b8a89436f1ad110ad2d9">&#9670;&nbsp;</a></span>RefDivisionWorkload</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a49ef5a7147c0b8a89436f1ad110ad2d9">RefDivisionWorkload</a> = <a class="el" href="classarmnn_1_1_ref_elementwise_workload.xhtml">RefElementwiseWorkload</a>&lt;std::divides&lt;<a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>&gt;, <a class="el" href="structarmnn_1_1_division_queue_descriptor.xhtml">DivisionQueueDescriptor</a>, <a class="el" href="structarmnn_1_1_string_mapping.xhtml#a4e7b349a05a558fa6792c71c11a6bf11a69485fd6282ca5ed7d50589f8f759645">StringMapping::RefDivisionWorkload_Execute</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ref_elementwise_workload_8hpp_source.xhtml#l00058">58</a> of file <a class="el" href="_ref_elementwise_workload_8hpp_source.xhtml">RefElementwiseWorkload.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a44b17670359a5c896114952e09fcef8d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a44b17670359a5c896114952e09fcef8d">&#9670;&nbsp;</a></span>RefMaximumWorkload</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a44b17670359a5c896114952e09fcef8d">RefMaximumWorkload</a> = <a class="el" href="classarmnn_1_1_ref_elementwise_workload.xhtml">RefElementwiseWorkload</a>&lt;<a class="el" href="structarmnn_1_1maximum.xhtml">armnn::maximum</a>&lt;<a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>&gt;, <a class="el" href="structarmnn_1_1_maximum_queue_descriptor.xhtml">MaximumQueueDescriptor</a>, <a class="el" href="structarmnn_1_1_string_mapping.xhtml#a4e7b349a05a558fa6792c71c11a6bf11aea93564675347f60a80cf699c177a80e">StringMapping::RefMaximumWorkload_Execute</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ref_elementwise_workload_8hpp_source.xhtml#l00064">64</a> of file <a class="el" href="_ref_elementwise_workload_8hpp_source.xhtml">RefElementwiseWorkload.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a9df214231409eff795bf8ebd3f5e65ca"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9df214231409eff795bf8ebd3f5e65ca">&#9670;&nbsp;</a></span>RefMinimumWorkload</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a9df214231409eff795bf8ebd3f5e65ca">RefMinimumWorkload</a> = <a class="el" href="classarmnn_1_1_ref_elementwise_workload.xhtml">RefElementwiseWorkload</a>&lt;<a class="el" href="structarmnn_1_1minimum.xhtml">armnn::minimum</a>&lt;<a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>&gt;, <a class="el" href="structarmnn_1_1_minimum_queue_descriptor.xhtml">MinimumQueueDescriptor</a>, <a class="el" href="structarmnn_1_1_string_mapping.xhtml#a4e7b349a05a558fa6792c71c11a6bf11a9bddcf9777d5ca3ab5e40b3a93559625">StringMapping::RefMinimumWorkload_Execute</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ref_elementwise_workload_8hpp_source.xhtml#l00070">70</a> of file <a class="el" href="_ref_elementwise_workload_8hpp_source.xhtml">RefElementwiseWorkload.hpp</a>.</p>
+
+</div>
+</div>
+<a id="aeff4433507789642f698fe6873ec4619"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aeff4433507789642f698fe6873ec4619">&#9670;&nbsp;</a></span>RefMultiplicationWorkload</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#aeff4433507789642f698fe6873ec4619">RefMultiplicationWorkload</a> = <a class="el" href="classarmnn_1_1_ref_elementwise_workload.xhtml">RefElementwiseWorkload</a>&lt;std::multiplies&lt;<a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>&gt;, <a class="el" href="structarmnn_1_1_multiplication_queue_descriptor.xhtml">MultiplicationQueueDescriptor</a>, <a class="el" href="structarmnn_1_1_string_mapping.xhtml#a4e7b349a05a558fa6792c71c11a6bf11ab3eb648f0f29bf56db68d80624b9bb6c">StringMapping::RefMultiplicationWorkload_Execute</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ref_elementwise_workload_8hpp_source.xhtml#l00052">52</a> of file <a class="el" href="_ref_elementwise_workload_8hpp_source.xhtml">RefElementwiseWorkload.hpp</a>.</p>
+
+</div>
+</div>
+<a id="aed5e6ff8fdf785380ed4c8ca21702da3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aed5e6ff8fdf785380ed4c8ca21702da3">&#9670;&nbsp;</a></span>RefPermuteBFloat16Workload</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#aed5e6ff8fdf785380ed4c8ca21702da3">RefPermuteBFloat16Workload</a> = <a class="el" href="classarmnn_1_1_ref_permute_workload.xhtml">RefPermuteWorkload</a>&lt;<a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ref_permute_workload_8hpp_source.xhtml#l00033">33</a> of file <a class="el" href="_ref_permute_workload_8hpp_source.xhtml">RefPermuteWorkload.hpp</a>.</p>
+
+</div>
+</div>
+<a id="ad1c0fb6bfa580b04574ab56971b6cbc6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad1c0fb6bfa580b04574ab56971b6cbc6">&#9670;&nbsp;</a></span>RefPermuteFloat16Workload</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#ad1c0fb6bfa580b04574ab56971b6cbc6">RefPermuteFloat16Workload</a> = <a class="el" href="classarmnn_1_1_ref_permute_workload.xhtml">RefPermuteWorkload</a>&lt;<a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ref_permute_workload_8hpp_source.xhtml#l00034">34</a> of file <a class="el" href="_ref_permute_workload_8hpp_source.xhtml">RefPermuteWorkload.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a54c3f7c7b9909e828a084f68dc78a031"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a54c3f7c7b9909e828a084f68dc78a031">&#9670;&nbsp;</a></span>RefPermuteFloat32Workload</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a54c3f7c7b9909e828a084f68dc78a031">RefPermuteFloat32Workload</a> = <a class="el" href="classarmnn_1_1_ref_permute_workload.xhtml">RefPermuteWorkload</a>&lt;<a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ref_permute_workload_8hpp_source.xhtml#l00035">35</a> of file <a class="el" href="_ref_permute_workload_8hpp_source.xhtml">RefPermuteWorkload.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a50ffe5068ecb2fbf7f73b30ef0d753f8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a50ffe5068ecb2fbf7f73b30ef0d753f8">&#9670;&nbsp;</a></span>RefPermuteQAsymm8Workload</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a50ffe5068ecb2fbf7f73b30ef0d753f8">RefPermuteQAsymm8Workload</a> = <a class="el" href="classarmnn_1_1_ref_permute_workload.xhtml">RefPermuteWorkload</a>&lt;<a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ref_permute_workload_8hpp_source.xhtml#l00037">37</a> of file <a class="el" href="_ref_permute_workload_8hpp_source.xhtml">RefPermuteWorkload.hpp</a>.</p>
+
+</div>
+</div>
+<a id="ac89a05afd86920754ef682af60ef9d0d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac89a05afd86920754ef682af60ef9d0d">&#9670;&nbsp;</a></span>RefPermuteQAsymmS8Workload</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#ac89a05afd86920754ef682af60ef9d0d">RefPermuteQAsymmS8Workload</a> = <a class="el" href="classarmnn_1_1_ref_permute_workload.xhtml">RefPermuteWorkload</a>&lt;<a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ref_permute_workload_8hpp_source.xhtml#l00036">36</a> of file <a class="el" href="_ref_permute_workload_8hpp_source.xhtml">RefPermuteWorkload.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a6ffed93fad525ce1d534cec2cdaee6bd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6ffed93fad525ce1d534cec2cdaee6bd">&#9670;&nbsp;</a></span>RefPermuteQSymm16Workload</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a6ffed93fad525ce1d534cec2cdaee6bd">RefPermuteQSymm16Workload</a> = <a class="el" href="classarmnn_1_1_ref_permute_workload.xhtml">RefPermuteWorkload</a>&lt;<a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ref_permute_workload_8hpp_source.xhtml#l00038">38</a> of file <a class="el" href="_ref_permute_workload_8hpp_source.xhtml">RefPermuteWorkload.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a7d4bff547e5c8ac994932e281ddebda7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7d4bff547e5c8ac994932e281ddebda7">&#9670;&nbsp;</a></span>RefSubtractionWorkload</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a7d4bff547e5c8ac994932e281ddebda7">RefSubtractionWorkload</a> = <a class="el" href="classarmnn_1_1_ref_elementwise_workload.xhtml">RefElementwiseWorkload</a>&lt;std::minus&lt;<a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>&gt;, <a class="el" href="structarmnn_1_1_subtraction_queue_descriptor.xhtml">SubtractionQueueDescriptor</a>, <a class="el" href="structarmnn_1_1_string_mapping.xhtml#a4e7b349a05a558fa6792c71c11a6bf11a3694ad0341ebb1fe50b78efe13672519">StringMapping::RefSubtractionWorkload_Execute</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ref_elementwise_workload_8hpp_source.xhtml#l00046">46</a> of file <a class="el" href="_ref_elementwise_workload_8hpp_source.xhtml">RefElementwiseWorkload.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a031a365fb37880a7f015dab159877a72"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a031a365fb37880a7f015dab159877a72">&#9670;&nbsp;</a></span>RefTransposeBFloat16Workload</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a031a365fb37880a7f015dab159877a72">RefTransposeBFloat16Workload</a> = <a class="el" href="classarmnn_1_1_ref_transpose_workload.xhtml">RefTransposeWorkload</a>&lt;<a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ref_transpose_workload_8hpp_source.xhtml#l00033">33</a> of file <a class="el" href="_ref_transpose_workload_8hpp_source.xhtml">RefTransposeWorkload.hpp</a>.</p>
+
+</div>
+</div>
+<a id="aefcfe4efab61267262d1e02cb8af739d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aefcfe4efab61267262d1e02cb8af739d">&#9670;&nbsp;</a></span>RefTransposeFloat16Workload</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#aefcfe4efab61267262d1e02cb8af739d">RefTransposeFloat16Workload</a> = <a class="el" href="classarmnn_1_1_ref_transpose_workload.xhtml">RefTransposeWorkload</a>&lt;<a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ref_transpose_workload_8hpp_source.xhtml#l00034">34</a> of file <a class="el" href="_ref_transpose_workload_8hpp_source.xhtml">RefTransposeWorkload.hpp</a>.</p>
+
+</div>
+</div>
+<a id="ad67165b4639bd5e50e5bc4538d226b35"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad67165b4639bd5e50e5bc4538d226b35">&#9670;&nbsp;</a></span>RefTransposeFloat32Workload</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#ad67165b4639bd5e50e5bc4538d226b35">RefTransposeFloat32Workload</a> = <a class="el" href="classarmnn_1_1_ref_transpose_workload.xhtml">RefTransposeWorkload</a>&lt;<a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ref_transpose_workload_8hpp_source.xhtml#l00035">35</a> of file <a class="el" href="_ref_transpose_workload_8hpp_source.xhtml">RefTransposeWorkload.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a1d13693cba12d3e406454b852527fb37"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1d13693cba12d3e406454b852527fb37">&#9670;&nbsp;</a></span>RefTransposeQAsymm8Workload</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a1d13693cba12d3e406454b852527fb37">RefTransposeQAsymm8Workload</a> = <a class="el" href="classarmnn_1_1_ref_transpose_workload.xhtml">RefTransposeWorkload</a>&lt;<a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ref_transpose_workload_8hpp_source.xhtml#l00037">37</a> of file <a class="el" href="_ref_transpose_workload_8hpp_source.xhtml">RefTransposeWorkload.hpp</a>.</p>
+
+</div>
+</div>
+<a id="ae0b590ea0ad58072eec6e30fc4369d98"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae0b590ea0ad58072eec6e30fc4369d98">&#9670;&nbsp;</a></span>RefTransposeQAsymmS8Workload</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#ae0b590ea0ad58072eec6e30fc4369d98">RefTransposeQAsymmS8Workload</a> = <a class="el" href="classarmnn_1_1_ref_transpose_workload.xhtml">RefTransposeWorkload</a>&lt;<a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ref_transpose_workload_8hpp_source.xhtml#l00036">36</a> of file <a class="el" href="_ref_transpose_workload_8hpp_source.xhtml">RefTransposeWorkload.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a4d9e736b0f2d5f6d66ea0a798366935c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4d9e736b0f2d5f6d66ea0a798366935c">&#9670;&nbsp;</a></span>RefTransposeQSymm16Workload</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a4d9e736b0f2d5f6d66ea0a798366935c">RefTransposeQSymm16Workload</a> = <a class="el" href="classarmnn_1_1_ref_transpose_workload.xhtml">RefTransposeWorkload</a>&lt;<a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ref_transpose_workload_8hpp_source.xhtml#l00038">38</a> of file <a class="el" href="_ref_transpose_workload_8hpp_source.xhtml">RefTransposeWorkload.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a0743ed5e860c316a20b68ca96301b411"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0743ed5e860c316a20b68ca96301b411">&#9670;&nbsp;</a></span>ResolveType</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a0743ed5e860c316a20b68ca96301b411">ResolveType</a> = typename <a class="el" href="structarmnn_1_1_resolve_type_impl.xhtml">ResolveTypeImpl</a>&lt;DT&gt;::Type</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_resolve_type_8hpp_source.xhtml#l00079">79</a> of file <a class="el" href="_resolve_type_8hpp_source.xhtml">ResolveType.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a60291543fe872b795e71e05bcd835fd1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a60291543fe872b795e71e05bcd835fd1">&#9670;&nbsp;</a></span>SplitterDescriptor</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a60291543fe872b795e71e05bcd835fd1">SplitterDescriptor</a> = <a class="el" href="structarmnn_1_1_views_descriptor.xhtml">ViewsDescriptor</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_descriptors_fwd_8hpp_source.xhtml#l00060">60</a> of file <a class="el" href="_descriptors_fwd_8hpp_source.xhtml">DescriptorsFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a14275495042ea02d0348dd70eeaf3d68"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a14275495042ea02d0348dd70eeaf3d68">&#9670;&nbsp;</a></span>TensorInfos</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a14275495042ea02d0348dd70eeaf3d68">TensorInfos</a> = std::vector&lt;<a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_backend_helper_8cpp_source.xhtml#l00151">151</a> of file <a class="el" href="_backend_helper_8cpp_source.xhtml">BackendHelper.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a6d4fbf927a9d8e68cab1d7965c7dbc44"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6d4fbf927a9d8e68cab1d7965c7dbc44">&#9670;&nbsp;</a></span>Uint8ToFloat32Workload</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a6d4fbf927a9d8e68cab1d7965c7dbc44">Uint8ToFloat32Workload</a> = <a class="el" href="classarmnn_1_1_multi_typed_workload.xhtml">MultiTypedWorkload</a>&lt;<a class="el" href="structarmnn_1_1_queue_descriptor.xhtml">QueueDescriptor</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">armnn::DataType::QAsymmU8</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="include_2armnn_2backends_2_workload_8hpp_source.xhtml#l00236">236</a> of file <a class="el" href="include_2armnn_2backends_2_workload_8hpp_source.xhtml">Workload.hpp</a>.</p>
+
+</div>
+</div>
+<a id="ad4d53881107428c301d43b5aad16bfe0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad4d53881107428c301d43b5aad16bfe0">&#9670;&nbsp;</a></span>Uint8Workload</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#ad4d53881107428c301d43b5aad16bfe0">Uint8Workload</a> = <a class="el" href="classarmnn_1_1_typed_workload.xhtml">TypedWorkload</a>&lt;<a class="el" href="structarmnn_1_1_queue_descriptor.xhtml">QueueDescriptor</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">armnn::DataType::QAsymmU8</a>&gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="include_2armnn_2backends_2_workload_8hpp_source.xhtml#l00195">195</a> of file <a class="el" href="include_2armnn_2backends_2_workload_8hpp_source.xhtml">Workload.hpp</a>.</p>
+
+</div>
+</div>
+<a id="ae6c5f1b51bd32133c4dcc632045d6b58"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae6c5f1b51bd32133c4dcc632045d6b58">&#9670;&nbsp;</a></span>UnidirectionalSequenceLstmDescriptor</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef <a class="el" href="structarmnn_1_1_lstm_descriptor.xhtml">LstmDescriptor</a> <a class="el" href="namespacearmnn.xhtml#ae6c5f1b51bd32133c4dcc632045d6b58">UnidirectionalSequenceLstmDescriptor</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_descriptors_8hpp_source.xhtml#l01121">1121</a> of file <a class="el" href="_descriptors_8hpp_source.xhtml">Descriptors.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a15f53f26b8495b51d0bba3d1bc4efc80"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a15f53f26b8495b51d0bba3d1bc4efc80">&#9670;&nbsp;</a></span>WorkloadQueue</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="namespacearmnn.xhtml#a15f53f26b8495b51d0bba3d1bc4efc80">WorkloadQueue</a> = std::vector&lt; std::unique_ptr&lt;<a class="el" href="classarmnn_1_1_i_workload.xhtml">IWorkload</a>&gt; &gt;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_execution_frame_8hpp_source.xhtml#l00013">13</a> of file <a class="el" href="_execution_frame_8hpp_source.xhtml">ExecutionFrame.hpp</a>.</p>
+
+</div>
+</div>
+<h2 class="groupheader">Enumeration Type Documentation</h2>
+<a id="a56297e0f7b215eea46c818cb7528d9ea"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a56297e0f7b215eea46c818cb7528d9ea">&#9670;&nbsp;</a></span>ActivationFunction</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9ea">ActivationFunction</a></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">strong</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a56297e0f7b215eea46c818cb7528d9eaa21eebb164e4b8b9bcf64fdb4d8d5dff4"></a>Sigmoid&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56297e0f7b215eea46c818cb7528d9eaa23b68da1de2b77d74da9da2635722a3e"></a>TanH&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56297e0f7b215eea46c818cb7528d9eaa32a843da6ea40ab3b17a3421ccdf671b"></a>Linear&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56297e0f7b215eea46c818cb7528d9eaa3d90c0a5ab3fcf8e6f6608cb3d3a1559"></a>ReLu&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56297e0f7b215eea46c818cb7528d9eaabc5a0f0d6e7cf7fca73299dcd46c0f0d"></a>BoundedReLu&#160;</td><td class="fielddoc"><p>min(a, max(b, input)) ReLu1 &amp; ReLu6. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="a56297e0f7b215eea46c818cb7528d9eaa6bba7052636d1740303b1b2ef3b53fef"></a>SoftReLu&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56297e0f7b215eea46c818cb7528d9eaacb7667f5ec2f6e8a5943b781ba6c2735"></a>LeakyReLu&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56297e0f7b215eea46c818cb7528d9eaa1e34af023adeb7d5f484f8eb4b9826b6"></a>Abs&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56297e0f7b215eea46c818cb7528d9eaaae77f3ad25595e35b327334d89410054"></a>Sqrt&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56297e0f7b215eea46c818cb7528d9eaaceb46ca115d05c51aa5a16a8867c3304"></a>Square&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56297e0f7b215eea46c818cb7528d9eaaed67cf7d54c570e4c4891800f085f41d"></a>Elu&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56297e0f7b215eea46c818cb7528d9eaa0877e5b3fbe9d7569df6399609ed0186"></a>HardSwish&#160;</td><td class="fielddoc"></td></tr>
+</table>
+
+<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00073">73</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;{</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa21eebb164e4b8b9bcf64fdb4d8d5dff4">Sigmoid</a> = 0,</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa23b68da1de2b77d74da9da2635722a3e">TanH</a> = 1,</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa32a843da6ea40ab3b17a3421ccdf671b">Linear</a> = 2,</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa3d90c0a5ab3fcf8e6f6608cb3d3a1559">ReLu</a> = 3,</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaabc5a0f0d6e7cf7fca73299dcd46c0f0d">BoundedReLu</a> = 4, <span class="comment">///&lt; min(a, max(b, input)) ReLu1 &amp; ReLu6.</span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="comment"></span> <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa6bba7052636d1740303b1b2ef3b53fef">SoftReLu</a> = 5,</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaacb7667f5ec2f6e8a5943b781ba6c2735">LeakyReLu</a> = 6,</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa1e34af023adeb7d5f484f8eb4b9826b6">Abs</a> = 7,</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaaae77f3ad25595e35b327334d89410054">Sqrt</a> = 8,</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaaceb46ca115d05c51aa5a16a8867c3304">Square</a> = 9,</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaaed67cf7d54c570e4c4891800f085f41d">Elu</a> = 10,</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa0877e5b3fbe9d7569df6399609ed0186">HardSwish</a> = 11</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;};</div><div class="ttc" id="namespacearmnn_xhtml_a56297e0f7b215eea46c818cb7528d9eaa3d90c0a5ab3fcf8e6f6608cb3d3a1559"><div class="ttname"><a href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa3d90c0a5ab3fcf8e6f6608cb3d3a1559">armnn::ActivationFunction::ReLu</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a56297e0f7b215eea46c818cb7528d9eaaae77f3ad25595e35b327334d89410054"><div class="ttname"><a href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaaae77f3ad25595e35b327334d89410054">armnn::ActivationFunction::Sqrt</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a56297e0f7b215eea46c818cb7528d9eaacb7667f5ec2f6e8a5943b781ba6c2735"><div class="ttname"><a href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaacb7667f5ec2f6e8a5943b781ba6c2735">armnn::ActivationFunction::LeakyReLu</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a56297e0f7b215eea46c818cb7528d9eaa1e34af023adeb7d5f484f8eb4b9826b6"><div class="ttname"><a href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa1e34af023adeb7d5f484f8eb4b9826b6">armnn::ActivationFunction::Abs</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a56297e0f7b215eea46c818cb7528d9eaa21eebb164e4b8b9bcf64fdb4d8d5dff4"><div class="ttname"><a href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa21eebb164e4b8b9bcf64fdb4d8d5dff4">armnn::ActivationFunction::Sigmoid</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a56297e0f7b215eea46c818cb7528d9eaa6bba7052636d1740303b1b2ef3b53fef"><div class="ttname"><a href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa6bba7052636d1740303b1b2ef3b53fef">armnn::ActivationFunction::SoftReLu</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a56297e0f7b215eea46c818cb7528d9eaabc5a0f0d6e7cf7fca73299dcd46c0f0d"><div class="ttname"><a href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaabc5a0f0d6e7cf7fca73299dcd46c0f0d">armnn::ActivationFunction::BoundedReLu</a></div><div class="ttdoc">min(a, max(b, input)) ReLu1 &amp; ReLu6. </div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a56297e0f7b215eea46c818cb7528d9eaaed67cf7d54c570e4c4891800f085f41d"><div class="ttname"><a href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaaed67cf7d54c570e4c4891800f085f41d">armnn::ActivationFunction::Elu</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a56297e0f7b215eea46c818cb7528d9eaaceb46ca115d05c51aa5a16a8867c3304"><div class="ttname"><a href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaaceb46ca115d05c51aa5a16a8867c3304">armnn::ActivationFunction::Square</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a56297e0f7b215eea46c818cb7528d9eaa32a843da6ea40ab3b17a3421ccdf671b"><div class="ttname"><a href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa32a843da6ea40ab3b17a3421ccdf671b">armnn::ActivationFunction::Linear</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a56297e0f7b215eea46c818cb7528d9eaa0877e5b3fbe9d7569df6399609ed0186"><div class="ttname"><a href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa0877e5b3fbe9d7569df6399609ed0186">armnn::ActivationFunction::HardSwish</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a56297e0f7b215eea46c818cb7528d9eaa23b68da1de2b77d74da9da2635722a3e"><div class="ttname"><a href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa23b68da1de2b77d74da9da2635722a3e">armnn::ActivationFunction::TanH</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ae7e8cbf71db6a490789ca6dcaa8deeae"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae7e8cbf71db6a490789ca6dcaa8deeae">&#9670;&nbsp;</a></span>ArgMinMaxFunction</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeae">ArgMinMaxFunction</a></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">strong</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ae7e8cbf71db6a490789ca6dcaa8deeaea78d811e98514cd165dda532286610fd2"></a>Min&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="ae7e8cbf71db6a490789ca6dcaa8deeaea6a061313d22e51e0f25b7cd4dc065233"></a>Max&#160;</td><td class="fielddoc"></td></tr>
+</table>
+
+<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00089">89</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;{</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <a class="code" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea78d811e98514cd165dda532286610fd2">Min</a> = 0,</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <a class="code" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea6a061313d22e51e0f25b7cd4dc065233">Max</a> = 1</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;};</div><div class="ttc" id="namespacearmnn_xhtml_ae7e8cbf71db6a490789ca6dcaa8deeaea6a061313d22e51e0f25b7cd4dc065233"><div class="ttname"><a href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea6a061313d22e51e0f25b7cd4dc065233">armnn::ArgMinMaxFunction::Max</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ae7e8cbf71db6a490789ca6dcaa8deeaea78d811e98514cd165dda532286610fd2"><div class="ttname"><a href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea78d811e98514cd165dda532286610fd2">armnn::ArgMinMaxFunction::Min</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ab24d74259a053475f6040dd701a01952"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab24d74259a053475f6040dd701a01952">&#9670;&nbsp;</a></span>BackendCapability</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="namespacearmnn.xhtml#ab24d74259a053475f6040dd701a01952">BackendCapability</a> : uint32_t</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">strong</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>BackendCapability class. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ab24d74259a053475f6040dd701a01952a0be89c9a624a5de3925150e3cd476245"></a>NonConstWeights&#160;</td><td class="fielddoc"><p>Constant weights can be accessed through the descriptors, On the other hand, non-const weights can be accessed through inputs. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ab24d74259a053475f6040dd701a01952ac7fdc1b70472b8558fdba30db193d58f"></a>AsyncExecution&#160;</td><td class="fielddoc"><p>Asynchronous Execution. </p>
+</td></tr>
+</table>
+
+<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00254">254</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; : uint32_t</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;{<span class="comment"></span></div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;<span class="comment"> /// Constant weights can be accessed through the descriptors,</span></div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160;<span class="comment"> /// On the other hand, non-const weights can be accessed through inputs.</span></div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;<span class="comment"></span> <a class="code" href="namespacearmnn.xhtml#ab24d74259a053475f6040dd701a01952a0be89c9a624a5de3925150e3cd476245">NonConstWeights</a>,</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160;<span class="comment"> /// Asynchronous Execution.</span></div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160;<span class="comment"></span> <a class="code" href="namespacearmnn.xhtml#ab24d74259a053475f6040dd701a01952ac7fdc1b70472b8558fdba30db193d58f">AsyncExecution</a>,</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160;</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="comment">// add new enum values here</span></div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160;};</div><div class="ttc" id="namespacearmnn_xhtml_ab24d74259a053475f6040dd701a01952ac7fdc1b70472b8558fdba30db193d58f"><div class="ttname"><a href="namespacearmnn.xhtml#ab24d74259a053475f6040dd701a01952ac7fdc1b70472b8558fdba30db193d58f">armnn::BackendCapability::AsyncExecution</a></div><div class="ttdoc">Asynchronous Execution. </div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ab24d74259a053475f6040dd701a01952a0be89c9a624a5de3925150e3cd476245"><div class="ttname"><a href="namespacearmnn.xhtml#ab24d74259a053475f6040dd701a01952a0be89c9a624a5de3925150e3cd476245">armnn::BackendCapability::NonConstWeights</a></div><div class="ttdoc">Constant weights can be accessed through the descriptors, On the other hand, non-const weights can be...</div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a4dc0adc6737b5944e7671bee71788407"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4dc0adc6737b5944e7671bee71788407">&#9670;&nbsp;</a></span>BoostLogSeverityMapping</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407">BoostLogSeverityMapping</a></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">strong</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a4dc0adc6737b5944e7671bee71788407a04a75036e9d520bb983c5ed03b8d0182"></a>trace&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a4dc0adc6737b5944e7671bee71788407aad42f6697b035b7580e4fef93be20b4d"></a>debug&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c"></a>info&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a4dc0adc6737b5944e7671bee71788407a7b83d3f08fa392b79e3f553b585971cd"></a>warning&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a4dc0adc6737b5944e7671bee71788407acb5e100e5a9a3e7f6d1fd97512215282"></a>error&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a4dc0adc6737b5944e7671bee71788407adf6402fd9ecc60f5a2159fdf45711cd4"></a>fatal&#160;</td><td class="fielddoc"></td></tr>
+</table>
+
+<p class="definition">Definition at line <a class="el" href="_logging_8hpp_source.xhtml#l00189">189</a> of file <a class="el" href="_logging_8hpp_source.xhtml">Logging.hpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160;{</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407a04a75036e9d520bb983c5ed03b8d0182">trace</a>,</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407aad42f6697b035b7580e4fef93be20b4d">debug</a>,</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>,</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407a7b83d3f08fa392b79e3f553b585971cd">warning</a>,</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acb5e100e5a9a3e7f6d1fd97512215282">error</a>,</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407adf6402fd9ecc60f5a2159fdf45711cd4">fatal</a></div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;};</div><div class="ttc" id="namespacearmnn_xhtml_a4dc0adc6737b5944e7671bee71788407aad42f6697b035b7580e4fef93be20b4d"><div class="ttname"><a href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407aad42f6697b035b7580e4fef93be20b4d">armnn::BoostLogSeverityMapping::debug</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a4dc0adc6737b5944e7671bee71788407a04a75036e9d520bb983c5ed03b8d0182"><div class="ttname"><a href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407a04a75036e9d520bb983c5ed03b8d0182">armnn::BoostLogSeverityMapping::trace</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a4dc0adc6737b5944e7671bee71788407acb5e100e5a9a3e7f6d1fd97512215282"><div class="ttname"><a href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acb5e100e5a9a3e7f6d1fd97512215282">armnn::BoostLogSeverityMapping::error</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a4dc0adc6737b5944e7671bee71788407a7b83d3f08fa392b79e3f553b585971cd"><div class="ttname"><a href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407a7b83d3f08fa392b79e3f553b585971cd">armnn::BoostLogSeverityMapping::warning</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a4dc0adc6737b5944e7671bee71788407adf6402fd9ecc60f5a2159fdf45711cd4"><div class="ttname"><a href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407adf6402fd9ecc60f5a2159fdf45711cd4">armnn::BoostLogSeverityMapping::fatal</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c"><div class="ttname"><a href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">armnn::BoostLogSeverityMapping::info</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a10c50bc964cc8cc559eebcd7df5a8af3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a10c50bc964cc8cc559eebcd7df5a8af3">&#9670;&nbsp;</a></span>CapabilityClass</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="namespacearmnn.xhtml#a10c50bc964cc8cc559eebcd7df5a8af3">CapabilityClass</a></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">strong</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p><a class="el" href="structarmnn_1_1_capability.xhtml" title="Capability of the TensorHandleFactory. ">Capability</a> class to calculate in the GetCapabilities function so that only the capability in the scope can be choose to calculate. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a10c50bc964cc8cc559eebcd7df5a8af3aa47abd1077ef632a38ada05b6edbf389"></a>PaddingRequired&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a10c50bc964cc8cc559eebcd7df5a8af3a5a3e0409dae79a7940aade8d399dcd5d"></a>FallbackImportDisabled&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a10c50bc964cc8cc559eebcd7df5a8af3a280957607e14bb2ccc1155ae6569aee1"></a>CapabilityClassMax&#160;</td><td class="fielddoc"></td></tr>
+</table>
+
+<p class="definition">Definition at line <a class="el" href="include_2armnn_2backends_2_i_tensor_handle_factory_8hpp_source.xhtml#l00020">20</a> of file <a class="el" href="include_2armnn_2backends_2_i_tensor_handle_factory_8hpp_source.xhtml">ITensorHandleFactory.hpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;{</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <a class="code" href="namespacearmnn.xhtml#a10c50bc964cc8cc559eebcd7df5a8af3aa47abd1077ef632a38ada05b6edbf389">PaddingRequired</a> = 1,</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <a class="code" href="namespacearmnn.xhtml#a10c50bc964cc8cc559eebcd7df5a8af3a5a3e0409dae79a7940aade8d399dcd5d">FallbackImportDisabled</a> = 2,</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="comment">// add new enum values here</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <a class="code" href="namespacearmnn.xhtml#a10c50bc964cc8cc559eebcd7df5a8af3a280957607e14bb2ccc1155ae6569aee1">CapabilityClassMax</a> = 254</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;};</div><div class="ttc" id="namespacearmnn_xhtml_a10c50bc964cc8cc559eebcd7df5a8af3a280957607e14bb2ccc1155ae6569aee1"><div class="ttname"><a href="namespacearmnn.xhtml#a10c50bc964cc8cc559eebcd7df5a8af3a280957607e14bb2ccc1155ae6569aee1">armnn::CapabilityClass::CapabilityClassMax</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a10c50bc964cc8cc559eebcd7df5a8af3a5a3e0409dae79a7940aade8d399dcd5d"><div class="ttname"><a href="namespacearmnn.xhtml#a10c50bc964cc8cc559eebcd7df5a8af3a5a3e0409dae79a7940aade8d399dcd5d">armnn::CapabilityClass::FallbackImportDisabled</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a10c50bc964cc8cc559eebcd7df5a8af3aa47abd1077ef632a38ada05b6edbf389"><div class="ttname"><a href="namespacearmnn.xhtml#a10c50bc964cc8cc559eebcd7df5a8af3aa47abd1077ef632a38ada05b6edbf389">armnn::CapabilityClass::PaddingRequired</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a2d299363c9fc33334c571fa29ca4f58c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2d299363c9fc33334c571fa29ca4f58c">&#9670;&nbsp;</a></span>ComparisonOperation</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58c">ComparisonOperation</a></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">strong</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a2d299363c9fc33334c571fa29ca4f58caf5f286e73bda105e538310b3190f75c5"></a>Equal&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a2d299363c9fc33334c571fa29ca4f58ca8768a6821cd735aea4f5b0df88c1fc6a"></a>Greater&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a2d299363c9fc33334c571fa29ca4f58ca6f2f0aefb3d22da0f3839453add5f937"></a>GreaterOrEqual&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a2d299363c9fc33334c571fa29ca4f58ca1cfdf0e8d0c87a228c1f40d9bee7888b"></a>Less&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a2d299363c9fc33334c571fa29ca4f58caa4cbdbb6070a5abb35fc95ecf1e22c14"></a>LessOrEqual&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a2d299363c9fc33334c571fa29ca4f58ca19bb0af2c3c530538cb41aff7f235b96"></a>NotEqual&#160;</td><td class="fielddoc"></td></tr>
+</table>
+
+<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00095">95</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;{</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <a class="code" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58caf5f286e73bda105e538310b3190f75c5">Equal</a> = 0,</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <a class="code" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58ca8768a6821cd735aea4f5b0df88c1fc6a">Greater</a> = 1,</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <a class="code" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58ca6f2f0aefb3d22da0f3839453add5f937">GreaterOrEqual</a> = 2,</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <a class="code" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58ca1cfdf0e8d0c87a228c1f40d9bee7888b">Less</a> = 3,</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <a class="code" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58caa4cbdbb6070a5abb35fc95ecf1e22c14">LessOrEqual</a> = 4,</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <a class="code" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58ca19bb0af2c3c530538cb41aff7f235b96">NotEqual</a> = 5</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;};</div><div class="ttc" id="namespacearmnn_xhtml_a2d299363c9fc33334c571fa29ca4f58ca8768a6821cd735aea4f5b0df88c1fc6a"><div class="ttname"><a href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58ca8768a6821cd735aea4f5b0df88c1fc6a">armnn::ComparisonOperation::Greater</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a2d299363c9fc33334c571fa29ca4f58caf5f286e73bda105e538310b3190f75c5"><div class="ttname"><a href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58caf5f286e73bda105e538310b3190f75c5">armnn::ComparisonOperation::Equal</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a2d299363c9fc33334c571fa29ca4f58ca1cfdf0e8d0c87a228c1f40d9bee7888b"><div class="ttname"><a href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58ca1cfdf0e8d0c87a228c1f40d9bee7888b">armnn::ComparisonOperation::Less</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a2d299363c9fc33334c571fa29ca4f58ca19bb0af2c3c530538cb41aff7f235b96"><div class="ttname"><a href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58ca19bb0af2c3c530538cb41aff7f235b96">armnn::ComparisonOperation::NotEqual</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a2d299363c9fc33334c571fa29ca4f58caa4cbdbb6070a5abb35fc95ecf1e22c14"><div class="ttname"><a href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58caa4cbdbb6070a5abb35fc95ecf1e22c14">armnn::ComparisonOperation::LessOrEqual</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a2d299363c9fc33334c571fa29ca4f58ca6f2f0aefb3d22da0f3839453add5f937"><div class="ttname"><a href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58ca6f2f0aefb3d22da0f3839453add5f937">armnn::ComparisonOperation::GreaterOrEqual</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ae2f04a162585c0a5222a537efd5456ae"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae2f04a162585c0a5222a537efd5456ae">&#9670;&nbsp;</a></span>Compute</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456ae">Compute</a></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">strong</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>The Compute enum is now deprecated and it is now being replaced by <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a>. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360"></a>Undefined&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64"></a>CpuRef&#160;</td><td class="fielddoc"><p>CPU Execution: Reference C++ kernels. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ae2f04a162585c0a5222a537efd5456aea39f8662ca778258e9c6a14f26fec5ec1"></a>CpuAcc&#160;</td><td class="fielddoc"><p>CPU Execution: NEON: ArmCompute. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ae2f04a162585c0a5222a537efd5456aeafaa4524e3df19ada32643ce9a222362b"></a>GpuAcc&#160;</td><td class="fielddoc"><p>GPU Execution: OpenCL: ArmCompute. </p>
+</td></tr>
+</table>
+
+<p class="definition">Definition at line <a class="el" href="_backend_id_8hpp_source.xhtml#l00021">21</a> of file <a class="el" href="_backend_id_8hpp_source.xhtml">BackendId.hpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;{</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a> = 0,<span class="comment"></span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment"> /// CPU Execution: Reference C++ kernels</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"></span> <a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64">CpuRef</a> = 1,<span class="comment"></span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> /// CPU Execution: NEON: ArmCompute</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"></span> <a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea39f8662ca778258e9c6a14f26fec5ec1">CpuAcc</a> = 2,<span class="comment"></span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> /// GPU Execution: OpenCL: ArmCompute</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="comment"></span> <a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeafaa4524e3df19ada32643ce9a222362b">GpuAcc</a> = 3</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;};</div><div class="ttc" id="namespacearmnn_xhtml_ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64"><div class="ttname"><a href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64">armnn::Compute::CpuRef</a></div><div class="ttdoc">CPU Execution: Reference C++ kernels. </div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360"><div class="ttname"><a href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">armnn::Compute::Undefined</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ae2f04a162585c0a5222a537efd5456aeafaa4524e3df19ada32643ce9a222362b"><div class="ttname"><a href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeafaa4524e3df19ada32643ce9a222362b">armnn::Compute::GpuAcc</a></div><div class="ttdoc">GPU Execution: OpenCL: ArmCompute. </div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ae2f04a162585c0a5222a537efd5456aea39f8662ca778258e9c6a14f26fec5ec1"><div class="ttname"><a href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea39f8662ca778258e9c6a14f26fec5ec1">armnn::Compute::CpuAcc</a></div><div class="ttdoc">CPU Execution: NEON: ArmCompute. </div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ad1d5cce2d9e9a5d61c243e5c989112e0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad1d5cce2d9e9a5d61c243e5c989112e0">&#9670;&nbsp;</a></span>DataLayout</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">strong</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f"></a>NCHW&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51"></a>NHWC&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="ad1d5cce2d9e9a5d61c243e5c989112e0a4dd0194b114cbf51da5b3a72569863ef"></a>NDHWC&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="ad1d5cce2d9e9a5d61c243e5c989112e0a884e0167ebf9bbe6cfd6ca5ab97ab015"></a>NCDHW&#160;</td><td class="fielddoc"></td></tr>
+</table>
+
+<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00049">49</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;{</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">NCHW</a> = 1,</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">NHWC</a> = 2,</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a4dd0194b114cbf51da5b3a72569863ef">NDHWC</a> = 3,</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a884e0167ebf9bbe6cfd6ca5ab97ab015">NCDHW</a> = 4</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;};</div><div class="ttc" id="namespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0a884e0167ebf9bbe6cfd6ca5ab97ab015"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a884e0167ebf9bbe6cfd6ca5ab97ab015">armnn::DataLayout::NCDHW</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0a4dd0194b114cbf51da5b3a72569863ef"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a4dd0194b114cbf51da5b3a72569863ef">armnn::DataLayout::NDHWC</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ad8ed01ff3ff33333d8e19db4d2818bb6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad8ed01ff3ff33333d8e19db4d2818bb6">&#9670;&nbsp;</a></span>DataType</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">strong</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55"></a>Float16&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204"></a>Float32&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e"></a>QAsymmU8&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7"></a>Signed32&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b"></a>Boolean&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7"></a>QSymmS16&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db"></a>QSymmS8&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d"></a>QAsymmS8&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af"></a>BFloat16&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="ad8ed01ff3ff33333d8e19db4d2818bb6ae1b3c9c6087a93b07c83e0b04f377a8d"></a>Signed64&#160;</td><td class="fielddoc"></td></tr>
+</table>
+
+<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00035">35</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;{</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">Float16</a> = 0,</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">Float32</a> = 1,</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">QAsymmU8</a> = 2,</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">Signed32</a> = 3,</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">Boolean</a> = 4,</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">QSymmS16</a> = 5,</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">QSymmS8</a> = 6,</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">QAsymmS8</a> = 7,</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">BFloat16</a> = 8,</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6ae1b3c9c6087a93b07c83e0b04f377a8d">Signed64</a> = 9,</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;};</div><div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">armnn::DataType::Boolean</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">armnn::DataType::Signed32</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">armnn::DataType::QAsymmS8</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6ae1b3c9c6087a93b07c83e0b04f377a8d"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6ae1b3c9c6087a93b07c83e0b04f377a8d">armnn::DataType::Signed64</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">armnn::DataType::QSymmS16</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">armnn::DataType::QAsymmU8</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">armnn::DataType::Float16</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">armnn::DataType::BFloat16</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">armnn::DataType::QSymmS8</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a8e1f31031ad31cd8cc22d7c9daa32681"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8e1f31031ad31cd8cc22d7c9daa32681">&#9670;&nbsp;</a></span>Dimensionality</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="namespacearmnn.xhtml#a8e1f31031ad31cd8cc22d7c9daa32681">Dimensionality</a></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">strong</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a8e1f31031ad31cd8cc22d7c9daa32681a4b7d504abac49ba24b4df86c129d3cbc"></a>NotSpecified&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a8e1f31031ad31cd8cc22d7c9daa32681ab4b379bf7ded74c07595ccb85bc6fdc3"></a>Specified&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a8e1f31031ad31cd8cc22d7c9daa32681af60357a8d17e45793298323f1b372a74"></a>Scalar&#160;</td><td class="fielddoc"></td></tr>
+</table>
+
+<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00145">145</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;{</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <a class="code" href="namespacearmnn.xhtml#a8e1f31031ad31cd8cc22d7c9daa32681a4b7d504abac49ba24b4df86c129d3cbc">NotSpecified</a> = 0,</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <a class="code" href="namespacearmnn.xhtml#a8e1f31031ad31cd8cc22d7c9daa32681ab4b379bf7ded74c07595ccb85bc6fdc3">Specified</a> = 1,</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <a class="code" href="namespacearmnn.xhtml#a8e1f31031ad31cd8cc22d7c9daa32681af60357a8d17e45793298323f1b372a74">Scalar</a> = 2</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;};</div><div class="ttc" id="namespacearmnn_xhtml_a8e1f31031ad31cd8cc22d7c9daa32681a4b7d504abac49ba24b4df86c129d3cbc"><div class="ttname"><a href="namespacearmnn.xhtml#a8e1f31031ad31cd8cc22d7c9daa32681a4b7d504abac49ba24b4df86c129d3cbc">armnn::Dimensionality::NotSpecified</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a8e1f31031ad31cd8cc22d7c9daa32681ab4b379bf7ded74c07595ccb85bc6fdc3"><div class="ttname"><a href="namespacearmnn.xhtml#a8e1f31031ad31cd8cc22d7c9daa32681ab4b379bf7ded74c07595ccb85bc6fdc3">armnn::Dimensionality::Specified</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a8e1f31031ad31cd8cc22d7c9daa32681af60357a8d17e45793298323f1b372a74"><div class="ttname"><a href="namespacearmnn.xhtml#a8e1f31031ad31cd8cc22d7c9daa32681af60357a8d17e45793298323f1b372a74">armnn::Dimensionality::Scalar</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="aff209afc1dc598da399e3e78617ce016"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aff209afc1dc598da399e3e78617ce016">&#9670;&nbsp;</a></span>EdgeStrategy</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="namespacearmnn.xhtml#aff209afc1dc598da399e3e78617ce016">EdgeStrategy</a></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">strong</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="aff209afc1dc598da399e3e78617ce016aec0fc0100c4fc1ce4eea230c3dc10360"></a>Undefined&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="aff209afc1dc598da399e3e78617ce016a78d1be0baa31e083ae8da99aaedaf650"></a>DirectCompatibility&#160;</td><td class="fielddoc"><p>No strategy has been defined. Used internally to verify integrity of optimizations. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="aff209afc1dc598da399e3e78617ce016a46e8b7bfd6fd3c0cb34a100478a39189"></a>ExportToTarget&#160;</td><td class="fielddoc"><p>Destination backend can work directly with tensors on source backend. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="aff209afc1dc598da399e3e78617ce016ac366da48cc11956ae377a77751936852"></a>CopyToTarget&#160;</td><td class="fielddoc"><p>Source backends tensor data can be exported to destination backend tensor without copy. </p>
+<p>Copy contents from source backend tensor to destination backend tensor. </p>
+</td></tr>
+</table>
+
+<p class="definition">Definition at line <a class="el" href="include_2armnn_2backends_2_i_tensor_handle_factory_8hpp_source.xhtml#l00100">100</a> of file <a class="el" href="include_2armnn_2backends_2_i_tensor_handle_factory_8hpp_source.xhtml">ITensorHandleFactory.hpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;{</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a>, <span class="comment">/// No strategy has been defined. Used internally to verify integrity of optimizations.</span></div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;<span class="comment"></span> <a class="code" href="namespacearmnn.xhtml#aff209afc1dc598da399e3e78617ce016a78d1be0baa31e083ae8da99aaedaf650">DirectCompatibility</a>, <span class="comment">/// Destination backend can work directly with tensors on source backend.</span></div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;<span class="comment"></span> <a class="code" href="namespacearmnn.xhtml#aff209afc1dc598da399e3e78617ce016a46e8b7bfd6fd3c0cb34a100478a39189">ExportToTarget</a>, <span class="comment">/// Source backends tensor data can be exported to destination backend tensor without copy.</span></div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;<span class="comment"></span> <a class="code" href="namespacearmnn.xhtml#aff209afc1dc598da399e3e78617ce016ac366da48cc11956ae377a77751936852">CopyToTarget</a> <span class="comment">/// Copy contents from source backend tensor to destination backend tensor.</span></div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;<span class="comment"></span>};</div><div class="ttc" id="namespacearmnn_xhtml_aff209afc1dc598da399e3e78617ce016a78d1be0baa31e083ae8da99aaedaf650"><div class="ttname"><a href="namespacearmnn.xhtml#aff209afc1dc598da399e3e78617ce016a78d1be0baa31e083ae8da99aaedaf650">armnn::EdgeStrategy::DirectCompatibility</a></div><div class="ttdoc">No strategy has been defined. Used internally to verify integrity of optimizations. </div></div>
+<div class="ttc" id="namespacearmnn_xhtml_aff209afc1dc598da399e3e78617ce016ac366da48cc11956ae377a77751936852"><div class="ttname"><a href="namespacearmnn.xhtml#aff209afc1dc598da399e3e78617ce016ac366da48cc11956ae377a77751936852">armnn::EdgeStrategy::CopyToTarget</a></div><div class="ttdoc">Source backends tensor data can be exported to destination backend tensor without copy...</div></div>
+<div class="ttc" id="namespacearmnn_xhtml_aff209afc1dc598da399e3e78617ce016a46e8b7bfd6fd3c0cb34a100478a39189"><div class="ttname"><a href="namespacearmnn.xhtml#aff209afc1dc598da399e3e78617ce016a46e8b7bfd6fd3c0cb34a100478a39189">armnn::EdgeStrategy::ExportToTarget</a></div><div class="ttdoc">Destination backend can work directly with tensors on source backend. </div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360"><div class="ttname"><a href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">armnn::Compute::Undefined</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a34eaed09302a4d7bfe930c13a7673e0b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a34eaed09302a4d7bfe930c13a7673e0b">&#9670;&nbsp;</a></span>GraphEvent</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="namespacearmnn.xhtml#a34eaed09302a4d7bfe930c13a7673e0b">GraphEvent</a></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">strong</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a34eaed09302a4d7bfe930c13a7673e0ba23c3efdd3f80798660ecf0b9af6dd5dd"></a>LayerAdded&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a34eaed09302a4d7bfe930c13a7673e0bad6e393dc30fd33cbcb5f6ab199093528"></a>LayerErased&#160;</td><td class="fielddoc"></td></tr>
+</table>
+
+<p class="definition">Definition at line <a class="el" href="_i_graph_observable_8hpp_source.xhtml#l00012">12</a> of file <a class="el" href="_i_graph_observable_8hpp_source.xhtml">IGraphObservable.hpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;{</div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; <a class="code" href="namespacearmnn.xhtml#a34eaed09302a4d7bfe930c13a7673e0ba23c3efdd3f80798660ecf0b9af6dd5dd">LayerAdded</a>,</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; <a class="code" href="namespacearmnn.xhtml#a34eaed09302a4d7bfe930c13a7673e0bad6e393dc30fd33cbcb5f6ab199093528">LayerErased</a></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;};</div><div class="ttc" id="namespacearmnn_xhtml_a34eaed09302a4d7bfe930c13a7673e0ba23c3efdd3f80798660ecf0b9af6dd5dd"><div class="ttname"><a href="namespacearmnn.xhtml#a34eaed09302a4d7bfe930c13a7673e0ba23c3efdd3f80798660ecf0b9af6dd5dd">armnn::GraphEvent::LayerAdded</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a34eaed09302a4d7bfe930c13a7673e0bad6e393dc30fd33cbcb5f6ab199093528"><div class="ttname"><a href="namespacearmnn.xhtml#a34eaed09302a4d7bfe930c13a7673e0bad6e393dc30fd33cbcb5f6ab199093528">armnn::GraphEvent::LayerErased</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a4e2dd387ba6f0dc5164b4cdf8de3262a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4e2dd387ba6f0dc5164b4cdf8de3262a">&#9670;&nbsp;</a></span>JsonObjectType</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="namespacearmnn.xhtml#a4e2dd387ba6f0dc5164b4cdf8de3262a">JsonObjectType</a></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">strong</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a4e2dd387ba6f0dc5164b4cdf8de3262aa911842b19d8b2f9bbed8cfe909d52975"></a>Measurement&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a4e2dd387ba6f0dc5164b4cdf8de3262aaa4ecfc70574394990cf17bd83df499f7"></a>Event&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a4e2dd387ba6f0dc5164b4cdf8de3262aaf7a45ae663528701f33ee482ce67af62"></a>ExecObjectDesc&#160;</td><td class="fielddoc"></td></tr>
+</table>
+
+<p class="definition">Definition at line <a class="el" href="_json_printer_8hpp_source.xhtml#l00020">20</a> of file <a class="el" href="_json_printer_8hpp_source.xhtml">JsonPrinter.hpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;{</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4e2dd387ba6f0dc5164b4cdf8de3262aa911842b19d8b2f9bbed8cfe909d52975">Measurement</a>,</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4e2dd387ba6f0dc5164b4cdf8de3262aaa4ecfc70574394990cf17bd83df499f7">Event</a>,</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4e2dd387ba6f0dc5164b4cdf8de3262aaf7a45ae663528701f33ee482ce67af62">ExecObjectDesc</a></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;};</div><div class="ttc" id="namespacearmnn_xhtml_a4e2dd387ba6f0dc5164b4cdf8de3262aaf7a45ae663528701f33ee482ce67af62"><div class="ttname"><a href="namespacearmnn.xhtml#a4e2dd387ba6f0dc5164b4cdf8de3262aaf7a45ae663528701f33ee482ce67af62">armnn::JsonObjectType::ExecObjectDesc</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a4e2dd387ba6f0dc5164b4cdf8de3262aa911842b19d8b2f9bbed8cfe909d52975"><div class="ttname"><a href="namespacearmnn.xhtml#a4e2dd387ba6f0dc5164b4cdf8de3262aa911842b19d8b2f9bbed8cfe909d52975">armnn::JsonObjectType::Measurement</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a4e2dd387ba6f0dc5164b4cdf8de3262aaa4ecfc70574394990cf17bd83df499f7"><div class="ttname"><a href="namespacearmnn.xhtml#a4e2dd387ba6f0dc5164b4cdf8de3262aaa4ecfc70574394990cf17bd83df499f7">armnn::JsonObjectType::Event</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a56943a0946e5f15e5e58054b8e7a04a4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a56943a0946e5f15e5e58054b8e7a04a4">&#9670;&nbsp;</a></span>LayerType</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">strong</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>When adding a new layer, adapt also the LastLayer enum value in the enum class LayerType below. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a9dce5fd6b5c1ec5baca837bbd273b33c"></a>X&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4aa9a62e70841c4d06dd16306a85700d36"></a>Activation&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a7c5531bbefed0945814f874baf9e0e0f"></a>Addition&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a2139684546b147c106b329f41547640c"></a>ArgMinMax&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4ae4743c3ec15d1d84169b17264634692e"></a>BatchNormalization&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a6ee06c6045d0c5b6565a247955ef0fc2"></a>BatchToSpaceNd&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4af6c0e3a1c3cfabd32ae8d3ae741fcf0a"></a>Comparison&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4ae20f0f2826a6549809f050b86274567f"></a>Concat&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4acb17869fe51048b5a5c4c6106551a255"></a>Constant&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a2ba4c46787312a2467153f40c542851a"></a>ConvertBf16ToFp32&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a912a4b4d73726c282e3f79aa2c390d6c"></a>ConvertFp16ToFp32&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a6512859957de2cf2a5fe4dccb07bd9da"></a>ConvertFp32ToBf16&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4addf4f83b056acd5549949fc0350e9aad"></a>ConvertFp32ToFp16&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4adb033d2f81b68f9a17e8f62de69fed4a"></a>Convolution2d&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4aa603905470e2a5b8c13e96b579ef0dba"></a>Debug&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a731729ad1b2c0eb9399b62c770b3482d"></a>DepthToSpace&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4af97adbfc88b7012a0243215b1076e7e7"></a>DepthwiseConvolution2d&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a9bc35e069257a508e14ed82965a8661d"></a>Dequantize&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a1db19222ac424bd7162142ddf929fd2a"></a>DetectionPostProcess&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a3025cdaab2deb0bb2cd642449e570833"></a>Division&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4abcd30d7ea97ad20c2cddc0f47e6b70c7"></a>ElementwiseUnary&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a3489c7b05e180496cb2ce8ac73887f48"></a>FakeQuantization&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4adb3e3f51c9107e26c9bccf9a188ce2ed"></a>Fill&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4af3f6d0343d56ce88ce7958170ed05cb3"></a>Floor&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4acab78faff25393e9defd1911cb58133e"></a>FullyConnected&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4aad22c799930d644e8468fe44c0312d53"></a>Gather&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a324118a6721dd6b8a9b9f4e327df2bf5"></a>Input&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a21baa4498161d195f5bb2e3627344ba4"></a>InstanceNormalization&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a1189467870bc421ae59277e750263eb2"></a>L2Normalization&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4af4f53c8297dc1cb53d4e6f8151070a30"></a>LogicalBinary&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4ac21dbda57d88c21ec9857f5d1522c488"></a>LogSoftmax&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a06b091bc9aea697ba473c71f0bb55925"></a>Lstm&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a91880b71ea6d007439b7bc7c320b5c25"></a>QLstm&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a46f3ea056caa3126b91f3f70beea068c"></a>Map&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a8321e79c278ec510f63675c040594892"></a>Maximum&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a3d6c9ac08ada31c184094bbc67afe00d"></a>Mean&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a4dd48794eb3305a0f5aece88b111a97b"></a>MemCopy&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a115bfc5d633eae55c67f9588acdd2bf9"></a>MemImport&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a68be4837f6c739877233e527a996dd00"></a>Merge&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4aa1d0ec6d56f8833a078b5a7ac4caf2d4"></a>Minimum&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a27d1a1f7b7c2180e5b20ce9e3d00e2dd"></a>Multiplication&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4aac61f2e17250a818dee4d12b112aa88f"></a>Normalization&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a29c2c02a361c9d7028472e5d92cd4a54"></a>Output&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4ade43468adaf6acb2c38ebc0c1176f82f"></a>Pad&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4afa662c6eb71caef475b2b981ce8eccd7"></a>Permute&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4ad662867a41bfb30b9f75dda2b5849001"></a>Pooling2d&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a1ba143ebe524d46181a4b53470693278"></a>PreCompiled&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a0c5967f09e0669c840ebb1ed0da85e32"></a>Prelu&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4aca39930e22f40d10155a57dba32240bb"></a>Quantize&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a890a37ff3bfe123414ba7e6f052b49f3"></a>QuantizedLstm&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4aa7c59ccedc6a3bd90c17f3b990afefad"></a>Reshape&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a021da1b20f73dc252361a54d80497ef3"></a>Rank&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a9d723d04c40bfd81835c0766a698cf63"></a>Resize&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4aec4875f03ff0bb0b26cf76ac7f41e3c8"></a>Reduce&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4ad140d37ad98c12ccd8e1c432f548bcdb"></a>Slice&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a31d953b9d49a6b4378f45097047976d0"></a>Softmax&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a337c392144dca0d18290c6b4711a2279"></a>SpaceToBatchNd&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a5e7ff12da912dc79e7e547281823fa4a"></a>SpaceToDepth&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a41cb9b797ebc6f6f6314e3ded935f4cf"></a>Splitter&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a2187e1021a911b3807cc1bea2eb1a9ca"></a>Stack&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a93bca63ecbb003649425dd0e4ba79a99"></a>StandIn&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4aa31904f2b3479b5a00137fd985974b4d"></a>StridedSlice&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a6eb8b8b560161603402c0238b3a7d8b0"></a>Subtraction&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4abbc155fb2b111bf61c4f5ff892915e6b"></a>Switch&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4aaf70b1ac863830a4e1ce6268c8399f54"></a>Transpose&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a71b23d26c0f5d20416d6c77754f9806a"></a>TransposeConvolution2d&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a48180ddd584de21589006d56a86d3410"></a>Unmap&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a4cd9f3996d60790cd11c04f842ebc43c"></a>Cast&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a880c1273b27d27cfc82004c3a4b205c9"></a>Shape&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a300124b2433e0376ec4b19251ac3a9e5"></a>UnidirectionalSequenceLstm&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a0ca5f33c1d35fd4105d3a26a2823f9dd"></a>ChannelShuffle&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a583550d0f265fd3756f7de0e42c51953"></a>Convolution3d&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a2b3140dc366b9fcd25ed786a79d1817c"></a>Pooling3d&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4ae66a93a31fb93839c8369265cd44695c"></a>FirstLayer&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a56943a0946e5f15e5e58054b8e7a04a4a33cae35d37c1b558ecd35dd5e37dd80f"></a>LastLayer&#160;</td><td class="fielddoc"></td></tr>
+</table>
+
+<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00458">458</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160;{</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160;<span class="preprocessor">#define X(name) name,</span></div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; <a class="code" href="_types_8hpp.xhtml#ac6d0779b576215649c2610ef2bd1903f">LIST_OF_LAYER_TYPE</a></div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160;<span class="preprocessor">#undef X</span></div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4ae66a93a31fb93839c8369265cd44695c">FirstLayer</a> = <a class="code" href="namespacearmnn.xhtml#a7636fbbc4f8ea2d0cf9f3ac2d12a4c62">Activation</a>,</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a33cae35d37c1b558ecd35dd5e37dd80f">LastLayer</a> = <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a300124b2433e0376ec4b19251ac3a9e5">UnidirectionalSequenceLstm</a></div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160;};</div><div class="ttc" id="_types_8hpp_xhtml_ac6d0779b576215649c2610ef2bd1903f"><div class="ttname"><a href="_types_8hpp.xhtml#ac6d0779b576215649c2610ef2bd1903f">LIST_OF_LAYER_TYPE</a></div><div class="ttdeci">#define LIST_OF_LAYER_TYPE</div><div class="ttdoc">This list uses X macro technique. </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00380">Types.hpp:380</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a7636fbbc4f8ea2d0cf9f3ac2d12a4c62"><div class="ttname"><a href="namespacearmnn.xhtml#a7636fbbc4f8ea2d0cf9f3ac2d12a4c62">armnn::Activation</a></div><div class="ttdeci">float Activation(float in, ActivationFunction function, float a, float b)</div><div class="ttdef"><b>Definition:</b> <a href="_activation_8cpp_source.xhtml#l00013">Activation.cpp:13</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a56943a0946e5f15e5e58054b8e7a04a4ae66a93a31fb93839c8369265cd44695c"><div class="ttname"><a href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4ae66a93a31fb93839c8369265cd44695c">armnn::LayerType::FirstLayer</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a56943a0946e5f15e5e58054b8e7a04a4a33cae35d37c1b558ecd35dd5e37dd80f"><div class="ttname"><a href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a33cae35d37c1b558ecd35dd5e37dd80f">armnn::LayerType::LastLayer</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a56943a0946e5f15e5e58054b8e7a04a4a300124b2433e0376ec4b19251ac3a9e5"><div class="ttname"><a href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a300124b2433e0376ec4b19251ac3a9e5">armnn::LayerType::UnidirectionalSequenceLstm</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a2da4db0140d1a6dc69c9c82e9ef5379e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2da4db0140d1a6dc69c9c82e9ef5379e">&#9670;&nbsp;</a></span>LogicalBinaryOperation</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="namespacearmnn.xhtml#a2da4db0140d1a6dc69c9c82e9ef5379e">LogicalBinaryOperation</a></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">strong</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a2da4db0140d1a6dc69c9c82e9ef5379ea103aa83df42877d5f9baeafdbf620b55"></a>LogicalAnd&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a2da4db0140d1a6dc69c9c82e9ef5379ea74ce78827b02c650a20b149765388247"></a>LogicalOr&#160;</td><td class="fielddoc"></td></tr>
+</table>
+
+<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00105">105</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;{</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <a class="code" href="namespacearmnn.xhtml#a2da4db0140d1a6dc69c9c82e9ef5379ea103aa83df42877d5f9baeafdbf620b55">LogicalAnd</a> = 0,</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <a class="code" href="namespacearmnn.xhtml#a2da4db0140d1a6dc69c9c82e9ef5379ea74ce78827b02c650a20b149765388247">LogicalOr</a> = 1</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;};</div><div class="ttc" id="namespacearmnn_xhtml_a2da4db0140d1a6dc69c9c82e9ef5379ea103aa83df42877d5f9baeafdbf620b55"><div class="ttname"><a href="namespacearmnn.xhtml#a2da4db0140d1a6dc69c9c82e9ef5379ea103aa83df42877d5f9baeafdbf620b55">armnn::LogicalBinaryOperation::LogicalAnd</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a2da4db0140d1a6dc69c9c82e9ef5379ea74ce78827b02c650a20b149765388247"><div class="ttname"><a href="namespacearmnn.xhtml#a2da4db0140d1a6dc69c9c82e9ef5379ea74ce78827b02c650a20b149765388247">armnn::LogicalBinaryOperation::LogicalOr</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a93a3ba385cad27c4774e5fe64c025d3d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a93a3ba385cad27c4774e5fe64c025d3d">&#9670;&nbsp;</a></span>LogSeverity</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3d">LogSeverity</a></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">strong</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a93a3ba385cad27c4774e5fe64c025d3dadd4ec0ac4e58f7c32a01244ae91150b1"></a>Trace&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a93a3ba385cad27c4774e5fe64c025d3daa603905470e2a5b8c13e96b579ef0dba"></a>Debug&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a93a3ba385cad27c4774e5fe64c025d3da4059b0251f66a18cb56f544728796875"></a>Info&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a93a3ba385cad27c4774e5fe64c025d3da0eaadb4fcb48a0a0ed7bc9868be9fbaa"></a>Warning&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a93a3ba385cad27c4774e5fe64c025d3da902b0d55fddef6f8d651fe1035b7d4bd"></a>Error&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a93a3ba385cad27c4774e5fe64c025d3da882384ec38ce8d9582b57e70861730e4"></a>Fatal&#160;</td><td class="fielddoc"></td></tr>
+</table>
+
+<p class="definition">Definition at line <a class="el" href="_utils_8hpp_source.xhtml#l00014">14</a> of file <a class="el" href="_utils_8hpp_source.xhtml">Utils.hpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;{</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; <a class="code" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3dadd4ec0ac4e58f7c32a01244ae91150b1">Trace</a>,</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; <a class="code" href="namespacearmnn.xhtml#a5aae369ef847a00062925cea8e9be9c4">Debug</a>,</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; <a class="code" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da4059b0251f66a18cb56f544728796875">Info</a>,</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <a class="code" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da0eaadb4fcb48a0a0ed7bc9868be9fbaa">Warning</a>,</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <a class="code" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da902b0d55fddef6f8d651fe1035b7d4bd">Error</a>,</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <a class="code" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da882384ec38ce8d9582b57e70861730e4">Fatal</a></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;};</div><div class="ttc" id="namespacearmnn_xhtml_a93a3ba385cad27c4774e5fe64c025d3da0eaadb4fcb48a0a0ed7bc9868be9fbaa"><div class="ttname"><a href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da0eaadb4fcb48a0a0ed7bc9868be9fbaa">armnn::LogSeverity::Warning</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a93a3ba385cad27c4774e5fe64c025d3da882384ec38ce8d9582b57e70861730e4"><div class="ttname"><a href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da882384ec38ce8d9582b57e70861730e4">armnn::LogSeverity::Fatal</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a93a3ba385cad27c4774e5fe64c025d3da4059b0251f66a18cb56f544728796875"><div class="ttname"><a href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da4059b0251f66a18cb56f544728796875">armnn::LogSeverity::Info</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a93a3ba385cad27c4774e5fe64c025d3da902b0d55fddef6f8d651fe1035b7d4bd"><div class="ttname"><a href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da902b0d55fddef6f8d651fe1035b7d4bd">armnn::LogSeverity::Error</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a5aae369ef847a00062925cea8e9be9c4"><div class="ttname"><a href="namespacearmnn.xhtml#a5aae369ef847a00062925cea8e9be9c4">armnn::Debug</a></div><div class="ttdeci">void Debug(const TensorInfo &amp;inputInfo, const T *inputData, LayerGuid guid, const std::string &amp;layerName, unsigned int slotIndex)</div><div class="ttdef"><b>Definition:</b> <a href="_debug_8cpp_source.xhtml#l00019">Debug.cpp:19</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a93a3ba385cad27c4774e5fe64c025d3dadd4ec0ac4e58f7c32a01244ae91150b1"><div class="ttname"><a href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3dadd4ec0ac4e58f7c32a01244ae91150b1">armnn::LogSeverity::Trace</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a7100de49939c3e393101f78d425a98c6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7100de49939c3e393101f78d425a98c6">&#9670;&nbsp;</a></span>MemBlockStrategyType</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="namespacearmnn.xhtml#a7100de49939c3e393101f78d425a98c6">MemBlockStrategyType</a></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">strong</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a7100de49939c3e393101f78d425a98c6a568437eb3752bdf14546b5c221ba5be7"></a>SingleAxisPacking&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a7100de49939c3e393101f78d425a98c6ab093fa975bc79c72c686e6d9773a0d1f"></a>MultiAxisPacking&#160;</td><td class="fielddoc"></td></tr>
+</table>
+
+<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00226">226</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160;{</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="comment">// MemBlocks can be packed on the Y axis only, overlap allowed on X axis.</span></div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="comment">// In other words MemBlocks with overlapping lifetimes cannot use the same MemBin,</span></div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="comment">// equivalent to blob or pooling memory management.</span></div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <a class="code" href="namespacearmnn.xhtml#a7100de49939c3e393101f78d425a98c6a568437eb3752bdf14546b5c221ba5be7">SingleAxisPacking</a> = 0,</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="comment">// MemBlocks can be packed on either Y or X axis but cannot overlap on both.</span></div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="comment">// In other words MemBlocks with overlapping lifetimes can use the same MemBin,</span></div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="comment">// equivalent to offset or slab memory management.</span></div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <a class="code" href="namespacearmnn.xhtml#a7100de49939c3e393101f78d425a98c6ab093fa975bc79c72c686e6d9773a0d1f">MultiAxisPacking</a> = 1</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160;};</div><div class="ttc" id="namespacearmnn_xhtml_a7100de49939c3e393101f78d425a98c6ab093fa975bc79c72c686e6d9773a0d1f"><div class="ttname"><a href="namespacearmnn.xhtml#a7100de49939c3e393101f78d425a98c6ab093fa975bc79c72c686e6d9773a0d1f">armnn::MemBlockStrategyType::MultiAxisPacking</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a7100de49939c3e393101f78d425a98c6a568437eb3752bdf14546b5c221ba5be7"><div class="ttname"><a href="namespacearmnn.xhtml#a7100de49939c3e393101f78d425a98c6a568437eb3752bdf14546b5c221ba5be7">armnn::MemBlockStrategyType::SingleAxisPacking</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a14fcd7f88d11cea0a018269dca5f9277"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a14fcd7f88d11cea0a018269dca5f9277">&#9670;&nbsp;</a></span>MemorySource</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="namespacearmnn.xhtml#a14fcd7f88d11cea0a018269dca5f9277">MemorySource</a> : uint32_t</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">strong</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Define the Memory Source to reduce copies. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a14fcd7f88d11cea0a018269dca5f9277aec0fc0100c4fc1ce4eea230c3dc10360"></a>Undefined&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a14fcd7f88d11cea0a018269dca5f9277a1131a914388fac73e5f07b0ba0aad523"></a>Malloc&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a14fcd7f88d11cea0a018269dca5f9277a966e13d8aabbff3966a5cd28d67b4846"></a>DmaBuf&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a14fcd7f88d11cea0a018269dca5f9277a7f9067c59dd34aca0ad09a7f283ed1f8"></a>DmaBufProtected&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a14fcd7f88d11cea0a018269dca5f9277a4bafe7f8ad22a8eca972a7ac5eb6702e"></a>Gralloc&#160;</td><td class="fielddoc"></td></tr>
+</table>
+
+<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00217">217</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; : uint32_t</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;{</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a> = 0,</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <a class="code" href="namespacearmnn.xhtml#a14fcd7f88d11cea0a018269dca5f9277a1131a914388fac73e5f07b0ba0aad523">Malloc</a> = 1,</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <a class="code" href="namespacearmnn.xhtml#a14fcd7f88d11cea0a018269dca5f9277a966e13d8aabbff3966a5cd28d67b4846">DmaBuf</a> = 2,</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <a class="code" href="namespacearmnn.xhtml#a14fcd7f88d11cea0a018269dca5f9277a7f9067c59dd34aca0ad09a7f283ed1f8">DmaBufProtected</a> = 4,</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <a class="code" href="namespacearmnn.xhtml#a14fcd7f88d11cea0a018269dca5f9277a4bafe7f8ad22a8eca972a7ac5eb6702e">Gralloc</a> = 5</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160;};</div><div class="ttc" id="namespacearmnn_xhtml_a14fcd7f88d11cea0a018269dca5f9277a966e13d8aabbff3966a5cd28d67b4846"><div class="ttname"><a href="namespacearmnn.xhtml#a14fcd7f88d11cea0a018269dca5f9277a966e13d8aabbff3966a5cd28d67b4846">armnn::MemorySource::DmaBuf</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a14fcd7f88d11cea0a018269dca5f9277a4bafe7f8ad22a8eca972a7ac5eb6702e"><div class="ttname"><a href="namespacearmnn.xhtml#a14fcd7f88d11cea0a018269dca5f9277a4bafe7f8ad22a8eca972a7ac5eb6702e">armnn::MemorySource::Gralloc</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360"><div class="ttname"><a href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">armnn::Compute::Undefined</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a14fcd7f88d11cea0a018269dca5f9277a1131a914388fac73e5f07b0ba0aad523"><div class="ttname"><a href="namespacearmnn.xhtml#a14fcd7f88d11cea0a018269dca5f9277a1131a914388fac73e5f07b0ba0aad523">armnn::MemorySource::Malloc</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a14fcd7f88d11cea0a018269dca5f9277a7f9067c59dd34aca0ad09a7f283ed1f8"><div class="ttname"><a href="namespacearmnn.xhtml#a14fcd7f88d11cea0a018269dca5f9277a7f9067c59dd34aca0ad09a7f283ed1f8">armnn::MemorySource::DmaBufProtected</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="abe18a5033f2ab9c0de82c676b48f5437"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abe18a5033f2ab9c0de82c676b48f5437">&#9670;&nbsp;</a></span>NormalizationAlgorithmChannel</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="namespacearmnn.xhtml#abe18a5033f2ab9c0de82c676b48f5437">NormalizationAlgorithmChannel</a></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">strong</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="abe18a5033f2ab9c0de82c676b48f5437a810f43f3996922151c39b76143faeecc"></a>Across&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="abe18a5033f2ab9c0de82c676b48f5437a37bac6dce4f46277d89bfa3003e2e39b"></a>Within&#160;</td><td class="fielddoc"></td></tr>
+</table>
+
+<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00180">180</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;{</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <a class="code" href="namespacearmnn.xhtml#abe18a5033f2ab9c0de82c676b48f5437a810f43f3996922151c39b76143faeecc">Across</a> = 0,</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <a class="code" href="namespacearmnn.xhtml#abe18a5033f2ab9c0de82c676b48f5437a37bac6dce4f46277d89bfa3003e2e39b">Within</a> = 1</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;};</div><div class="ttc" id="namespacearmnn_xhtml_abe18a5033f2ab9c0de82c676b48f5437a37bac6dce4f46277d89bfa3003e2e39b"><div class="ttname"><a href="namespacearmnn.xhtml#abe18a5033f2ab9c0de82c676b48f5437a37bac6dce4f46277d89bfa3003e2e39b">armnn::NormalizationAlgorithmChannel::Within</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_abe18a5033f2ab9c0de82c676b48f5437a810f43f3996922151c39b76143faeecc"><div class="ttname"><a href="namespacearmnn.xhtml#abe18a5033f2ab9c0de82c676b48f5437a810f43f3996922151c39b76143faeecc">armnn::NormalizationAlgorithmChannel::Across</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ad605d1661fa0d8c7fea651d82fbe11c9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad605d1661fa0d8c7fea651d82fbe11c9">&#9670;&nbsp;</a></span>NormalizationAlgorithmMethod</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="namespacearmnn.xhtml#ad605d1661fa0d8c7fea651d82fbe11c9">NormalizationAlgorithmMethod</a></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">strong</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ad605d1661fa0d8c7fea651d82fbe11c9ac65d2e51c610dd3853a3c777aa8bfe9d"></a>LocalBrightness&#160;</td><td class="fielddoc"><p>Krichevsky 2012: Local Brightness Normalization. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ad605d1661fa0d8c7fea651d82fbe11c9aa94d2fcabc6b001015aeddfa19266e6f"></a>LocalContrast&#160;</td><td class="fielddoc"><p>Jarret 2009: Local Contrast Normalization. </p>
+</td></tr>
+</table>
+
+<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00186">186</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160;{<span class="comment"></span></div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;<span class="comment"> /// Krichevsky 2012: Local Brightness Normalization</span></div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160;<span class="comment"></span> <a class="code" href="namespacearmnn.xhtml#ad605d1661fa0d8c7fea651d82fbe11c9ac65d2e51c610dd3853a3c777aa8bfe9d">LocalBrightness</a> = 0,<span class="comment"></span></div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160;<span class="comment"> /// Jarret 2009: Local Contrast Normalization</span></div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;<span class="comment"></span> <a class="code" href="namespacearmnn.xhtml#ad605d1661fa0d8c7fea651d82fbe11c9aa94d2fcabc6b001015aeddfa19266e6f">LocalContrast</a> = 1</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;};</div><div class="ttc" id="namespacearmnn_xhtml_ad605d1661fa0d8c7fea651d82fbe11c9aa94d2fcabc6b001015aeddfa19266e6f"><div class="ttname"><a href="namespacearmnn.xhtml#ad605d1661fa0d8c7fea651d82fbe11c9aa94d2fcabc6b001015aeddfa19266e6f">armnn::NormalizationAlgorithmMethod::LocalContrast</a></div><div class="ttdoc">Jarret 2009: Local Contrast Normalization. </div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad605d1661fa0d8c7fea651d82fbe11c9ac65d2e51c610dd3853a3c777aa8bfe9d"><div class="ttname"><a href="namespacearmnn.xhtml#ad605d1661fa0d8c7fea651d82fbe11c9ac65d2e51c610dd3853a3c777aa8bfe9d">armnn::NormalizationAlgorithmMethod::LocalBrightness</a></div><div class="ttdoc">Krichevsky 2012: Local Brightness Normalization. </div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="adf2e5515c4c36a3e7e46bb8b83c6754e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adf2e5515c4c36a3e7e46bb8b83c6754e">&#9670;&nbsp;</a></span>OutputShapeRounding</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="namespacearmnn.xhtml#adf2e5515c4c36a3e7e46bb8b83c6754e">OutputShapeRounding</a></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">strong</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="adf2e5515c4c36a3e7e46bb8b83c6754eaf3f6d0343d56ce88ce7958170ed05cb3"></a>Floor&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="adf2e5515c4c36a3e7e46bb8b83c6754ea3237fbc8204064c106cb9080088a17cb"></a>Ceiling&#160;</td><td class="fielddoc"></td></tr>
+</table>
+
+<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00194">194</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160;{</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <a class="code" href="namespacearmnn.xhtml#adf2e5515c4c36a3e7e46bb8b83c6754eaf3f6d0343d56ce88ce7958170ed05cb3">Floor</a> = 0,</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <a class="code" href="namespacearmnn.xhtml#adf2e5515c4c36a3e7e46bb8b83c6754ea3237fbc8204064c106cb9080088a17cb">Ceiling</a> = 1</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;};</div><div class="ttc" id="namespacearmnn_xhtml_adf2e5515c4c36a3e7e46bb8b83c6754ea3237fbc8204064c106cb9080088a17cb"><div class="ttname"><a href="namespacearmnn.xhtml#adf2e5515c4c36a3e7e46bb8b83c6754ea3237fbc8204064c106cb9080088a17cb">armnn::OutputShapeRounding::Ceiling</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_adf2e5515c4c36a3e7e46bb8b83c6754eaf3f6d0343d56ce88ce7958170ed05cb3"><div class="ttname"><a href="namespacearmnn.xhtml#adf2e5515c4c36a3e7e46bb8b83c6754eaf3f6d0343d56ce88ce7958170ed05cb3">armnn::OutputShapeRounding::Floor</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a3888429b6ebc79f9a7df549e5e4d9a2f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3888429b6ebc79f9a7df549e5e4d9a2f">&#9670;&nbsp;</a></span>PaddingMethod</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="namespacearmnn.xhtml#a3888429b6ebc79f9a7df549e5e4d9a2f">PaddingMethod</a></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">strong</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>The padding method modifies the output of pooling layers. </p>
+<p>In both supported methods, the values are ignored (they are not even zeroes, which would make a difference for max pooling a tensor with negative values). The difference between IgnoreValue and Exclude is that the former counts the padding fields in the divisor of Average and L2 pooling, while Exclude does not. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a3888429b6ebc79f9a7df549e5e4d9a2faad301514192636ad34210adce598a45a"></a>IgnoreValue&#160;</td><td class="fielddoc"><p>The padding fields count, but are ignored. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="a3888429b6ebc79f9a7df549e5e4d9a2fa843f2812f595e7ec7c5036e89fde02d6"></a>Exclude&#160;</td><td class="fielddoc"><p>The padding fields don't count and are ignored. </p>
+</td></tr>
+</table>
+
+<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00161">161</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;{<span class="comment"></span></div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;<span class="comment"> /// The padding fields count, but are ignored</span></div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;<span class="comment"></span> <a class="code" href="namespacearmnn.xhtml#a3888429b6ebc79f9a7df549e5e4d9a2faad301514192636ad34210adce598a45a">IgnoreValue</a> = 0,<span class="comment"></span></div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;<span class="comment"> /// The padding fields don&#39;t count and are ignored</span></div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;<span class="comment"></span> <a class="code" href="namespacearmnn.xhtml#a3888429b6ebc79f9a7df549e5e4d9a2fa843f2812f595e7ec7c5036e89fde02d6">Exclude</a> = 1</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;};</div><div class="ttc" id="namespacearmnn_xhtml_a3888429b6ebc79f9a7df549e5e4d9a2fa843f2812f595e7ec7c5036e89fde02d6"><div class="ttname"><a href="namespacearmnn.xhtml#a3888429b6ebc79f9a7df549e5e4d9a2fa843f2812f595e7ec7c5036e89fde02d6">armnn::PaddingMethod::Exclude</a></div><div class="ttdoc">The padding fields don&amp;#39;t count and are ignored. </div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a3888429b6ebc79f9a7df549e5e4d9a2faad301514192636ad34210adce598a45a"><div class="ttname"><a href="namespacearmnn.xhtml#a3888429b6ebc79f9a7df549e5e4d9a2faad301514192636ad34210adce598a45a">armnn::PaddingMethod::IgnoreValue</a></div><div class="ttdoc">The padding fields count, but are ignored. </div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a14d24d90ab4ba2956e92e27890ba4c91"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a14d24d90ab4ba2956e92e27890ba4c91">&#9670;&nbsp;</a></span>PaddingMode</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="namespacearmnn.xhtml#a14d24d90ab4ba2956e92e27890ba4c91">PaddingMode</a></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">strong</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>The padding mode controls whether the padding should be filled with constant values (Constant), or reflect the input, either including the border values (Symmetric) or not (Reflect). </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a14d24d90ab4ba2956e92e27890ba4c91acb17869fe51048b5a5c4c6106551a255"></a>Constant&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a14d24d90ab4ba2956e92e27890ba4c91a74de3e45e4491e956e8dc18d841d9b00"></a>Reflect&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a14d24d90ab4ba2956e92e27890ba4c91af334649ef5e5d0ffe200751d07012626"></a>Symmetric&#160;</td><td class="fielddoc"></td></tr>
+</table>
+
+<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00173">173</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;{</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <a class="code" href="namespacearmnn.xhtml#a14d24d90ab4ba2956e92e27890ba4c91acb17869fe51048b5a5c4c6106551a255">Constant</a> = 0,</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <a class="code" href="namespacearmnn.xhtml#a14d24d90ab4ba2956e92e27890ba4c91a74de3e45e4491e956e8dc18d841d9b00">Reflect</a> = 1,</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <a class="code" href="namespacearmnn.xhtml#a14d24d90ab4ba2956e92e27890ba4c91af334649ef5e5d0ffe200751d07012626">Symmetric</a> = 2</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;};</div><div class="ttc" id="namespacearmnn_xhtml_a14d24d90ab4ba2956e92e27890ba4c91af334649ef5e5d0ffe200751d07012626"><div class="ttname"><a href="namespacearmnn.xhtml#a14d24d90ab4ba2956e92e27890ba4c91af334649ef5e5d0ffe200751d07012626">armnn::PaddingMode::Symmetric</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a14d24d90ab4ba2956e92e27890ba4c91a74de3e45e4491e956e8dc18d841d9b00"><div class="ttname"><a href="namespacearmnn.xhtml#a14d24d90ab4ba2956e92e27890ba4c91a74de3e45e4491e956e8dc18d841d9b00">armnn::PaddingMode::Reflect</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a14d24d90ab4ba2956e92e27890ba4c91acb17869fe51048b5a5c4c6106551a255"><div class="ttname"><a href="namespacearmnn.xhtml#a14d24d90ab4ba2956e92e27890ba4c91acb17869fe51048b5a5c4c6106551a255">armnn::PaddingMode::Constant</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a961bbfe1db71a848eff5a1f0ab775718"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a961bbfe1db71a848eff5a1f0ab775718">&#9670;&nbsp;</a></span>PoolingAlgorithm</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="namespacearmnn.xhtml#a961bbfe1db71a848eff5a1f0ab775718">PoolingAlgorithm</a></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">strong</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a961bbfe1db71a848eff5a1f0ab775718a6a061313d22e51e0f25b7cd4dc065233"></a>Max&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a961bbfe1db71a848eff5a1f0ab775718ab1897515d548a960afe49ecf66a29021"></a>Average&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a961bbfe1db71a848eff5a1f0ab775718a7e6aa2d53f6ee2b1a34b017fa403cb76"></a>L2&#160;</td><td class="fielddoc"></td></tr>
+</table>
+
+<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00123">123</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;{</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <a class="code" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea6a061313d22e51e0f25b7cd4dc065233">Max</a> = 0,</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <a class="code" href="namespacearmnn.xhtml#a961bbfe1db71a848eff5a1f0ab775718ab1897515d548a960afe49ecf66a29021">Average</a> = 1,</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <a class="code" href="namespacearmnn.xhtml#a961bbfe1db71a848eff5a1f0ab775718a7e6aa2d53f6ee2b1a34b017fa403cb76">L2</a> = 2</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;};</div><div class="ttc" id="namespacearmnn_xhtml_ae7e8cbf71db6a490789ca6dcaa8deeaea6a061313d22e51e0f25b7cd4dc065233"><div class="ttname"><a href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea6a061313d22e51e0f25b7cd4dc065233">armnn::ArgMinMaxFunction::Max</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a961bbfe1db71a848eff5a1f0ab775718ab1897515d548a960afe49ecf66a29021"><div class="ttname"><a href="namespacearmnn.xhtml#a961bbfe1db71a848eff5a1f0ab775718ab1897515d548a960afe49ecf66a29021">armnn::PoolingAlgorithm::Average</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a961bbfe1db71a848eff5a1f0ab775718a7e6aa2d53f6ee2b1a34b017fa403cb76"><div class="ttname"><a href="namespacearmnn.xhtml#a961bbfe1db71a848eff5a1f0ab775718a7e6aa2d53f6ee2b1a34b017fa403cb76">armnn::PoolingAlgorithm::L2</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ae060224135f57f926cbda9d2732a2b1f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae060224135f57f926cbda9d2732a2b1f">&#9670;&nbsp;</a></span>ProfilingDetailsMethod</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="namespacearmnn.xhtml#ae060224135f57f926cbda9d2732a2b1f">ProfilingDetailsMethod</a></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">strong</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Define the behaviour of the internal profiler when outputting network details. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ae060224135f57f926cbda9d2732a2b1faec0fc0100c4fc1ce4eea230c3dc10360"></a>Undefined&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="ae060224135f57f926cbda9d2732a2b1fa497ab261a562e316736c2cb59b839d32"></a>DetailsWithEvents&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="ae060224135f57f926cbda9d2732a2b1fa566666dfc3a9a82da0d7b0816b19f278"></a>DetailsOnly&#160;</td><td class="fielddoc"></td></tr>
+</table>
+
+<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00058">58</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;{</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a> = 0,</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <a class="code" href="namespacearmnn.xhtml#ae060224135f57f926cbda9d2732a2b1fa497ab261a562e316736c2cb59b839d32">DetailsWithEvents</a> = 1,</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <a class="code" href="namespacearmnn.xhtml#ae060224135f57f926cbda9d2732a2b1fa566666dfc3a9a82da0d7b0816b19f278">DetailsOnly</a> = 2</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;};</div><div class="ttc" id="namespacearmnn_xhtml_ae060224135f57f926cbda9d2732a2b1fa566666dfc3a9a82da0d7b0816b19f278"><div class="ttname"><a href="namespacearmnn.xhtml#ae060224135f57f926cbda9d2732a2b1fa566666dfc3a9a82da0d7b0816b19f278">armnn::ProfilingDetailsMethod::DetailsOnly</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ae060224135f57f926cbda9d2732a2b1fa497ab261a562e316736c2cb59b839d32"><div class="ttname"><a href="namespacearmnn.xhtml#ae060224135f57f926cbda9d2732a2b1fa497ab261a562e316736c2cb59b839d32">armnn::ProfilingDetailsMethod::DetailsWithEvents</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360"><div class="ttname"><a href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">armnn::Compute::Undefined</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a8e72227ebe5ac505cf44790f2e6eb488"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8e72227ebe5ac505cf44790f2e6eb488">&#9670;&nbsp;</a></span>QosExecPriority</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="namespacearmnn.xhtml#a8e72227ebe5ac505cf44790f2e6eb488">QosExecPriority</a></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">strong</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a8e72227ebe5ac505cf44790f2e6eb488a28d0edd045e05cf5af64e35ae0c4c6ef"></a>Low&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a8e72227ebe5ac505cf44790f2e6eb488a87f8a6ab85c9ced3702b4ea641ad4bb5"></a>Medium&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a8e72227ebe5ac505cf44790f2e6eb488a655d20c1ca69519ca647684edbb2db35"></a>High&#160;</td><td class="fielddoc"></td></tr>
+</table>
+
+<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00066">66</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;{</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <a class="code" href="namespacearmnn.xhtml#a8e72227ebe5ac505cf44790f2e6eb488a28d0edd045e05cf5af64e35ae0c4c6ef">Low</a> = 0,</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <a class="code" href="namespacearmnn.xhtml#a8e72227ebe5ac505cf44790f2e6eb488a87f8a6ab85c9ced3702b4ea641ad4bb5">Medium</a> = 1,</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <a class="code" href="namespacearmnn.xhtml#a8e72227ebe5ac505cf44790f2e6eb488a655d20c1ca69519ca647684edbb2db35">High</a> = 2</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;};</div><div class="ttc" id="namespacearmnn_xhtml_a8e72227ebe5ac505cf44790f2e6eb488a655d20c1ca69519ca647684edbb2db35"><div class="ttname"><a href="namespacearmnn.xhtml#a8e72227ebe5ac505cf44790f2e6eb488a655d20c1ca69519ca647684edbb2db35">armnn::QosExecPriority::High</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a8e72227ebe5ac505cf44790f2e6eb488a28d0edd045e05cf5af64e35ae0c4c6ef"><div class="ttname"><a href="namespacearmnn.xhtml#a8e72227ebe5ac505cf44790f2e6eb488a28d0edd045e05cf5af64e35ae0c4c6ef">armnn::QosExecPriority::Low</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a8e72227ebe5ac505cf44790f2e6eb488a87f8a6ab85c9ced3702b4ea641ad4bb5"><div class="ttname"><a href="namespacearmnn.xhtml#a8e72227ebe5ac505cf44790f2e6eb488a87f8a6ab85c9ced3702b4ea641ad4bb5">armnn::QosExecPriority::Medium</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="abc05539fc6e7907f32ef0fb242e3b3b0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abc05539fc6e7907f32ef0fb242e3b3b0">&#9670;&nbsp;</a></span>ReduceOperation</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0">ReduceOperation</a></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">strong</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="abc05539fc6e7907f32ef0fb242e3b3b0aa0ec87054b5e5b7847d0d8780a01a3d5"></a>Sum&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="abc05539fc6e7907f32ef0fb242e3b3b0a6a061313d22e51e0f25b7cd4dc065233"></a>Max&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="abc05539fc6e7907f32ef0fb242e3b3b0a3d6c9ac08ada31c184094bbc67afe00d"></a>Mean&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="abc05539fc6e7907f32ef0fb242e3b3b0a78d811e98514cd165dda532286610fd2"></a>Min&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="abc05539fc6e7907f32ef0fb242e3b3b0a362a33c23b08e4a32a4ec53fbb82cccd"></a>Prod&#160;</td><td class="fielddoc"></td></tr>
+</table>
+
+<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00130">130</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;{</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <a class="code" href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0aa0ec87054b5e5b7847d0d8780a01a3d5">Sum</a> = 0,</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <a class="code" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea6a061313d22e51e0f25b7cd4dc065233">Max</a> = 1,</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <a class="code" href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0a3d6c9ac08ada31c184094bbc67afe00d">Mean</a> = 2,</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <a class="code" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea78d811e98514cd165dda532286610fd2">Min</a> = 3,</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <a class="code" href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0a362a33c23b08e4a32a4ec53fbb82cccd">Prod</a> = 4</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;};</div><div class="ttc" id="namespacearmnn_xhtml_abc05539fc6e7907f32ef0fb242e3b3b0a3d6c9ac08ada31c184094bbc67afe00d"><div class="ttname"><a href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0a3d6c9ac08ada31c184094bbc67afe00d">armnn::ReduceOperation::Mean</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ae7e8cbf71db6a490789ca6dcaa8deeaea6a061313d22e51e0f25b7cd4dc065233"><div class="ttname"><a href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea6a061313d22e51e0f25b7cd4dc065233">armnn::ArgMinMaxFunction::Max</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_abc05539fc6e7907f32ef0fb242e3b3b0a362a33c23b08e4a32a4ec53fbb82cccd"><div class="ttname"><a href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0a362a33c23b08e4a32a4ec53fbb82cccd">armnn::ReduceOperation::Prod</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_abc05539fc6e7907f32ef0fb242e3b3b0aa0ec87054b5e5b7847d0d8780a01a3d5"><div class="ttname"><a href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0aa0ec87054b5e5b7847d0d8780a01a3d5">armnn::ReduceOperation::Sum</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ae7e8cbf71db6a490789ca6dcaa8deeaea78d811e98514cd165dda532286610fd2"><div class="ttname"><a href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea78d811e98514cd165dda532286610fd2">armnn::ArgMinMaxFunction::Min</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a9a2af2f8c4af4f9efa8e79417d505ac4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9a2af2f8c4af4f9efa8e79417d505ac4">&#9670;&nbsp;</a></span>ResizeMethod</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="namespacearmnn.xhtml#a9a2af2f8c4af4f9efa8e79417d505ac4">ResizeMethod</a></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">strong</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a9a2af2f8c4af4f9efa8e79417d505ac4aaf17c98bbd83c27d6426d2ff3fa81d7f"></a>Bilinear&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a9a2af2f8c4af4f9efa8e79417d505ac4aaa020331bb30d2fa2ecf7c3a0777823f"></a>NearestNeighbor&#160;</td><td class="fielddoc"></td></tr>
+</table>
+
+<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00139">139</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;{</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <a class="code" href="namespacearmnn.xhtml#a9a2af2f8c4af4f9efa8e79417d505ac4aaf17c98bbd83c27d6426d2ff3fa81d7f">Bilinear</a> = 0,</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <a class="code" href="namespacearmnn.xhtml#a9a2af2f8c4af4f9efa8e79417d505ac4aaa020331bb30d2fa2ecf7c3a0777823f">NearestNeighbor</a> = 1</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;};</div><div class="ttc" id="namespacearmnn_xhtml_a9a2af2f8c4af4f9efa8e79417d505ac4aaf17c98bbd83c27d6426d2ff3fa81d7f"><div class="ttname"><a href="namespacearmnn.xhtml#a9a2af2f8c4af4f9efa8e79417d505ac4aaf17c98bbd83c27d6426d2ff3fa81d7f">armnn::ResizeMethod::Bilinear</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a9a2af2f8c4af4f9efa8e79417d505ac4aaa020331bb30d2fa2ecf7c3a0777823f"><div class="ttname"><a href="namespacearmnn.xhtml#a9a2af2f8c4af4f9efa8e79417d505ac4aaa020331bb30d2fa2ecf7c3a0777823f">armnn::ResizeMethod::NearestNeighbor</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="adf57837d00e8352d9b5cc5ab1fb5fee9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adf57837d00e8352d9b5cc5ab1fb5fee9">&#9670;&nbsp;</a></span>ShapeInferenceMethod</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="namespacearmnn.xhtml#adf57837d00e8352d9b5cc5ab1fb5fee9">ShapeInferenceMethod</a></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">strong</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>The ShapeInferenceMethod modify how the output shapes are treated. </p>
+<p>When ValidateOnly is selected, the output shapes are inferred from the input parameters of the layer and any mismatch is reported. When InferAndValidate is selected 2 actions are performed: (1)infer output shape from inputs and (2)validate the shapes as in ValidateOnly. This option has been added to work with tensors which rank or dimension sizes are not specified explicitly, however this information can be calculated from the inputs. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="adf57837d00e8352d9b5cc5ab1fb5fee9af6486a22a9bb11959bfae60a3e5174b1"></a>ValidateOnly&#160;</td><td class="fielddoc"><p>Validate all output shapes. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="adf57837d00e8352d9b5cc5ab1fb5fee9a5dd7c525cb1500a2181fd4cc079d7acb"></a>InferAndValidate&#160;</td><td class="fielddoc"><p>Infer missing output shapes and validate all output shapes. </p>
+</td></tr>
+</table>
+
+<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00208">208</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160;{<span class="comment"></span></div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160;<span class="comment"> /// Validate all output shapes</span></div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160;<span class="comment"></span> <a class="code" href="namespacearmnn.xhtml#adf57837d00e8352d9b5cc5ab1fb5fee9af6486a22a9bb11959bfae60a3e5174b1">ValidateOnly</a> = 0,<span class="comment"></span></div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160;<span class="comment"> /// Infer missing output shapes and validate all output shapes</span></div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160;<span class="comment"></span> <a class="code" href="namespacearmnn.xhtml#adf57837d00e8352d9b5cc5ab1fb5fee9a5dd7c525cb1500a2181fd4cc079d7acb">InferAndValidate</a> = 1</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160;};</div><div class="ttc" id="namespacearmnn_xhtml_adf57837d00e8352d9b5cc5ab1fb5fee9af6486a22a9bb11959bfae60a3e5174b1"><div class="ttname"><a href="namespacearmnn.xhtml#adf57837d00e8352d9b5cc5ab1fb5fee9af6486a22a9bb11959bfae60a3e5174b1">armnn::ShapeInferenceMethod::ValidateOnly</a></div><div class="ttdoc">Validate all output shapes. </div></div>
+<div class="ttc" id="namespacearmnn_xhtml_adf57837d00e8352d9b5cc5ab1fb5fee9a5dd7c525cb1500a2181fd4cc079d7acb"><div class="ttname"><a href="namespacearmnn.xhtml#adf57837d00e8352d9b5cc5ab1fb5fee9a5dd7c525cb1500a2181fd4cc079d7acb">armnn::ShapeInferenceMethod::InferAndValidate</a></div><div class="ttdoc">Infer missing output shapes and validate all output shapes. </div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a67a0db04d321a74b7e7fcfd3f1a3f70b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a67a0db04d321a74b7e7fcfd3f1a3f70b">&#9670;&nbsp;</a></span>Status</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">Status</a></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">strong</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>enumeration </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a67a0db04d321a74b7e7fcfd3f1a3f70ba505a83f220c02df2f85c3810cd9ceb38"></a>Success&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a67a0db04d321a74b7e7fcfd3f1a3f70bae139a585510a502bbf1841cf589f5086"></a>Failure&#160;</td><td class="fielddoc"></td></tr>
+</table>
+
+<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00029">29</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;{</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70ba505a83f220c02df2f85c3810cd9ceb38">Success</a> = 0,</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70bae139a585510a502bbf1841cf589f5086">Failure</a> = 1</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;};</div><div class="ttc" id="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70ba505a83f220c02df2f85c3810cd9ceb38"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70ba505a83f220c02df2f85c3810cd9ceb38">armnn::Status::Success</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70bae139a585510a502bbf1841cf589f5086"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70bae139a585510a502bbf1841cf589f5086">armnn::Status::Failure</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a707090747256af276c389e0cf1cb0a9a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a707090747256af276c389e0cf1cb0a9a">&#9670;&nbsp;</a></span>TuningLevel</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="namespacearmnn.xhtml#a707090747256af276c389e0cf1cb0a9a">TuningLevel</a></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">strong</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a707090747256af276c389e0cf1cb0a9aa6adf97f83acf6453d4a6a4b1070f3754"></a>None&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a707090747256af276c389e0cf1cb0a9aab571ef5b2664270d25bea4f4b61ffe68"></a>Rapid&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a707090747256af276c389e0cf1cb0a9aa960b44c579bc2f6818d2daaf9e4c16f0"></a>Normal&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a707090747256af276c389e0cf1cb0a9aafaf34f09ea1e93bfbf591e19dc0dfb9f"></a>Exhaustive&#160;</td><td class="fielddoc"></td></tr>
+</table>
+
+<p class="definition">Definition at line <a class="el" href="_cl_backend_context_8cpp_source.xhtml#l00070">70</a> of file <a class="el" href="_cl_backend_context_8cpp_source.xhtml">ClBackendContext.cpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;{</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <a class="code" href="namespacearmnn.xhtml#a707090747256af276c389e0cf1cb0a9aa6adf97f83acf6453d4a6a4b1070f3754">None</a>,</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <a class="code" href="namespacearmnn.xhtml#a707090747256af276c389e0cf1cb0a9aab571ef5b2664270d25bea4f4b61ffe68">Rapid</a>,</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <a class="code" href="namespacearmnn.xhtml#a707090747256af276c389e0cf1cb0a9aa960b44c579bc2f6818d2daaf9e4c16f0">Normal</a>,</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <a class="code" href="namespacearmnn.xhtml#a707090747256af276c389e0cf1cb0a9aafaf34f09ea1e93bfbf591e19dc0dfb9f">Exhaustive</a></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;};</div><div class="ttc" id="namespacearmnn_xhtml_a707090747256af276c389e0cf1cb0a9aab571ef5b2664270d25bea4f4b61ffe68"><div class="ttname"><a href="namespacearmnn.xhtml#a707090747256af276c389e0cf1cb0a9aab571ef5b2664270d25bea4f4b61ffe68">armnn::TuningLevel::Rapid</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a707090747256af276c389e0cf1cb0a9aafaf34f09ea1e93bfbf591e19dc0dfb9f"><div class="ttname"><a href="namespacearmnn.xhtml#a707090747256af276c389e0cf1cb0a9aafaf34f09ea1e93bfbf591e19dc0dfb9f">armnn::TuningLevel::Exhaustive</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a707090747256af276c389e0cf1cb0a9aa960b44c579bc2f6818d2daaf9e4c16f0"><div class="ttname"><a href="namespacearmnn.xhtml#a707090747256af276c389e0cf1cb0a9aa960b44c579bc2f6818d2daaf9e4c16f0">armnn::TuningLevel::Normal</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a707090747256af276c389e0cf1cb0a9aa6adf97f83acf6453d4a6a4b1070f3754"><div class="ttname"><a href="namespacearmnn.xhtml#a707090747256af276c389e0cf1cb0a9aa6adf97f83acf6453d4a6a4b1070f3754">armnn::TuningLevel::None</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a1cfaa710db2a54673b21d2ea2da757c8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1cfaa710db2a54673b21d2ea2da757c8">&#9670;&nbsp;</a></span>UnaryOperation</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8">UnaryOperation</a></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">strong</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a1cfaa710db2a54673b21d2ea2da757c8a1e34af023adeb7d5f484f8eb4b9826b6"></a>Abs&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a1cfaa710db2a54673b21d2ea2da757c8acad39a154bffb61175f674d6eefaf6d0"></a>Exp&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a1cfaa710db2a54673b21d2ea2da757c8aae77f3ad25595e35b327334d89410054"></a>Sqrt&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a1cfaa710db2a54673b21d2ea2da757c8a09bb7f6e2118c85a6a55bd4bf2beeca4"></a>Rsqrt&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a1cfaa710db2a54673b21d2ea2da757c8afb278fa5defd7e699fcbc930c3e76ccd"></a>Neg&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a1cfaa710db2a54673b21d2ea2da757c8a2a25ebd8c909241e3f7818389b804ecc"></a>LogicalNot&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a1cfaa710db2a54673b21d2ea2da757c8ace0be71e33226e4c1db2bcea5959f16b"></a>Log&#160;</td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="a1cfaa710db2a54673b21d2ea2da757c8a0986d137604183312e6d3599578bc6cd"></a>Sin&#160;</td><td class="fielddoc"></td></tr>
+</table>
+
+<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00111">111</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;{</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa1e34af023adeb7d5f484f8eb4b9826b6">Abs</a> = 0,</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <a class="code" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8acad39a154bffb61175f674d6eefaf6d0">Exp</a> = 1,</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaaae77f3ad25595e35b327334d89410054">Sqrt</a> = 2,</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <a class="code" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8a09bb7f6e2118c85a6a55bd4bf2beeca4">Rsqrt</a> = 3,</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <a class="code" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8afb278fa5defd7e699fcbc930c3e76ccd">Neg</a> = 4,</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <a class="code" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8a2a25ebd8c909241e3f7818389b804ecc">LogicalNot</a> = 5,</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <a class="code" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8ace0be71e33226e4c1db2bcea5959f16b">Log</a> = 6,</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <a class="code" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8a0986d137604183312e6d3599578bc6cd">Sin</a> = 7</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;};</div><div class="ttc" id="namespacearmnn_xhtml_a1cfaa710db2a54673b21d2ea2da757c8ace0be71e33226e4c1db2bcea5959f16b"><div class="ttname"><a href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8ace0be71e33226e4c1db2bcea5959f16b">armnn::UnaryOperation::Log</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a56297e0f7b215eea46c818cb7528d9eaaae77f3ad25595e35b327334d89410054"><div class="ttname"><a href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaaae77f3ad25595e35b327334d89410054">armnn::ActivationFunction::Sqrt</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a56297e0f7b215eea46c818cb7528d9eaa1e34af023adeb7d5f484f8eb4b9826b6"><div class="ttname"><a href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa1e34af023adeb7d5f484f8eb4b9826b6">armnn::ActivationFunction::Abs</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a1cfaa710db2a54673b21d2ea2da757c8afb278fa5defd7e699fcbc930c3e76ccd"><div class="ttname"><a href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8afb278fa5defd7e699fcbc930c3e76ccd">armnn::UnaryOperation::Neg</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a1cfaa710db2a54673b21d2ea2da757c8a2a25ebd8c909241e3f7818389b804ecc"><div class="ttname"><a href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8a2a25ebd8c909241e3f7818389b804ecc">armnn::UnaryOperation::LogicalNot</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a1cfaa710db2a54673b21d2ea2da757c8a0986d137604183312e6d3599578bc6cd"><div class="ttname"><a href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8a0986d137604183312e6d3599578bc6cd">armnn::UnaryOperation::Sin</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a1cfaa710db2a54673b21d2ea2da757c8acad39a154bffb61175f674d6eefaf6d0"><div class="ttname"><a href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8acad39a154bffb61175f674d6eefaf6d0">armnn::UnaryOperation::Exp</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a1cfaa710db2a54673b21d2ea2da757c8a09bb7f6e2118c85a6a55bd4bf2beeca4"><div class="ttname"><a href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8a09bb7f6e2118c85a6a55bd4bf2beeca4">armnn::UnaryOperation::Rsqrt</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a7636fbbc4f8ea2d0cf9f3ac2d12a4c62"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7636fbbc4f8ea2d0cf9f3ac2d12a4c62">&#9670;&nbsp;</a></span>Activation() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float Activation </td>
+ <td>(</td>
+ <td class="paramtype">float&#160;</td>
+ <td class="paramname"><em>in</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9ea">ActivationFunction</a>&#160;</td>
+ <td class="paramname"><em>function</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float&#160;</td>
+ <td class="paramname"><em>a</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float&#160;</td>
+ <td class="paramname"><em>b</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_activation_8cpp_source.xhtml#l00013">13</a> of file <a class="el" href="_activation_8cpp_source.xhtml">Activation.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa1e34af023adeb7d5f484f8eb4b9826b6">Abs</a>, <a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaabc5a0f0d6e7cf7fca73299dcd46c0f0d">BoundedReLu</a>, <a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaaed67cf7d54c570e4c4891800f085f41d">Elu</a>, <a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa0877e5b3fbe9d7569df6399609ed0186">HardSwish</a>, <a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaacb7667f5ec2f6e8a5943b781ba6c2735">LeakyReLu</a>, <a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa32a843da6ea40ab3b17a3421ccdf671b">Linear</a>, <a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa3d90c0a5ab3fcf8e6f6608cb3d3a1559">ReLu</a>, <a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa21eebb164e4b8b9bcf64fdb4d8d5dff4">Sigmoid</a>, <a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa6bba7052636d1740303b1b2ef3b53fef">SoftReLu</a>, <a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaaae77f3ad25595e35b327334d89410054">Sqrt</a>, <a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaaceb46ca115d05c51aa5a16a8867c3304">Square</a>, and <a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa23b68da1de2b77d74da9da2635722a3e">TanH</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_activation_8cpp_source.xhtml#l00095">Activation()</a>, <a class="el" href="_lstm_8cpp_source.xhtml#l00013">LstmImpl()</a>, and <a class="el" href="_test_name_and_descriptor_layer_visitor_8cpp_source.xhtml#l00274">TEST_SUITE()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;{</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; <span class="keywordtype">float</span> output;</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="comment">// Compute the result of the activation function.</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keywordflow">switch</span> (<span class="keyword">function</span>)</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; {</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordflow">case</span> ActivationFunction::Linear:</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; {</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; output = a * in + b;</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; }</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keywordflow">case</span> ActivationFunction::Sigmoid:</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; {</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; output = 1.f / (1.f + expf(-in));</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; }</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordflow">case</span> ActivationFunction::ReLu:</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; {</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; output = std::max(0.f, in);</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; }</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">case</span> ActivationFunction::BoundedReLu:</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; {</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; output = std::min(a, std::max(b, in));</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; }</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordflow">case</span> ActivationFunction::SoftReLu:</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; {</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; output = logf(1.0f + expf(in));</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; }</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">case</span> ActivationFunction::LeakyReLu:</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; {</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; output = in &gt; 0.0f ? in : (in * a);</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; }</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordflow">case</span> ActivationFunction::Abs:</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; {</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; output = in &lt; 0 ? -in : in;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; }</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordflow">case</span> ActivationFunction::Sqrt:</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; {</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; output = sqrtf(in);</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; }</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordflow">case</span> ActivationFunction::Square:</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; {</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; output = in * in;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; }</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">case</span> ActivationFunction::TanH:</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; {</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; output = a * tanhf(b * in);</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; }</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">case</span> ActivationFunction::Elu:</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; {</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; output = (in &gt;= 0) ? in : a * (expf(in) - 1);</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; }</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">case</span> ActivationFunction::HardSwish:</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; {</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="comment">// hard_swish(x) = x * relu6(x+3) / 6</span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="comment">// relu6(x) = min(max(x,0),6)</span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; output = in * (std::min(std::max((in + 3),0.0f),6.0f)) / 6;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; }</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; {</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Unsupported activation function&quot;</span>);</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; }</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; }</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordflow">return</span> output;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="ad10d72a6f8859949bbe6134c638ce171"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad10d72a6f8859949bbe6134c638ce171">&#9670;&nbsp;</a></span>Activation() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Activation </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>in</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>out</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>tensorInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9ea">ActivationFunction</a>&#160;</td>
+ <td class="paramname"><em>function</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float&#160;</td>
+ <td class="paramname"><em>a</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float&#160;</td>
+ <td class="paramname"><em>b</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_activation_8cpp_source.xhtml#l00095">95</a> of file <a class="el" href="_activation_8cpp_source.xhtml">Activation.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_activation_8cpp_source.xhtml#l00013">Activation()</a>, <a class="el" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Decoder&lt; IType &gt;::Get()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00196">TensorInfo::GetNumElements()</a>, and <a class="el" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;{</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numElements = tensorInfo.GetNumElements();</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; numElements; i++)</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; {</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; out.<a class="code" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Set</a>(<a class="code" href="namespacearmnn.xhtml#ad10d72a6f8859949bbe6134c638ce171">Activation</a>(in.<a class="code" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Get</a>(), <span class="keyword">function</span>, a, b));</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; ++in;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; ++out;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; }</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; in -= numElements;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; out -= numElements;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_encoder_xhtml_ae3b62b846a9c239f332830b9e36030eb"><div class="ttname"><a href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">armnn::Encoder::Set</a></div><div class="ttdeci">virtual void Set(IType right)=0</div></div>
+<div class="ttc" id="classarmnn_1_1_decoder_xhtml_ac729108381e2340bea12877971713ecb"><div class="ttname"><a href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">armnn::Decoder::Get</a></div><div class="ttdeci">virtual IType Get() const =0</div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad10d72a6f8859949bbe6134c638ce171"><div class="ttname"><a href="namespacearmnn.xhtml#ad10d72a6f8859949bbe6134c638ce171">armnn::Activation</a></div><div class="ttdeci">void Activation(Decoder&lt; float &gt; &amp;in, Encoder&lt; float &gt; &amp;out, const TensorInfo &amp;tensorInfo, ActivationFunction function, float a, float b)</div><div class="ttdef"><b>Definition:</b> <a href="_activation_8cpp_source.xhtml#l00095">Activation.cpp:95</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ae8dcbb74cf0c855724f12833a55a5684"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae8dcbb74cf0c855724f12833a55a5684">&#9670;&nbsp;</a></span>AllocateOutputData()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void armnn::AllocateOutputData </td>
+ <td>(</td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>numOutput</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>numSelected</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::vector&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>boxCorners</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::vector&lt; unsigned int &gt; &amp;&#160;</td>
+ <td class="paramname"><em>outputIndices</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::vector&lt; unsigned int &gt; &amp;&#160;</td>
+ <td class="paramname"><em>selectedBoxes</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::vector&lt; unsigned int &gt; &amp;&#160;</td>
+ <td class="paramname"><em>selectedClasses</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::vector&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>selectedScores</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float *&#160;</td>
+ <td class="paramname"><em>detectionBoxes</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float *&#160;</td>
+ <td class="paramname"><em>detectionScores</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float *&#160;</td>
+ <td class="paramname"><em>detectionClasses</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float *&#160;</td>
+ <td class="paramname"><em>numDetections</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="backends_2reference_2workloads_2_detection_post_process_8cpp_source.xhtml#l00102">102</a> of file <a class="el" href="backends_2reference_2workloads_2_detection_post_process_8cpp_source.xhtml">DetectionPostProcess.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_numeric_cast_8hpp_source.xhtml#l00035">numeric_cast()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="backends_2reference_2workloads_2_detection_post_process_8cpp_source.xhtml#l00140">DetectionPostProcess()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;{</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; numOutput; ++i)</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; {</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> boxIndex = i * 4;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordflow">if</span> (i &lt; numSelected)</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; {</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> boxCornorIndex = selectedBoxes[outputIndices[i]] * 4;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; detectionScores[i] = selectedScores[outputIndices[i]];</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; detectionClasses[i] = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">float</span>&gt;(selectedClasses[outputIndices[i]]);</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; detectionBoxes[boxIndex] = boxCorners[boxCornorIndex];</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; detectionBoxes[boxIndex + 1] = boxCorners[boxCornorIndex + 1];</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; detectionBoxes[boxIndex + 2] = boxCorners[boxCornorIndex + 2];</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; detectionBoxes[boxIndex + 3] = boxCorners[boxCornorIndex + 3];</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; }</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; {</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; detectionScores[i] = 0.0f;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; detectionClasses[i] = 0.0f;</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; detectionBoxes[boxIndex] = 0.0f;</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; detectionBoxes[boxIndex + 1] = 0.0f;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; detectionBoxes[boxIndex + 2] = 0.0f;</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; detectionBoxes[boxIndex + 3] = 0.0f;</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; }</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; }</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; numDetections[0] = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">float</span>&gt;(numSelected);</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a375ca3cff9f1b005d1412dc5f3cf5b6e"><div class="ttname"><a href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a></div><div class="ttdeci">std::enable_if_t&lt; std::is_unsigned&lt; Source &gt;::value &amp;&amp;std::is_unsigned&lt; Dest &gt;::value, Dest &gt; numeric_cast(Source source)</div><div class="ttdef"><b>Definition:</b> <a href="_numeric_cast_8hpp_source.xhtml#l00035">NumericCast.hpp:35</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a5980f7b42f4df041efebdc6ae242f686"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5980f7b42f4df041efebdc6ae242f686">&#9670;&nbsp;</a></span>AllTypesAreEqualImpl() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::AllTypesAreEqualImpl </td>
+ <td>(</td>
+ <td class="paramtype">T&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layer_support_rules_8hpp_source.xhtml#l00059">59</a> of file <a class="el" href="_layer_support_rules_8hpp_source.xhtml">LayerSupportRules.hpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_layer_support_rules_8hpp_source.xhtml#l00065">AllTypesAreEqualImpl()</a>, and <a class="el" href="_layer_support_rules_8hpp_source.xhtml#l00075">TypesAreEqual::TypesAreEqual()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;{</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a2a0bcfb4df0a03357b4cbb8d9e89a3da"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2a0bcfb4df0a03357b4cbb8d9e89a3da">&#9670;&nbsp;</a></span>AllTypesAreEqualImpl() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::AllTypesAreEqualImpl </td>
+ <td>(</td>
+ <td class="paramtype">T&#160;</td>
+ <td class="paramname"><em>t1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T&#160;</td>
+ <td class="paramname"><em>t2</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Rest...&#160;</td>
+ <td class="paramname"><em>rest</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layer_support_rules_8hpp_source.xhtml#l00065">65</a> of file <a class="el" href="_layer_support_rules_8hpp_source.xhtml">LayerSupportRules.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_layer_support_rules_8hpp_source.xhtml#l00059">AllTypesAreEqualImpl()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;{</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; static_assert(std::is_same&lt;T, TensorInfo&gt;::value, <span class="stringliteral">&quot;Type T must be a TensorInfo&quot;</span>);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">return</span> (t1.GetDataType() == t2.GetDataType()) &amp;&amp; <a class="code" href="namespacearmnn.xhtml#a2a0bcfb4df0a03357b4cbb8d9e89a3da">AllTypesAreEqualImpl</a>(t2, rest...);</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a2a0bcfb4df0a03357b4cbb8d9e89a3da"><div class="ttname"><a href="namespacearmnn.xhtml#a2a0bcfb4df0a03357b4cbb8d9e89a3da">armnn::AllTypesAreEqualImpl</a></div><div class="ttdeci">bool AllTypesAreEqualImpl(T t1, T t2, Rest... rest)</div><div class="ttdef"><b>Definition:</b> <a href="_layer_support_rules_8hpp_source.xhtml#l00065">LayerSupportRules.hpp:65</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a4907f6b88c3e72be6b8ae876de355e0a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4907f6b88c3e72be6b8ae876de355e0a">&#9670;&nbsp;</a></span>Append() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void armnn::Append </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_optimizer.xhtml#ad1794808004025d6e06c176507197b24">Optimizer::Optimizations</a> &amp;&#160;</td>
+ <td class="paramname"><em>optimizations</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T &amp;&amp;&#160;</td>
+ <td class="paramname"><em>optimization</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_optimizer_8hpp_source.xhtml#l00030">30</a> of file <a class="el" href="_optimizer_8hpp_source.xhtml">Optimizer.hpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_optimizer_8hpp_source.xhtml#l00036">Append()</a>, and <a class="el" href="_optimizer_8hpp_source.xhtml#l00043">MakeOptimizations()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;{</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; optimizations.emplace_back(<span class="keyword">new</span> T(optimization));</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;};</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a0c8a28b71e49c04596289ff281e58f1a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0c8a28b71e49c04596289ff281e58f1a">&#9670;&nbsp;</a></span>Append() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void armnn::Append </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_optimizer.xhtml#ad1794808004025d6e06c176507197b24">Optimizer::Optimizations</a> &amp;&#160;</td>
+ <td class="paramname"><em>optimizations</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Front &amp;&amp;&#160;</td>
+ <td class="paramname"><em>front</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Others &amp;&amp;...&#160;</td>
+ <td class="paramname"><em>others</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_optimizer_8hpp_source.xhtml#l00036">36</a> of file <a class="el" href="_optimizer_8hpp_source.xhtml">Optimizer.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_optimizer_8hpp_source.xhtml#l00030">Append()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;{</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; Append&lt;Front&gt;(optimizations, std::forward&lt;Front&gt;(front));</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <a class="code" href="namespacearmnn.xhtml#a0c8a28b71e49c04596289ff281e58f1a">Append</a>&lt;Others...&gt;(optimizations, std::forward&lt;Others&gt;(others)...);</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;};</div><div class="ttc" id="namespacearmnn_xhtml_a0c8a28b71e49c04596289ff281e58f1a"><div class="ttname"><a href="namespacearmnn.xhtml#a0c8a28b71e49c04596289ff281e58f1a">armnn::Append</a></div><div class="ttdeci">void Append(Optimizer::Optimizations &amp;optimizations, Front &amp;&amp;front, Others &amp;&amp;... others)</div><div class="ttdef"><b>Definition:</b> <a href="_optimizer_8hpp_source.xhtml#l00036">Optimizer.hpp:36</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a9f31d956861d8277fa5f8fb877dbbb6c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9f31d956861d8277fa5f8fb877dbbb6c">&#9670;&nbsp;</a></span>ApplyBackendOptimizations()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structarmnn_1_1_optimization_result.xhtml">OptimizationResult</a> armnn::ApplyBackendOptimizations </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_optimized_network_impl.xhtml">OptimizedNetworkImpl</a> *&#160;</td>
+ <td class="paramname"><em>optNetObjPtr</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structarmnn_1_1_backend_settings.xhtml">BackendSettings</a> &amp;&#160;</td>
+ <td class="paramname"><em>backendSettings</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a> &amp;&#160;</td>
+ <td class="paramname"><em>backends</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="namespacearmnn.xhtml#a5b6893cda5b69359a4244c06054da18f">ModelOptions</a> &amp;&#160;</td>
+ <td class="paramname"><em>modelOptions</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; std::vector&lt; std::string &gt; &amp;&gt;&#160;</td>
+ <td class="paramname"><em>errMessages</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.xhtml#l01155">1155</a> of file <a class="el" href="_network_8cpp_source.xhtml">Network.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>, <a class="el" href="_profiling_8hpp_source.xhtml#l00220">ARMNN_SCOPED_PROFILING_EVENT</a>, <a class="el" href="_network_8cpp_source.xhtml#l01034">AssignBackends()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00274">Layer::GetBackendId()</a>, <a class="el" href="_optimized_network_impl_8hpp_source.xhtml#l00027">OptimizedNetworkImpl::GetGraph()</a>, <a class="el" href="_subgraph_view_8cpp_source.xhtml#l00300">SubgraphView::GetIConnectableLayers()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00270">Layer::GetType()</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a324118a6721dd6b8a9b9f4e327df2bf5">Input</a>, <a class="el" href="_network_8hpp_source.xhtml#l00268">OptimizationResult::m_Error</a>, <a class="el" href="_backend_settings_8hpp_source.xhtml#l00022">BackendSettings::m_SelectedBackends</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a29c2c02a361c9d7028472e5d92cd4a54">Output</a>, <a class="el" href="_network_8cpp_source.xhtml#l00584">ReportWarning()</a>, <a class="el" href="_subgraph_view_selector_8cpp_source.xhtml#l00259">SubgraphViewSelector::SelectSubgraphs()</a>, <a class="el" href="_graph_8cpp_source.xhtml#l00433">Graph::SubstituteSubgraph()</a>, and <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.xhtml#l01680">Optimize()</a>.</p>
+<div class="fragment"><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160;{</div><div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(optNetObjPtr);</div><div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160; <a class="code" href="_profiling_8hpp.xhtml#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(Compute::Undefined, <span class="stringliteral">&quot;Optimizer_ApplyBackendOptimizations&quot;</span>)</div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160; OptimizationResult result;</div><div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160;</div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160; <span class="comment">// Get the optimized graph</span></div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160; Graph&amp; optGraph = optNetObjPtr-&gt;GetGraph();</div><div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160;</div><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160; <span class="comment">// Run backend specific optimizations</span></div><div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160; for (auto&amp;&amp; selectedBackend : backendSettings.m_SelectedBackends)</div><div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160; {</div><div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160; <span class="keyword">auto</span> backendObjPtr = backends.find(selectedBackend)-&gt;second.get();</div><div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(backendObjPtr);</div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160;</div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160; <span class="comment">// Select sub-graphs based on backend</span></div><div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160; SubgraphViewSelector::Subgraphs subgraphs =</div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160; SubgraphViewSelector::SelectSubgraphs(optGraph,</div><div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160; <span class="comment">// Select layers assigned to the requested backend</span></div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160; [&amp;backendObjPtr](<span class="keyword">const</span> <a class="code" href="namespacearmnn_serializer.xhtml#a9a8118be7780e95363d631cbca7e7800">Layer</a>&amp; layer)</div><div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160; {</div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160;</div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160; <span class="keywordflow">return</span> layer.GetType() != LayerType::Input &amp;&amp;</div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160; layer.GetType() != LayerType::Output &amp;&amp;</div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160; layer.GetBackendId() == backendObjPtr-&gt;GetId();</div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160; });</div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160; <span class="keywordflow">if</span> (subgraphs.empty())</div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160; {</div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160; <span class="comment">// No sub-graphs found, try with next selected backend</span></div><div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160; }</div><div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160;</div><div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160; <span class="comment">// Try to optimize each sub-graph</span></div><div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; subgraph : subgraphs)</div><div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160; {</div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160; <span class="comment">// Try to optimize the current sub-graph</span></div><div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160; <a class="code" href="_profiling_8hpp.xhtml#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(backendObjPtr-&gt;GetId(), <span class="stringliteral">&quot;Optimizer_OptimizeSubgraph&quot;</span>);</div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160; OptimizationViews optimizationViews = backendObjPtr-&gt;OptimizeSubgraphView(*subgraph, modelOptions);</div><div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(optimizationViews.Validate(*subgraph));</div><div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160;</div><div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160; <span class="comment">// Optimization attempted, check the resulting optimized sub-graph</span></div><div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; substitution : optimizationViews.GetSubstitutions())</div><div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160; {</div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160; <span class="comment">// Sub-graph optimized, substitute the sub-graph with the new optimized one in the main optimized graph</span></div><div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160; SubgraphView&amp; replacementSubgraph = substitution.m_ReplacementSubgraph;</div><div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160; SubgraphView&amp; substitutableSubgraph = substitution.m_SubstitutableSubgraph;</div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160; optGraph.SubstituteSubgraph(substitutableSubgraph, replacementSubgraph);</div><div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160;</div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160; <span class="comment">// Assign the current backend to the optimized sub-graph</span></div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160; <span class="keyword">const</span> SubgraphView::IConnectableLayers&amp; subgraphLayers = replacementSubgraph.GetIConnectableLayers();</div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160; std::for_each(subgraphLayers.begin(), subgraphLayers.end(), [&amp;selectedBackend](IConnectableLayer* l)</div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160; {</div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(l);</div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160; PolymorphicDowncast&lt;Layer*&gt;(l)-&gt;SetBackendId(selectedBackend);</div><div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160; });</div><div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160; }</div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160;</div><div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160; <span class="keywordflow">if</span> (!optimizationViews.GetFailedSubgraphs().empty())</div><div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160; {</div><div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160; std::stringstream warningMsg;</div><div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160; warningMsg &lt;&lt; <span class="stringliteral">&quot;Some sub-graph(s) failed to optimized on &quot;</span> &lt;&lt; backendObjPtr-&gt;GetId() &lt;&lt; <span class="stringliteral">&quot; backend.&quot;</span>;</div><div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160; <a class="code" href="namespacearmnn.xhtml#a38e626422579decc13e3ee37da1a84c9">ReportWarning</a>(warningMsg.str(), errMessages);</div><div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160;</div><div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160; <span class="comment">// Failed to optimize the given sub-graph, re-assign the sub-graph layers to other available backends</span></div><div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160; BackendSettings settingsCopy(backendSettings);</div><div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160; <span class="keywordflow">if</span> (!backendObjPtr-&gt;GetId().IsCpuRef())</div><div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160; {</div><div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160; <span class="comment">// Add the current backend to the list of backends to ignore</span></div><div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160; settingsCopy.m_IgnoredBackends.insert(backendObjPtr-&gt;GetId());</div><div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160; }</div><div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160;</div><div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160; <span class="keywordtype">int</span> count=0;</div><div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; failedSubgraph : optimizationViews.GetFailedSubgraphs())</div><div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160; {</div><div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160; <span class="comment">// An error occurred: the optimization was attempted but not performed, try different backends</span></div><div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160; std::stringstream subgraphMsg;</div><div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160; subgraphMsg &lt;&lt; <span class="stringliteral">&quot;Re-assigning backends to &quot;</span> &lt;&lt; failedSubgraph.GetIConnectableLayers().size()</div><div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160; &lt;&lt; <span class="stringliteral">&quot; layers inside sub-graph &quot;</span> &lt;&lt; count++;</div><div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160; <a class="code" href="namespacearmnn.xhtml#a38e626422579decc13e3ee37da1a84c9">ReportWarning</a>(subgraphMsg.str(), errMessages);</div><div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160;</div><div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160; OptimizationResult reassignmentResult = <a class="code" href="namespacearmnn.xhtml#a48e4d70ae8893f6f1a8ebfced5b03a07">AssignBackends</a>(optNetObjPtr,</div><div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160; settingsCopy,</div><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160; *subgraph,</div><div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160; errMessages);</div><div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160; <span class="keywordflow">if</span> (reassignmentResult.m_Error)</div><div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160; {</div><div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160; <span class="comment">// Failed to re-assign one of the remaining backends to each layer of the sub-graph</span></div><div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160; result.m_Error = <span class="keyword">true</span>;</div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160; }</div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160; }</div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160; }</div><div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160; }</div><div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160; }</div><div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160;</div><div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160;}</div><div class="ttc" id="namespacearmnn_serializer_xhtml_a9a8118be7780e95363d631cbca7e7800"><div class="ttname"><a href="namespacearmnn_serializer.xhtml#a9a8118be7780e95363d631cbca7e7800">armnnSerializer::Layer</a></div><div class="ttdeci">Layer</div><div class="ttdef"><b>Definition:</b> <a href="_armnn_schema__generated_8h_source.xhtml#l01243">ArmnnSchema_generated.h:1243</a></div></div>
+<div class="ttc" id="_profiling_8hpp_xhtml_a5ccc65e2c464ac05ce311fdae7ede03a"><div class="ttname"><a href="_profiling_8hpp.xhtml#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a></div><div class="ttdeci">#define ARMNN_SCOPED_PROFILING_EVENT(backendId, name)</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_8hpp_source.xhtml#l00220">Profiling.hpp:220</a></div></div>
+<div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a38e626422579decc13e3ee37da1a84c9"><div class="ttname"><a href="namespacearmnn.xhtml#a38e626422579decc13e3ee37da1a84c9">armnn::ReportWarning</a></div><div class="ttdeci">void ReportWarning(const std::string &amp;warningMessage, Optional&lt; std::vector&lt; std::string &gt; &amp;&gt; warningMessages)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.xhtml#l00584">Network.cpp:584</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a48e4d70ae8893f6f1a8ebfced5b03a07"><div class="ttname"><a href="namespacearmnn.xhtml#a48e4d70ae8893f6f1a8ebfced5b03a07">armnn::AssignBackends</a></div><div class="ttdeci">OptimizationResult AssignBackends(OptimizedNetworkImpl *optNetObjPtr, BackendSettings &amp;backendSettings, SubgraphView &amp;subgraph, Optional&lt; std::vector&lt; std::string &gt; &amp;&gt; errMessages)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.xhtml#l01122">Network.cpp:1122</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ad441be836a142e8935e0413f4a22c9ec"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad441be836a142e8935e0413f4a22c9ec">&#9670;&nbsp;</a></span>ArgMinMax() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void ArgMinMax </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>in</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">OUT *&#160;</td>
+ <td class="paramname"><em>out</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>inputTensorInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>outputTensorInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeae">ArgMinMaxFunction</a>&#160;</td>
+ <td class="paramname"><em>function</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>axis</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="backends_2reference_2workloads_2_arg_min_max_8cpp_source.xhtml#l00016">16</a> of file <a class="el" href="backends_2reference_2workloads_2_arg_min_max_8cpp_source.xhtml">ArgMinMax.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Decoder&lt; IType &gt;::Get()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00195">TensorInfo::GetNumDimensions()</a>, <a class="el" href="_tensor_utils_8cpp_source.xhtml#l00134">armnnUtils::GetNumElementsBetween()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</a>, <a class="el" href="_tensor_utils_8cpp_source.xhtml#l00148">armnnUtils::GetUnsignedAxis()</a>, <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused()</a>, <a class="el" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea6a061313d22e51e0f25b7cd4dc065233">Max</a>, <a class="el" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea78d811e98514cd165dda532286610fd2">Min</a>, and <a class="el" href="_numeric_cast_8hpp_source.xhtml#l00035">numeric_cast()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_test_name_and_descriptor_layer_visitor_8cpp_source.xhtml#l00274">TEST_SUITE()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;{</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(outputTensorInfo);</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> uAxis = <a class="code" href="namespacearmnn_utils.xhtml#ac93cb1365b4bcb67df2a3164606096c5">armnnUtils::GetUnsignedAxis</a>(inputTensorInfo.GetNumDimensions(), axis);</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outerElements = <a class="code" href="namespacearmnn_utils.xhtml#af57864f5e03358d14c2988edae912b8b">armnnUtils::GetNumElementsBetween</a>(inputTensorInfo.GetShape(), 0, uAxis);</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> axisSize = inputTensorInfo.GetShape()[uAxis];</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> innerElements = <a class="code" href="namespacearmnn_utils.xhtml#af57864f5e03358d14c2988edae912b8b">armnnUtils::GetNumElementsBetween</a>(inputTensorInfo.GetShape(),</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; uAxis + 1,</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; inputTensorInfo.GetNumDimensions());</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outer = 0; outer &lt; outerElements; ++outer) {</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inner = 0; inner &lt; innerElements; ++inner) {</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; in[outer * axisSize * innerElements + inner];</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">auto</span> tmpValue = in.<a class="code" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Get</a>();</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> tmpIndex = 0;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 1; i &lt; axisSize; ++i) {</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; in[(outer * axisSize * innerElements) + (i * innerElements) + inner];</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span>&amp; value = in.<a class="code" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Get</a>();</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">if</span> ((<span class="keyword">function</span> == <a class="code" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea78d811e98514cd165dda532286610fd2">armnn::ArgMinMaxFunction::Min</a> &amp;&amp; value &lt; tmpValue) ||</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; (<span class="keyword">function</span> == <a class="code" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea6a061313d22e51e0f25b7cd4dc065233">armnn::ArgMinMaxFunction::Max</a> &amp;&amp; value &gt; tmpValue)) {</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; tmpValue = value;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; tmpIndex = i;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; }</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; }</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; out[outer * innerElements + inner] = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;OUT&gt;(tmpIndex);</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; }</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; }</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;}</div><div class="ttc" id="namespacearmnn_utils_xhtml_af57864f5e03358d14c2988edae912b8b"><div class="ttname"><a href="namespacearmnn_utils.xhtml#af57864f5e03358d14c2988edae912b8b">armnnUtils::GetNumElementsBetween</a></div><div class="ttdeci">unsigned int GetNumElementsBetween(const armnn::TensorShape &amp;shape, unsigned int firstAxisInclusive, unsigned int lastAxisExclusive)</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_utils_8cpp_source.xhtml#l00134">TensorUtils.cpp:134</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="classarmnn_1_1_decoder_xhtml_ac729108381e2340bea12877971713ecb"><div class="ttname"><a href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">armnn::Decoder::Get</a></div><div class="ttdeci">virtual IType Get() const =0</div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ae7e8cbf71db6a490789ca6dcaa8deeaea6a061313d22e51e0f25b7cd4dc065233"><div class="ttname"><a href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea6a061313d22e51e0f25b7cd4dc065233">armnn::ArgMinMaxFunction::Max</a></div></div>
+<div class="ttc" id="namespacearmnn_utils_xhtml_ac93cb1365b4bcb67df2a3164606096c5"><div class="ttname"><a href="namespacearmnn_utils.xhtml#ac93cb1365b4bcb67df2a3164606096c5">armnnUtils::GetUnsignedAxis</a></div><div class="ttdeci">unsigned int GetUnsignedAxis(const unsigned int inputDimension, const int axis)</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_utils_8cpp_source.xhtml#l00148">TensorUtils.cpp:148</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a375ca3cff9f1b005d1412dc5f3cf5b6e"><div class="ttname"><a href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a></div><div class="ttdeci">std::enable_if_t&lt; std::is_unsigned&lt; Source &gt;::value &amp;&amp;std::is_unsigned&lt; Dest &gt;::value, Dest &gt; numeric_cast(Source source)</div><div class="ttdef"><b>Definition:</b> <a href="_numeric_cast_8hpp_source.xhtml#l00035">NumericCast.hpp:35</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ae7e8cbf71db6a490789ca6dcaa8deeaea78d811e98514cd165dda532286610fd2"><div class="ttname"><a href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea78d811e98514cd165dda532286610fd2">armnn::ArgMinMaxFunction::Min</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a1687cef9e4d417595f05519f3b67bf0f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1687cef9e4d417595f05519f3b67bf0f">&#9670;&nbsp;</a></span>ArgMinMax() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">template void armnn::ArgMinMax </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>in</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int32_t *&#160;</td>
+ <td class="paramname"><em>out</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>inputTensorInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>outputTensorInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeae">ArgMinMaxFunction</a>&#160;</td>
+ <td class="paramname"><em>function</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>axis</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a4ef59ef40b2161e37f3e5eb990a342ad"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4ef59ef40b2161e37f3e5eb990a342ad">&#9670;&nbsp;</a></span>ArgMinMax() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">template void armnn::ArgMinMax </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>in</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int64_t *&#160;</td>
+ <td class="paramname"><em>out</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>inputTensorInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>outputTensorInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeae">ArgMinMaxFunction</a>&#160;</td>
+ <td class="paramname"><em>function</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>axis</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a95551c35140e46de7f7690b1f90cc17a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a95551c35140e46de7f7690b1f90cc17a">&#9670;&nbsp;</a></span>ARMNN_DEPRECATED_MSG_REMOVAL_DATE() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">class armnn::ARMNN_DEPRECATED_MSG_REMOVAL_DATE </td>
+ <td>(</td>
+ <td class="paramtype">&quot;Use ABI stable <a class="el" href="classarmnn_1_1_i_strategy.xhtml">IStrategy</a> instead.&quot;&#160;</td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&quot;22.05&quot;&#160;</td>
+ <td class="paramname">&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>Function that an activation layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">activationDescriptor</td><td>- <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml" title="An ActivationDescriptor for the ActivationLayer. ">ActivationDescriptor</a> to configure the activation. </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function that an addition layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function that an arg min max layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">argMinMaxDescriptor</td><td>- <a class="el" href="structarmnn_1_1_arg_min_max_descriptor.xhtml" title="An ArgMinMaxDescriptor for ArgMinMaxLayer. ">ArgMinMaxDescriptor</a> to configure the activation. </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function that a batch normalization layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">mean</td><td>- Pre-calculated mean for each channel. </td></tr>
+ <tr><td class="paramname">variance</td><td>- Pre-calculated variance for each channel. </td></tr>
+ <tr><td class="paramname">beta</td><td>- Per-channel additive factor. </td></tr>
+ <tr><td class="paramname">gamma</td><td>- Per-channel multiplicative factor. </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function that a batch to space ND layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">batchToSpaceNdDescriptor</td><td>- Description of the layer. </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function a Comparison layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">comparisonDescriptor</td><td>- Description of the layer. </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function that a concat layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">concatDescriptor</td><td>- ConcatDescriptor (synonym for <a class="el" href="structarmnn_1_1_origins_descriptor.xhtml" title="An OriginsDescriptor for the ConcatLayer. ">OriginsDescriptor</a>) to configure the concatenation process. Number of Views must be equal to the number of inputs, and their order must match - e.g. first view corresponds to the first input, second view to the second input, etc.... </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function a layer with no inputs and a single output, which always corresponds to the passed in constant tensor should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">input</td><td>- <a class="el" href="classarmnn_1_1_tensor.xhtml" title="A tensor defined by a TensorInfo (shape and data type) and a mutable backing store. ">Tensor</a> to be provided as the only output of the layer. The layer will maintain its own copy of the tensor data, meaning the memory referenced by <em>input</em> can be freed or reused after this function is called. </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function that a 2D convolution layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">convolution2dDescriptor</td><td>- Description of the 2D convolution layer. </td></tr>
+ <tr><td class="paramname">weights</td><td>- <a class="el" href="classarmnn_1_1_tensor.xhtml" title="A tensor defined by a TensorInfo (shape and data type) and a mutable backing store. ">Tensor</a> for the weights data. </td></tr>
+ <tr><td class="paramname">biases</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> tensor for the bias data. If specified, must match the output tensor shape. </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function a depth to space layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">depthToSpaceDescriptor</td><td>- Parameters for the depth to space operation. </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function that a 2D depthwise convolution layer with biases should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">convolution2dDescriptor</td><td>- Description of the 2D depthwise convolution layer. </td></tr>
+ <tr><td class="paramname">weights</td><td>- <a class="el" href="classarmnn_1_1_tensor.xhtml" title="A tensor defined by a TensorInfo (shape and data type) and a mutable backing store. ">Tensor</a> for the weights. Expected format: [channelMultiplier, inputChannels, height, width]. </td></tr>
+ <tr><td class="paramname">biases</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> tensor for the bias data. If specified, must match the output tensor shape. </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function that a Dequantize layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function that a Detection PostProcess layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">descriptor</td><td>- Description of the Detection PostProcess layer. </td></tr>
+ <tr><td class="paramname">anchors</td><td>- <a class="el" href="classarmnn_1_1_tensor.xhtml" title="A tensor defined by a TensorInfo (shape and data type) and a mutable backing store. ">Tensor</a> for the anchors. </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function a division layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function a ElementwiseUnary layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">elementwiseUnaryDescriptor</td><td>- Description of the layer. </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function a fill layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">fillDescriptor</td><td>- Description of the layer </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function a floor layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function that a fully connected layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">fullyConnectedDescriptor</td><td>- Description of the fully connected layer. </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function that a fully connected layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">fullyConnectedDescriptor</td><td>- Description of the fully connected layer. </td></tr>
+ <tr><td class="paramname">weights</td><td>- <a class="el" href="classarmnn_1_1_tensor.xhtml" title="A tensor defined by a TensorInfo (shape and data type) and a mutable backing store. ">Tensor</a> for the weights data. </td></tr>
+ <tr><td class="paramname">biases</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> tensor for the bias data. </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function a Gather layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">gatherDescriptor</td><td>- Parameters for the gather operation. </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function that an <a class="el" href="classarmnn_1_1_input_layer.xhtml" title="A layer user-provided data can be bound to (e.g. inputs, outputs). ">InputLayer</a> should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">id</td><td>- User generated id to uniquely identify a particular input. The same id needs to be specified when passing the inputs to the <a class="el" href="classarmnn_1_1_i_runtime.xhtml#aca51209383683ab8dbe801bbfddfe0c0" title="Evaluates a network using input in inputTensors and outputs filled into outputTensors. ">IRuntime::EnqueueWorkload()</a> function. </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function that an instance normalization layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">desc</td><td>- Parameters for the instance normalization operation. </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function that an L2 normalization layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. Normalization is performed along dimension 1, but requires a 4d input. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">desc</td><td>- Parameters for the L2 normalization operation. </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function that a log softmax layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">logSoftmaxDescriptor</td><td>- LogSoftmaxDescriptor to configure the log softmax. </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function that a logical binary layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">logicalBinaryDescriptor</td><td>- <a class="el" href="structarmnn_1_1_logical_binary_descriptor.xhtml" title="A LogicalBinaryDescriptor for the LogicalBinaryLayer. ">LogicalBinaryDescriptor</a> to configure the logical unary layer. </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function an Lstm layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">descriptor</td><td>- Parameters controlling the operation of the Lstm operation. </td></tr>
+ <tr><td class="paramname">params</td><td>- The weights and biases for the LSTM cell. </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function a Maximum layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function a Mean layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">meanDescriptor</td><td>- Parameters for the mean operation. </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function that a merge layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function a Minimum layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function that a multiplication layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function that a normalization layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">normalizationDescriptor</td><td>- <a class="el" href="structarmnn_1_1_normalization_descriptor.xhtml" title="A NormalizationDescriptor for the NormalizationLayer. ">NormalizationDescriptor</a> to configure the normalization. </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function an output layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">id</td><td>- User generated id to uniquely identify a particular output. The same id needs to be specified when passing the outputs to the <a class="el" href="classarmnn_1_1_i_runtime.xhtml#aca51209383683ab8dbe801bbfddfe0c0" title="Evaluates a network using input in inputTensors and outputs filled into outputTensors. ">IRuntime::EnqueueWorkload()</a> function. </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function a pad layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">paddings</td><td>- n by 2 tensor, where n is the rank of the input tensor, such that paddings[i,0] indicates the amount of padding to add in front of dimension i, and paddings[i,1] indicates the amount of padding to add after the end of dimension i </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function that a permute layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">permuteDescriptor</td><td>- <a class="el" href="structarmnn_1_1_permute_descriptor.xhtml" title="A PermuteDescriptor for the PermuteLayer. ">PermuteDescriptor</a> to configure the permute. </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function that a pooling layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">pooling2dDescriptor</td><td>- <a class="el" href="structarmnn_1_1_pooling2d_descriptor.xhtml" title="A Pooling2dDescriptor for the Pooling2dLayer. ">Pooling2dDescriptor</a> to configure the pooling. </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function that a pooling layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">pooling3dDescriptor</td><td>- <a class="el" href="structarmnn_1_1_pooling3d_descriptor.xhtml" title="A Pooling3dDescriptor for the Pooling3dLayer. ">Pooling3dDescriptor</a> to configure the pooling. </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function that a PReLU activation layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function a quantize layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function a QLstm layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">descriptor</td><td>- Parameters controlling the operation of the QLstm operation. </td></tr>
+ <tr><td class="paramname">params</td><td>- The weights and biases for the layer </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function a QuantizedLstm layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">params</td><td>- The weights and biases for the Quantized LSTM cell </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function a rank layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function that a reduce layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname"><a class="el" href="structarmnn_1_1_reduce_descriptor.xhtml" title="A ReduceDescriptor for the REDUCE operators. ">ReduceDescriptor</a></td><td>- Parameters for the reduce max operation. </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function a reshape layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">reshapeDescriptor</td><td>- Parameters for the reshape operation. </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function that a resize layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">resizeDescriptor</td><td>- Parameters for the resize operation. </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function that a slice layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">sliceDescriptor</td><td>- <a class="el" href="structarmnn_1_1_slice_descriptor.xhtml" title="A SliceDescriptor for the SliceLayer. ">SliceDescriptor</a> to configure the slice operation. </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function that a softmax layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">softmaxDescriptor</td><td>- <a class="el" href="structarmnn_1_1_softmax_descriptor.xhtml" title="A SoftmaxDescriptor for the SoftmaxLayer. ">SoftmaxDescriptor</a> to configure the softmax. </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function a space to batch layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">spaceToBatchNdDescriptor</td><td>- Parameters for the space to batch operation. </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function a space to depth layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">spaceToDepthDescriptor</td><td>- Parameters for the space to depth operation. </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function that a splitter layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">splitterDescriptor</td><td>- <a class="el" href="structarmnn_1_1_views_descriptor.xhtml" title="A ViewsDescriptor for the SplitterLayer. ">ViewsDescriptor</a> to configure the splitting process. Number of Views must be equal to the number of outputs, and their order must match - e.g. first view corresponds to the first output, second view to the second output, etc.... </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function a stack layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">stackDescriptor</td><td>- Parameters for the stack operation. </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function a <a class="el" href="classarmnn_1_1_stand_in_layer.xhtml" title="This layer represents an unknown operation in the input graph. ">StandInLayer</a> should call back to when its Accept(ILaterVisitor&amp;) function is invoked </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">standInDescriptor</td><td>- Parameters for the stand-in layer. </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function a strided slice layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">stridedSliceDescriptor</td><td>- Parameters for the strided slice operation. </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function a subtraction layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function a switch layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function that a 2D transpose convolution layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">descriptor</td><td>- Description of the 2D transpose convolution layer. </td></tr>
+ <tr><td class="paramname">weights</td><td>- <a class="el" href="classarmnn_1_1_tensor.xhtml" title="A tensor defined by a TensorInfo (shape and data type) and a mutable backing store. ">Tensor</a> for the weights data. </td></tr>
+ <tr><td class="paramname">biases</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> tensor for the bias data. </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Function that a transpose layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">layer</td><td>- pointer to the layer which is calling back to this visit function. </td></tr>
+ <tr><td class="paramname">transposeDescriptor</td><td>- <a class="el" href="structarmnn_1_1_transpose_descriptor.xhtml" title="A TransposeDescriptor for the TransposeLayer. ">TransposeDescriptor</a> to configure the transpose. </td></tr>
+ <tr><td class="paramname">name</td><td>- <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a> name for the layer. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p class="definition">Definition at line <a class="el" href="_i_layer_visitor_8hpp_source.xhtml#l00016">16</a> of file <a class="el" href="_i_layer_visitor_8hpp_source.xhtml">ILayerVisitor.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="include_2armnn_2backends_2_workload_data_8hpp_source.xhtml#l00346">ARMNN_DEPRECATED_MSG_REMOVAL_DATE()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;{</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="keyword">protected</span>:</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; ILayerVisitor() {}</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">virtual</span> ~ILayerVisitor() {}</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment"> /// Function that an activation layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked.</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> /// @param activationDescriptor - ActivationDescriptor to configure the activation.</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> VisitActivationLayer(<span class="keyword">const</span> IConnectableLayer* layer,</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keyword">const</span> ActivationDescriptor&amp; activationDescriptor,</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* name = <span class="keyword">nullptr</span>) = 0;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="comment"> /// Function that an addition layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked.</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="comment"></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> VisitAdditionLayer(<span class="keyword">const</span> IConnectableLayer* layer,</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* name = <span class="keyword">nullptr</span>) = 0;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="comment"> /// Function that an arg min max layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked.</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="comment"> /// @param argMinMaxDescriptor - ArgMinMaxDescriptor to configure the activation.</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="comment"></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> VisitArgMinMaxLayer(<span class="keyword">const</span> IConnectableLayer* layer,</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keyword">const</span> ArgMinMaxDescriptor&amp; argMinMaxDescriptor,</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* name = <span class="keyword">nullptr</span>) = 0;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="comment"> /// Function that a batch normalization layer should call back to when its Accept(ILayerVisitor&amp;)</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="comment"> /// function is invoked.</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="comment"> /// @param mean - Pre-calculated mean for each channel.</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="comment"> /// @param variance - Pre-calculated variance for each channel.</span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="comment"> /// @param beta - Per-channel additive factor.</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="comment"> /// @param gamma - Per-channel multiplicative factor.</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="comment"></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> VisitBatchNormalizationLayer(<span class="keyword">const</span> IConnectableLayer* layer,</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keyword">const</span> BatchNormalizationDescriptor&amp; desc,</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keyword">const</span> ConstTensor&amp; mean,</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keyword">const</span> ConstTensor&amp; variance,</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keyword">const</span> ConstTensor&amp; beta,</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keyword">const</span> ConstTensor&amp; gamma,</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* name = <span class="keyword">nullptr</span>) = 0;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;<span class="comment"> /// Function that a batch to space ND layer should call back to when its Accept(ILayerVisitor&amp;)</span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="comment"> /// function is invoked.</span></div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="comment"> /// @param batchToSpaceNdDescriptor - Description of the layer.</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;<span class="comment"></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> VisitBatchToSpaceNdLayer(<span class="keyword">const</span> IConnectableLayer* layer,</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keyword">const</span> BatchToSpaceNdDescriptor&amp; batchToSpaceNdDescriptor,</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* name = <span class="keyword">nullptr</span>) = 0;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="comment"> /// Function a Comparison layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked.</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="comment"> /// @param comparisonDescriptor - Description of the layer.</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="comment"></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> VisitComparisonLayer(<span class="keyword">const</span> IConnectableLayer* layer,</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keyword">const</span> ComparisonDescriptor&amp; comparisonDescriptor,</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* name = <span class="keyword">nullptr</span>) = 0;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;<span class="comment"> /// Function that a concat layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked.</span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="comment"> /// @param concatDescriptor - ConcatDescriptor (synonym for OriginsDescriptor) to configure the concatenation</span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="comment"> /// process. Number of Views must be equal to the number of inputs, and their order</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="comment"> /// must match - e.g. first view corresponds to the first input, second view to the</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="comment"> /// second input, etc....</span></div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;<span class="comment"></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> VisitConcatLayer(<span class="keyword">const</span> IConnectableLayer* layer,</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keyword">const</span> OriginsDescriptor&amp; concatDescriptor,</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* name = <span class="keyword">nullptr</span>) = 0;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;<span class="comment"> /// Function a layer with no inputs and a single output, which always corresponds to</span></div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;<span class="comment"> /// the passed in constant tensor should call back to when its Accept(ILayerVisitor&amp;) function is invoked.</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;<span class="comment"> /// @param input - Tensor to be provided as the only output of the layer. The layer will maintain</span></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;<span class="comment"> /// its own copy of the tensor data, meaning the memory referenced by @a input can</span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;<span class="comment"> /// be freed or reused after this function is called.</span></div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;<span class="comment"></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> VisitConstantLayer(<span class="keyword">const</span> IConnectableLayer* layer,</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keyword">const</span> ConstTensor&amp; input,</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* name = <span class="keyword">nullptr</span>) = 0;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;<span class="comment"> /// Function that a 2D convolution layer should call back to when its Accept(ILayerVisitor&amp;)</span></div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;<span class="comment"> /// function is invoked.</span></div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;<span class="comment"> /// @param convolution2dDescriptor - Description of the 2D convolution layer.</span></div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;<span class="comment"> /// @param weights - Tensor for the weights data.</span></div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;<span class="comment"> /// @param biases - Optional tensor for the bias data. If specified, must match the output tensor shape.</span></div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;<span class="comment"></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> VisitConvolution2dLayer(<span class="keyword">const</span> IConnectableLayer* layer,</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keyword">const</span> Convolution2dDescriptor&amp; convolution2dDescriptor,</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keyword">const</span> ConstTensor&amp; weights,</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keyword">const</span> Optional&lt;ConstTensor&gt;&amp; biases,</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* name = <span class="keyword">nullptr</span>) = 0;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;<span class="comment"> /// Function a depth to space layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked.</span></div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;<span class="comment"> /// @param depthToSpaceDescriptor - Parameters for the depth to space operation.</span></div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;<span class="comment"></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> VisitDepthToSpaceLayer(<span class="keyword">const</span> IConnectableLayer* layer,</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a3647f60510bc8ddaced01c51b0ee8714">DepthToSpaceDescriptor</a>&amp; depthToSpaceDescriptor,</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* name = <span class="keyword">nullptr</span>) = 0;</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;<span class="comment"> /// Function that a 2D depthwise convolution layer with biases should call back to when its</span></div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;<span class="comment"> /// Accept(ILayerVisitor&amp;) function is invoked.</span></div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;<span class="comment"> /// @param convolution2dDescriptor - Description of the 2D depthwise convolution layer.</span></div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;<span class="comment"> /// @param weights - Tensor for the weights. Expected format: [channelMultiplier, inputChannels, height, width].</span></div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;<span class="comment"> /// @param biases - Optional tensor for the bias data. If specified, must match the output tensor shape.</span></div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;<span class="comment"></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> VisitDepthwiseConvolution2dLayer(<span class="keyword">const</span> IConnectableLayer* layer,</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keyword">const</span> DepthwiseConvolution2dDescriptor&amp; convolution2dDescriptor,</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keyword">const</span> ConstTensor&amp; weights,</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keyword">const</span> Optional&lt;ConstTensor&gt;&amp; biases,</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* name = <span class="keyword">nullptr</span>) = 0;</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;<span class="comment"> /// Function that a Dequantize layer should call back to when its</span></div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;<span class="comment"> /// Accept(ILayerVisitor&amp;) function is invoked.</span></div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;<span class="comment"></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> VisitDequantizeLayer(<span class="keyword">const</span> IConnectableLayer* layer,</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* name = <span class="keyword">nullptr</span>) = 0;</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;<span class="comment"> /// Function that a Detection PostProcess layer should call back to when its</span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;<span class="comment"> /// Accept(ILayerVisitor&amp;) function is invoked.</span></div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;<span class="comment"> /// @param descriptor - Description of the Detection PostProcess layer.</span></div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;<span class="comment"> /// @param anchors - Tensor for the anchors.</span></div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;<span class="comment"></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> VisitDetectionPostProcessLayer(<span class="keyword">const</span> IConnectableLayer* layer,</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keyword">const</span> DetectionPostProcessDescriptor&amp; descriptor,</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keyword">const</span> ConstTensor&amp; anchors,</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* name = <span class="keyword">nullptr</span>) = 0;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;<span class="comment"> /// Function a division layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked.</span></div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;<span class="comment"></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> VisitDivisionLayer(<span class="keyword">const</span> IConnectableLayer* layer,</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* name = <span class="keyword">nullptr</span>) = 0;</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;<span class="comment"> /// Function a ElementwiseUnary layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked.</span></div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;<span class="comment"> /// @param elementwiseUnaryDescriptor - Description of the layer.</span></div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;<span class="comment"></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> VisitElementwiseUnaryLayer(<span class="keyword">const</span> IConnectableLayer* layer,</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keyword">const</span> ElementwiseUnaryDescriptor&amp; elementwiseUnaryDescriptor,</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* name = <span class="keyword">nullptr</span>) = 0;</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;<span class="comment"> /// Function a fill layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked.</span></div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;<span class="comment"> /// @param fillDescriptor - Description of the layer</span></div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;<span class="comment"></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> VisitFillLayer(<span class="keyword">const</span> IConnectableLayer* layer,</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="keyword">const</span> FillDescriptor&amp; fillDescriptor,</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* name = <span class="keyword">nullptr</span>) = 0;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;<span class="comment"> /// Function a floor layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked.</span></div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;<span class="comment"></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> VisitFloorLayer(<span class="keyword">const</span> IConnectableLayer* layer,</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* name = <span class="keyword">nullptr</span>) = 0;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160;<span class="comment"> /// Function that a fully connected layer should call back to when its Accept(ILayerVisitor&amp;)</span></div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;<span class="comment"> /// function is invoked.</span></div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;<span class="comment"> /// @param fullyConnectedDescriptor - Description of the fully connected layer.</span></div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160;<span class="comment"></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> VisitFullyConnectedLayer(<span class="keyword">const</span> IConnectableLayer* layer,</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="keyword">const</span> FullyConnectedDescriptor&amp; fullyConnectedDescriptor,</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* name = <span class="keyword">nullptr</span>) = 0;</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;<span class="comment"> /// Function that a fully connected layer should call back to when its Accept(ILayerVisitor&amp;)</span></div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;<span class="comment"> /// function is invoked.</span></div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;<span class="comment"> /// @param fullyConnectedDescriptor - Description of the fully connected layer.</span></div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160;<span class="comment"> /// @param weights - Tensor for the weights data.</span></div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160;<span class="comment"> /// @param biases - Optional tensor for the bias data.</span></div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;<span class="comment"></span> <a class="code" href="_deprecated_8hpp.xhtml#af16119336bd0dfbfbc83fc283151067e">ARMNN_DEPRECATED_MSG_REMOVAL_DATE</a>(<span class="stringliteral">&quot;Use VisitFullyConnectedLayer without ConstTensors&quot;</span>, <span class="stringliteral">&quot;22.05&quot;</span>)</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; virtual <span class="keywordtype">void</span> VisitFullyConnectedLayer(const IConnectableLayer* layer,</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; const FullyConnectedDescriptor&amp; fullyConnectedDescriptor,</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; const ConstTensor&amp; weights,</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; const Optional&lt;ConstTensor&gt;&amp; biases,</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; const <span class="keywordtype">char</span>* name = <span class="keywordtype">nullptr</span>) = 0;</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;<span class="comment"> /// Function a Gather layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked.</span></div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;<span class="comment"> /// @param gatherDescriptor - Parameters for the gather operation.</span></div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160;<span class="comment"></span> virtual <span class="keywordtype">void</span> VisitGatherLayer(const IConnectableLayer* layer,</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; const GatherDescriptor&amp; gatherDescriptor,</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; const <span class="keywordtype">char</span>* name = <span class="keywordtype">nullptr</span>) = 0;</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160;<span class="comment"> /// Function that an InputLayer should call back to when its Accept(ILayerVisitor&amp;) function is invoked.</span></div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160;<span class="comment"> /// @param id - User generated id to uniquely identify a particular input. The same id needs to be specified</span></div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160;<span class="comment"> /// when passing the inputs to the IRuntime::EnqueueWorkload() function.</span></div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;<span class="comment"></span> virtual <span class="keywordtype">void</span> VisitInputLayer(const IConnectableLayer* layer,</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <a class="code" href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">LayerBindingId</a> <span class="keywordtype">id</span>,</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; const <span class="keywordtype">char</span>* name = <span class="keywordtype">nullptr</span>) = 0;</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;<span class="comment"> /// Function that an instance normalization layer should call back to when its Accept(ILayerVisitor&amp;)</span></div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;<span class="comment"> /// function is invoked.</span></div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160;<span class="comment"> /// @param desc - Parameters for the instance normalization operation.</span></div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160;<span class="comment"></span> virtual <span class="keywordtype">void</span> VisitInstanceNormalizationLayer(const IConnectableLayer* layer,</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; const InstanceNormalizationDescriptor&amp; desc,</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; const <span class="keywordtype">char</span>* name = <span class="keywordtype">nullptr</span>) = 0;</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160;<span class="comment"> /// Function that an L2 normalization layer should call back to when its Accept(ILayerVisitor&amp;)</span></div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;<span class="comment"> /// function is invoked. Normalization is performed along dimension 1, but requires a 4d input.</span></div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;<span class="comment"> /// @param desc - Parameters for the L2 normalization operation.</span></div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160;<span class="comment"></span> virtual <span class="keywordtype">void</span> VisitL2NormalizationLayer(const IConnectableLayer* layer,</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; const L2NormalizationDescriptor&amp; desc,</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; const <span class="keywordtype">char</span>* name = <span class="keywordtype">nullptr</span>) = 0;</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160;<span class="comment"> /// Function that a log softmax layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked.</span></div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;<span class="comment"> /// @param logSoftmaxDescriptor - LogSoftmaxDescriptor to configure the log softmax.</span></div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;<span class="comment"></span> virtual <span class="keywordtype">void</span> VisitLogSoftmaxLayer(const IConnectableLayer* layer,</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; const <a class="code" href="namespacearmnn.xhtml#ac14705405cbcdd580df613de6766fe65">LogSoftmaxDescriptor</a>&amp; logSoftmaxDescriptor,</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; const <span class="keywordtype">char</span>* name = <span class="keywordtype">nullptr</span>) = 0;</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160;<span class="comment"> /// Function that a logical binary layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked.</span></div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160;<span class="comment"> /// @param logicalBinaryDescriptor - LogicalBinaryDescriptor to configure the logical unary layer.</span></div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160;<span class="comment"></span> virtual <span class="keywordtype">void</span> VisitLogicalBinaryLayer(const IConnectableLayer* layer,</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; const LogicalBinaryDescriptor&amp; logicalBinaryDescriptor,</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; const <span class="keywordtype">char</span>* name = <span class="keywordtype">nullptr</span>) = 0;</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;<span class="comment"> /// Function an Lstm layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked.</span></div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;<span class="comment"> /// @param descriptor - Parameters controlling the operation of the Lstm operation.</span></div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160;<span class="comment"> /// @param params - The weights and biases for the LSTM cell.</span></div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160;<span class="comment"></span> virtual <span class="keywordtype">void</span> VisitLstmLayer(const IConnectableLayer* layer,</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; const LstmDescriptor&amp; descriptor,</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; const LstmInputParams&amp; params,</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; const <span class="keywordtype">char</span>* name = <span class="keywordtype">nullptr</span>) = 0;</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;<span class="comment"> /// Function a Maximum layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked.</span></div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;<span class="comment"></span> virtual <span class="keywordtype">void</span> VisitMaximumLayer(const IConnectableLayer* layer,</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; const <span class="keywordtype">char</span>* name = <span class="keywordtype">nullptr</span>) = 0;</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;<span class="comment"> /// Function a Mean layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked.</span></div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160;<span class="comment"> /// @param meanDescriptor - Parameters for the mean operation.</span></div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160;<span class="comment"></span> virtual <span class="keywordtype">void</span> VisitMeanLayer(const IConnectableLayer* layer,</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; const MeanDescriptor&amp; meanDescriptor,</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; const <span class="keywordtype">char</span>* name = <span class="keywordtype">nullptr</span>) = 0;</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160;<span class="comment"> /// Function that a merge layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked.</span></div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160;<span class="comment"></span> virtual <span class="keywordtype">void</span> VisitMergeLayer(const IConnectableLayer* layer,</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; const <span class="keywordtype">char</span>* name = <span class="keywordtype">nullptr</span>) = 0;</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160;<span class="comment"> /// Function a Minimum layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked.</span></div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160;<span class="comment"></span> virtual <span class="keywordtype">void</span> VisitMinimumLayer(const IConnectableLayer* layer,</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; const <span class="keywordtype">char</span>* name = <span class="keywordtype">nullptr</span>) = 0;</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160;<span class="comment"> /// Function that a multiplication layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked.</span></div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160;<span class="comment"></span> virtual <span class="keywordtype">void</span> VisitMultiplicationLayer(const IConnectableLayer* layer,</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; const <span class="keywordtype">char</span>* name = <span class="keywordtype">nullptr</span>) = 0;</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160;<span class="comment"> /// Function that a normalization layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked.</span></div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160;<span class="comment"> /// @param normalizationDescriptor - NormalizationDescriptor to configure the normalization.</span></div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160;<span class="comment"></span> virtual <span class="keywordtype">void</span> VisitNormalizationLayer(const IConnectableLayer* layer,</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; const NormalizationDescriptor&amp; normalizationDescriptor,</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; const <span class="keywordtype">char</span>* name = <span class="keywordtype">nullptr</span>) = 0;</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160;<span class="comment"> /// Function an output layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked.</span></div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;<span class="comment"> /// @param id - User generated id to uniquely identify a particular output. The same id needs to be specified</span></div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;<span class="comment"> /// when passing the outputs to the IRuntime::EnqueueWorkload() function.</span></div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160;<span class="comment"></span> virtual <span class="keywordtype">void</span> VisitOutputLayer(const IConnectableLayer* layer,</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <a class="code" href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">LayerBindingId</a> <span class="keywordtype">id</span>,</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; const <span class="keywordtype">char</span>* name = <span class="keywordtype">nullptr</span>) = 0;</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160;<span class="comment"> /// Function a pad layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked.</span></div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160;<span class="comment"> /// @param paddings - n by 2 tensor, where n is the rank of the input tensor,</span></div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160;<span class="comment"> /// such that paddings[i,0] indicates the amount of padding to add in front of dimension i, and</span></div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160;<span class="comment"> /// paddings[i,1] indicates the amount of padding to add after the end of dimension i</span></div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160;<span class="comment"></span> virtual <span class="keywordtype">void</span> VisitPadLayer(const IConnectableLayer* layer,</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; const PadDescriptor&amp; padDescriptor,</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; const <span class="keywordtype">char</span>* name = <span class="keywordtype">nullptr</span>) = 0;</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160;<span class="comment"> /// Function that a permute layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked.</span></div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160;<span class="comment"> /// @param permuteDescriptor - PermuteDescriptor to configure the permute.</span></div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;<span class="comment"></span> virtual <span class="keywordtype">void</span> VisitPermuteLayer(const IConnectableLayer* layer,</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; const PermuteDescriptor&amp; permuteDescriptor,</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; const <span class="keywordtype">char</span>* name = <span class="keywordtype">nullptr</span>) = 0;</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160;<span class="comment"> /// Function that a pooling layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked.</span></div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160;<span class="comment"> /// @param pooling2dDescriptor - Pooling2dDescriptor to configure the pooling.</span></div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160;<span class="comment"></span> virtual <span class="keywordtype">void</span> VisitPooling2dLayer(const IConnectableLayer* layer,</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; const <a class="code" href="namespacearmnn_deserializer.xhtml#a7e75f47f676327bce37149932aa4a011">Pooling2dDescriptor</a>&amp; pooling2dDescriptor,</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; const <span class="keywordtype">char</span>* name = <span class="keywordtype">nullptr</span>) = 0;</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160;<span class="comment"> /// Function that a pooling layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked.</span></div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160;<span class="comment"> /// @param pooling3dDescriptor - Pooling3dDescriptor to configure the pooling.</span></div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160;<span class="comment"></span> virtual <span class="keywordtype">void</span> VisitPooling3dLayer(const IConnectableLayer* layer,</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; const <a class="code" href="namespacearmnn_deserializer.xhtml#a6713b8a83104db317823b5367b195d2e">Pooling3dDescriptor</a>&amp; pooling3dDescriptor,</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; const <span class="keywordtype">char</span>* name = <span class="keywordtype">nullptr</span>) = 0;</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160;<span class="comment"> /// Function that a PReLU activation layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked.</span></div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160;<span class="comment"></span> virtual <span class="keywordtype">void</span> VisitPreluLayer(const IConnectableLayer* layer,</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; const <span class="keywordtype">char</span>* name = <span class="keywordtype">nullptr</span>) = 0;</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160;<span class="comment"> /// Function a quantize layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked.</span></div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160;<span class="comment"></span> virtual <span class="keywordtype">void</span> VisitQuantizeLayer(const IConnectableLayer* layer,</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; const <span class="keywordtype">char</span>* name = <span class="keywordtype">nullptr</span>) = 0;</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160;<span class="comment"> /// Function a QLstm layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked.</span></div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160;<span class="comment"> /// @param descriptor - Parameters controlling the operation of the QLstm operation.</span></div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160;<span class="comment"> /// @param params - The weights and biases for the layer</span></div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160;<span class="comment"></span> virtual <span class="keywordtype">void</span> VisitQLstmLayer(const IConnectableLayer* layer,</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; const QLstmDescriptor&amp; descriptor,</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; const LstmInputParams&amp; params,</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; const <span class="keywordtype">char</span>* name = <span class="keywordtype">nullptr</span>) = 0;</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160;<span class="comment"> /// Function a QuantizedLstm layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked.</span></div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160;<span class="comment"> /// @param params - The weights and biases for the Quantized LSTM cell</span></div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160;<span class="comment"></span> virtual <span class="keywordtype">void</span> VisitQuantizedLstmLayer(const IConnectableLayer* layer,</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; const QuantizedLstmInputParams&amp; params,</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; const <span class="keywordtype">char</span>* name = <span class="keywordtype">nullptr</span>) = 0;</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160;<span class="comment"> /// Function a rank layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked.</span></div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160;<span class="comment"></span> virtual <span class="keywordtype">void</span> VisitRankLayer(const IConnectableLayer* layer,</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; const <span class="keywordtype">char</span>* name = <span class="keywordtype">nullptr</span>) = 0;</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160;<span class="comment"> /// Function that a reduce layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked.</span></div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160;<span class="comment"> /// @param ReduceDescriptor - Parameters for the reduce max operation.</span></div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160;<span class="comment"></span> virtual <span class="keywordtype">void</span> VisitReduceLayer(const IConnectableLayer* layer,</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; const ReduceDescriptor&amp; reduceDescriptor,</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; const <span class="keywordtype">char</span>* name = <span class="keywordtype">nullptr</span>) = 0;</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160;<span class="comment"> /// Function a reshape layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked.</span></div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160;<span class="comment"> /// @param reshapeDescriptor - Parameters for the reshape operation.</span></div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160;<span class="comment"></span> virtual <span class="keywordtype">void</span> VisitReshapeLayer(const IConnectableLayer* layer,</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; const ReshapeDescriptor&amp; reshapeDescriptor,</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; const <span class="keywordtype">char</span>* name = <span class="keywordtype">nullptr</span>) = 0;</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160;<span class="comment"> /// Function that a resize layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked.</span></div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160;<span class="comment"> /// @param resizeDescriptor - Parameters for the resize operation.</span></div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160;<span class="comment"></span> virtual <span class="keywordtype">void</span> VisitResizeLayer(const IConnectableLayer* layer,</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; const ResizeDescriptor&amp; resizeDescriptor,</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; const <span class="keywordtype">char</span>* name = <span class="keywordtype">nullptr</span>) = 0;</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160;<span class="comment"> /// Function that a slice layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked.</span></div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160;<span class="comment"> /// @param sliceDescriptor - SliceDescriptor to configure the slice operation.</span></div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160;<span class="comment"></span> virtual <span class="keywordtype">void</span> VisitSliceLayer(const IConnectableLayer* layer,</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; const SliceDescriptor&amp; sliceDescriptor,</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; const <span class="keywordtype">char</span>* name = <span class="keywordtype">nullptr</span>) = 0;</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160;</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160;<span class="comment"> /// Function that a softmax layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked.</span></div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160;<span class="comment"> /// @param softmaxDescriptor - SoftmaxDescriptor to configure the softmax.</span></div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160;<span class="comment"></span> virtual <span class="keywordtype">void</span> VisitSoftmaxLayer(const IConnectableLayer* layer,</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; const SoftmaxDescriptor&amp; softmaxDescriptor,</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; const <span class="keywordtype">char</span>* name = <span class="keywordtype">nullptr</span>) = 0;</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160;<span class="comment"> /// Function a space to batch layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked.</span></div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160;<span class="comment"> /// @param spaceToBatchNdDescriptor - Parameters for the space to batch operation.</span></div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160;<span class="comment"></span> virtual <span class="keywordtype">void</span> VisitSpaceToBatchNdLayer(const IConnectableLayer* layer,</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; const SpaceToBatchNdDescriptor&amp; spaceToBatchNdDescriptor,</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; const <span class="keywordtype">char</span>* name = <span class="keywordtype">nullptr</span>) = 0;</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160;<span class="comment"> /// Function a space to depth layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked.</span></div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160;<span class="comment"> /// @param spaceToDepthDescriptor - Parameters for the space to depth operation.</span></div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160;<span class="comment"></span> virtual <span class="keywordtype">void</span> VisitSpaceToDepthLayer(const IConnectableLayer* layer,</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; const SpaceToDepthDescriptor&amp; spaceToDepthDescriptor,</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; const <span class="keywordtype">char</span>* name = <span class="keywordtype">nullptr</span>) = 0;</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160;<span class="comment"> /// Function that a splitter layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked.</span></div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160;<span class="comment"> /// @param splitterDescriptor - ViewsDescriptor to configure the splitting process.</span></div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160;<span class="comment"> /// Number of Views must be equal to the number of outputs,</span></div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160;<span class="comment"> /// and their order must match - e.g. first view corresponds to</span></div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160;<span class="comment"> /// the first output, second view to the second output, etc....</span></div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160;<span class="comment"></span> virtual <span class="keywordtype">void</span> VisitSplitterLayer(const IConnectableLayer* layer,</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; const ViewsDescriptor&amp; splitterDescriptor,</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; const <span class="keywordtype">char</span>* name = <span class="keywordtype">nullptr</span>) = 0;</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160;<span class="comment"> /// Function a stack layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked.</span></div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160;<span class="comment"> /// @param stackDescriptor - Parameters for the stack operation.</span></div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160;<span class="comment"></span> virtual <span class="keywordtype">void</span> VisitStackLayer(const IConnectableLayer* layer,</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; const StackDescriptor&amp; stackDescriptor,</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; const <span class="keywordtype">char</span>* name = <span class="keywordtype">nullptr</span>) = 0;</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160;<span class="comment"> /// Function a StandInLayer should call back to when its Accept(ILaterVisitor&amp;) function is invoked</span></div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160;<span class="comment"> /// @param standInDescriptor - Parameters for the stand-in layer.</span></div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160;<span class="comment"></span> virtual <span class="keywordtype">void</span> VisitStandInLayer(const IConnectableLayer* layer,</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; const StandInDescriptor&amp; standInDescriptor,</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; const <span class="keywordtype">char</span>* name = <span class="keywordtype">nullptr</span>) = 0;</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160;<span class="comment"> /// Function a strided slice layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked.</span></div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160;<span class="comment"> /// @param stridedSliceDescriptor - Parameters for the strided slice operation.</span></div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160;<span class="comment"></span> virtual <span class="keywordtype">void</span> VisitStridedSliceLayer(const IConnectableLayer* layer,</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; const StridedSliceDescriptor&amp; stridedSliceDescriptor,</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; const <span class="keywordtype">char</span>* name = <span class="keywordtype">nullptr</span>) = 0;</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160;<span class="comment"> /// Function a subtraction layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked.</span></div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160;<span class="comment"></span> virtual <span class="keywordtype">void</span> VisitSubtractionLayer(const IConnectableLayer* layer,</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; const <span class="keywordtype">char</span>* name = <span class="keywordtype">nullptr</span>) = 0;</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160;<span class="comment"> /// Function a switch layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked.</span></div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160;<span class="comment"></span> virtual <span class="keywordtype">void</span> VisitSwitchLayer(const IConnectableLayer* layer,</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; const <span class="keywordtype">char</span>* name = <span class="keywordtype">nullptr</span>) = 0;</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160;<span class="comment"> /// Function that a 2D transpose convolution layer should call back to when its Accept(ILayerVisitor&amp;)</span></div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160;<span class="comment"> /// function is invoked.</span></div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160;<span class="comment"> /// @param descriptor - Description of the 2D transpose convolution layer.</span></div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160;<span class="comment"> /// @param weights - Tensor for the weights data.</span></div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160;<span class="comment"> /// @param biases - Optional tensor for the bias data.</span></div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160;<span class="comment"></span> virtual <span class="keywordtype">void</span> VisitTransposeConvolution2dLayer(const IConnectableLayer* layer,</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; const TransposeConvolution2dDescriptor&amp; descriptor,</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; const ConstTensor&amp; weights,</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; const Optional&lt;ConstTensor&gt;&amp; biases,</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; const <span class="keywordtype">char</span>* name = <span class="keywordtype">nullptr</span>) = 0;</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160;<span class="comment"> /// Function that a transpose layer should call back to when its Accept(ILayerVisitor&amp;) function is invoked.</span></div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160;<span class="comment"> /// @param layer - pointer to the layer which is calling back to this visit function.</span></div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160;<span class="comment"> /// @param transposeDescriptor - TransposeDescriptor to configure the transpose.</span></div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160;<span class="comment"> /// @param name - Optional name for the layer.</span></div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160;<span class="comment"></span> virtual <span class="keywordtype">void</span> VisitTransposeLayer(const IConnectableLayer* layer,</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; const TransposeDescriptor&amp; transposeDescriptor,</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; const <span class="keywordtype">char</span>* name = <span class="keywordtype">nullptr</span>) = 0;</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160;</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; virtual <span class="keywordtype">void</span> StartVisit() {}</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> FinishVisit() {}</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160;</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160;};</div><div class="ttc" id="namespacearmnn_deserializer_xhtml_a7e75f47f676327bce37149932aa4a011"><div class="ttname"><a href="namespacearmnn_deserializer.xhtml#a7e75f47f676327bce37149932aa4a011">armnnDeserializer::Pooling2dDescriptor</a></div><div class="ttdeci">const armnnSerializer::Pooling2dDescriptor * Pooling2dDescriptor</div><div class="ttdef"><b>Definition:</b> <a href="_deserializer_8hpp_source.xhtml#l00021">Deserializer.hpp:21</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ab8cf8f9fb6792e654c2d8d8382f6f01b"><div class="ttname"><a href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">armnn::LayerBindingId</a></div><div class="ttdeci">int LayerBindingId</div><div class="ttdoc">Type of identifiers for bindable layers (inputs, outputs). </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00277">Types.hpp:277</a></div></div>
+<div class="ttc" id="_deprecated_8hpp_xhtml_af16119336bd0dfbfbc83fc283151067e"><div class="ttname"><a href="_deprecated_8hpp.xhtml#af16119336bd0dfbfbc83fc283151067e">ARMNN_DEPRECATED_MSG_REMOVAL_DATE</a></div><div class="ttdeci">#define ARMNN_DEPRECATED_MSG_REMOVAL_DATE(message, removed_in_release)</div><div class="ttdef"><b>Definition:</b> <a href="_deprecated_8hpp_source.xhtml#l00044">Deprecated.hpp:44</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ac14705405cbcdd580df613de6766fe65"><div class="ttname"><a href="namespacearmnn.xhtml#ac14705405cbcdd580df613de6766fe65">armnn::LogSoftmaxDescriptor</a></div><div class="ttdeci">SoftmaxDescriptor LogSoftmaxDescriptor</div><div class="ttdoc">A LogSoftmaxDescriptor for the LogSoftmaxLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00169">Descriptors.hpp:169</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a3647f60510bc8ddaced01c51b0ee8714"><div class="ttname"><a href="namespacearmnn.xhtml#a3647f60510bc8ddaced01c51b0ee8714">armnn::DepthToSpaceDescriptor</a></div><div class="ttdeci">SpaceToDepthDescriptor DepthToSpaceDescriptor</div><div class="ttdoc">A DepthToSpaceDescriptor for the DepthToSpaceLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01075">Descriptors.hpp:1075</a></div></div>
+<div class="ttc" id="namespacearmnn_deserializer_xhtml_a6713b8a83104db317823b5367b195d2e"><div class="ttname"><a href="namespacearmnn_deserializer.xhtml#a6713b8a83104db317823b5367b195d2e">armnnDeserializer::Pooling3dDescriptor</a></div><div class="ttdeci">const armnnSerializer::Pooling3dDescriptor * Pooling3dDescriptor</div><div class="ttdef"><b>Definition:</b> <a href="_deserializer_8hpp_source.xhtml#l00022">Deserializer.hpp:22</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="adf15f9b51e289cd234206cc5112f0346"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adf15f9b51e289cd234206cc5112f0346">&#9670;&nbsp;</a></span>ARMNN_DEPRECATED_MSG_REMOVAL_DATE() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="_deprecated_8hpp.xhtml#ab66a241a0ed3ee89c866e777b035d0ed">ARMNN_NO_DEPRECATE_WARN_BEGIN</a> struct armnn::ARMNN_DEPRECATED_MSG_REMOVAL_DATE </td>
+ <td>(</td>
+ <td class="paramtype">&quot;ResizeBilinearQueueDescriptor is deprecated use <a class="el" href="structarmnn_1_1_resize_queue_descriptor.xhtml">ResizeQueueDescriptor</a> <a class="el" href="namespacearmnn.xhtml#a546bd17050a4147165f295e365d56171">instead</a>&quot;&#160;</td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&quot;22.08&quot;&#160;</td>
+ <td class="paramname">&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="include_2armnn_2backends_2_workload_data_8hpp_source.xhtml#l00346">346</a> of file <a class="el" href="include_2armnn_2backends_2_workload_data_8hpp_source.xhtml">WorkloadData.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_deprecated_8hpp_source.xhtml#l00034">ARMNN_NO_DEPRECATE_WARN_END</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="include_2armnn_2backends_2_workload_factory_8hpp_source.xhtml#l00027">IWorkloadFactory::AfterWorkloadsCreated()</a>, <a class="el" href="_i_layer_visitor_8hpp_source.xhtml#l00016">ARMNN_DEPRECATED_MSG_REMOVAL_DATE()</a>, <a class="el" href="_ref_workload_factory_8hpp_source.xhtml#l00052">RefWorkloadFactory::CreateSubTensorHandle()</a>, <a class="el" href="include_2armnn_test_utils_2_mock_backend_8hpp_source.xhtml#l00075">MockWorkloadFactory::CreateTensorHandle()</a>, <a class="el" href="_i_backend_internal_8hpp_source.xhtml#l00169">IBackendInternal::GetCapabilities()</a>, <a class="el" href="_network_8hpp_source.xhtml#l00037">NetworkImpl::GetGraph()</a>, <a class="el" href="include_2armnn_2backends_2_optimization_views_8hpp_source.xhtml#l00055">OptimizationViews::GetUntouchedSubgraphs()</a>, <a class="el" href="_backend_helper_8hpp_source.xhtml#l00026">LayerSupportHandle::LayerSupportHandle()</a>, <a class="el" href="_model_accuracy_tool-_armnn_8cpp_source.xhtml#l00049">main()</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00476">FullyConnectedDescriptor::operator==()</a>, <a class="el" href="_neon_workload_factory_8hpp_source.xhtml#l00039">NeonWorkloadFactory::SupportsSubTensors()</a>, and <a class="el" href="_cl_workload_factory_8hpp_source.xhtml#l00042">ClWorkloadFactory::SupportsSubTensors()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; : QueueDescriptorWithParameters&lt;ResizeBilinearDescriptor&gt;</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160;{</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <span class="keywordtype">void</span> Validate(<span class="keyword">const</span> WorkloadInfo&amp; workloadInfo) <span class="keyword">const</span>;</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160;};</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a224df72b3d7a3bba8609bc167286e3f7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a224df72b3d7a3bba8609bc167286e3f7">&#9670;&nbsp;</a></span>AssignBackends() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structarmnn_1_1_optimization_result.xhtml">OptimizationResult</a> AssignBackends </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_optimized_network_impl.xhtml">OptimizedNetworkImpl</a> *&#160;</td>
+ <td class="paramname"><em>optNetObjPtr</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structarmnn_1_1_backend_settings.xhtml">BackendSettings</a> &amp;&#160;</td>
+ <td class="paramname"><em>backendSettings</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_graph.xhtml#acc25db0641c1c22faf95af3bb49080c9">Graph::Iterator</a> &amp;&#160;</td>
+ <td class="paramname"><em>firstLayer</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_graph.xhtml#acc25db0641c1c22faf95af3bb49080c9">Graph::Iterator</a> &amp;&#160;</td>
+ <td class="paramname"><em>lastLayer</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; std::vector&lt; std::string &gt; &amp;&gt;&#160;</td>
+ <td class="paramname"><em>errMessages</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.xhtml#l01034">1034</a> of file <a class="el" href="_network_8cpp_source.xhtml">Network.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_profiling_8hpp_source.xhtml#l00220">ARMNN_SCOPED_PROFILING_EVENT</a>, <a class="el" href="_network_8cpp_source.xhtml#l00921">AssignBackendsIConnectable()</a>, <a class="el" href="_backend_settings_8hpp_source.xhtml#l00067">BackendSettings::GetAvailablePreferredBackends()</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a324118a6721dd6b8a9b9f4e327df2bf5">Input</a>, <a class="el" href="_network_8hpp_source.xhtml#l00268">OptimizationResult::m_Error</a>, <a class="el" href="_network_8cpp_source.xhtml#l00572">ReportError()</a>, and <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.xhtml#l01155">ApplyBackendOptimizations()</a>, <a class="el" href="_network_8cpp_source.xhtml#l01122">AssignBackends()</a>, <a class="el" href="_network_8cpp_source.xhtml#l01680">Optimize()</a>, and <a class="el" href="_optimizer_tests_8cpp_source.xhtml#l00306">TEST_SUITE()</a>.</p>
+<div class="fragment"><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160;{</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160; <a class="code" href="_profiling_8hpp.xhtml#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(Compute::Undefined, <span class="stringliteral">&quot;Optimizer_AssignBackends&quot;</span>);</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160; OptimizationResult result;</div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160;</div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160; <span class="keyword">auto</span> availablePreferredBackends = backendSettings.GetAvailablePreferredBackends();</div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160; <span class="keywordflow">if</span> (availablePreferredBackends.empty())</div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160; {</div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160; std::stringstream failureMsg;</div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160; failureMsg &lt;&lt; <span class="stringliteral">&quot;No preferred backends are available&quot;</span>;</div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160; <a class="code" href="namespacearmnn.xhtml#a7658f93d899c8646515a29370e6aa994">ReportError</a>(failureMsg.str(), errMessages);</div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160;</div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160; result.m_Error = <span class="keyword">true</span>;</div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160; }</div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160;</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = firstLayer; it != lastLayer; ++it)</div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160; {</div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160; <a class="code" href="namespacearmnn.xhtml#a3a26a0174216ded9353ca943a66709dc">AssignBackendsIConnectable</a>(optNetObjPtr,</div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160; *it,</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160; errMessages,</div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160; result,</div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160; backendSettings,</div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160; availablePreferredBackends);</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160; }</div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160;</div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = firstLayer; it != lastLayer; ++it)</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160; {</div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160; <span class="keyword">auto</span> layer = PolymorphicDowncast&lt;Layer*&gt;(*it);</div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160;</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160; <span class="keywordflow">if</span>(layer-&gt;GetType() == LayerType::Input)</div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160; {</div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160; BackendId connectedBackendId = layer-&gt;GetOutputSlot(0).GetConnection(0)-&gt;GetOwningLayer().GetBackendId();</div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160; layer-&gt;SetBackendId(connectedBackendId);</div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160; }</div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160; }</div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160;</div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a7658f93d899c8646515a29370e6aa994"><div class="ttname"><a href="namespacearmnn.xhtml#a7658f93d899c8646515a29370e6aa994">armnn::ReportError</a></div><div class="ttdeci">void ReportError(const std::string &amp;errorMessage, Optional&lt; std::vector&lt; std::string &gt; &amp;&gt; errorMessages)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.xhtml#l00572">Network.cpp:572</a></div></div>
+<div class="ttc" id="_profiling_8hpp_xhtml_a5ccc65e2c464ac05ce311fdae7ede03a"><div class="ttname"><a href="_profiling_8hpp.xhtml#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a></div><div class="ttdeci">#define ARMNN_SCOPED_PROFILING_EVENT(backendId, name)</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_8hpp_source.xhtml#l00220">Profiling.hpp:220</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a3a26a0174216ded9353ca943a66709dc"><div class="ttname"><a href="namespacearmnn.xhtml#a3a26a0174216ded9353ca943a66709dc">armnn::AssignBackendsIConnectable</a></div><div class="ttdeci">void AssignBackendsIConnectable(OptimizedNetworkImpl *optNetObjPtr, IConnectableLayer *it, Optional&lt; std::vector&lt; std::string &gt; &amp;&gt; errMessages, OptimizationResult &amp;result, BackendSettings &amp;backendSettings, std::vector&lt; BackendId &gt; &amp;availablePreferredBackends)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.xhtml#l00921">Network.cpp:921</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a42b993acd5865dfb937686b9760801e1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a42b993acd5865dfb937686b9760801e1">&#9670;&nbsp;</a></span>AssignBackends() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structarmnn_1_1_optimization_result.xhtml">OptimizationResult</a> AssignBackends </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_optimized_network_impl.xhtml">OptimizedNetworkImpl</a> *&#160;</td>
+ <td class="paramname"><em>optNetObjPtr</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structarmnn_1_1_backend_settings.xhtml">BackendSettings</a> &amp;&#160;</td>
+ <td class="paramname"><em>backendSettings</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_subgraph_view.xhtml#a308b86dbdd0a745cef76904674c9850f">SubgraphView::IConnectableLayerIterator</a> &amp;&#160;</td>
+ <td class="paramname"><em>firstLayer</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_subgraph_view.xhtml#a308b86dbdd0a745cef76904674c9850f">SubgraphView::IConnectableLayerIterator</a> &amp;&#160;</td>
+ <td class="paramname"><em>lastLayer</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; std::vector&lt; std::string &gt; &amp;&gt;&#160;</td>
+ <td class="paramname"><em>errMessages</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.xhtml#l01078">1078</a> of file <a class="el" href="_network_8cpp_source.xhtml">Network.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_profiling_8hpp_source.xhtml#l00220">ARMNN_SCOPED_PROFILING_EVENT</a>, <a class="el" href="_network_8cpp_source.xhtml#l00921">AssignBackendsIConnectable()</a>, <a class="el" href="_backend_settings_8hpp_source.xhtml#l00067">BackendSettings::GetAvailablePreferredBackends()</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a324118a6721dd6b8a9b9f4e327df2bf5">Input</a>, <a class="el" href="_network_8hpp_source.xhtml#l00268">OptimizationResult::m_Error</a>, <a class="el" href="_network_8cpp_source.xhtml#l00572">ReportError()</a>, and <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a>.</p>
+<div class="fragment"><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160;{</div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160; <a class="code" href="_profiling_8hpp.xhtml#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(Compute::Undefined, <span class="stringliteral">&quot;Optimizer_AssignBackends&quot;</span>);</div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160; OptimizationResult result;</div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160;</div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160; <span class="keyword">auto</span> availablePreferredBackends = backendSettings.GetAvailablePreferredBackends();</div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160; <span class="keywordflow">if</span> (availablePreferredBackends.empty())</div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160; {</div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160; std::stringstream failureMsg;</div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160; failureMsg &lt;&lt; <span class="stringliteral">&quot;No preferred backends are available&quot;</span>;</div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160; <a class="code" href="namespacearmnn.xhtml#a7658f93d899c8646515a29370e6aa994">ReportError</a>(failureMsg.str(), errMessages);</div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160;</div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160; result.m_Error = <span class="keyword">true</span>;</div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160; }</div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160;</div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = firstLayer; it != lastLayer; ++it)</div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160; {</div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160; <a class="code" href="namespacearmnn.xhtml#a3a26a0174216ded9353ca943a66709dc">AssignBackendsIConnectable</a>(optNetObjPtr,</div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160; *it,</div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160; errMessages,</div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160; result,</div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160; backendSettings,</div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160; availablePreferredBackends);</div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160; }</div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160;</div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = firstLayer; it != lastLayer; ++it)</div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160; {</div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160; <span class="keyword">auto</span> layer = PolymorphicDowncast&lt;Layer*&gt;(*it);</div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160;</div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160; <span class="keywordflow">if</span>(layer-&gt;GetType() == LayerType::Input)</div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160; {</div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160; BackendId connectedBackendId = layer-&gt;GetOutputSlot(0).GetConnection(0)-&gt;GetOwningLayer().GetBackendId();</div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160; layer-&gt;SetBackendId(connectedBackendId);</div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160; }</div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160; }</div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160;</div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a7658f93d899c8646515a29370e6aa994"><div class="ttname"><a href="namespacearmnn.xhtml#a7658f93d899c8646515a29370e6aa994">armnn::ReportError</a></div><div class="ttdeci">void ReportError(const std::string &amp;errorMessage, Optional&lt; std::vector&lt; std::string &gt; &amp;&gt; errorMessages)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.xhtml#l00572">Network.cpp:572</a></div></div>
+<div class="ttc" id="_profiling_8hpp_xhtml_a5ccc65e2c464ac05ce311fdae7ede03a"><div class="ttname"><a href="_profiling_8hpp.xhtml#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a></div><div class="ttdeci">#define ARMNN_SCOPED_PROFILING_EVENT(backendId, name)</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_8hpp_source.xhtml#l00220">Profiling.hpp:220</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a3a26a0174216ded9353ca943a66709dc"><div class="ttname"><a href="namespacearmnn.xhtml#a3a26a0174216ded9353ca943a66709dc">armnn::AssignBackendsIConnectable</a></div><div class="ttdeci">void AssignBackendsIConnectable(OptimizedNetworkImpl *optNetObjPtr, IConnectableLayer *it, Optional&lt; std::vector&lt; std::string &gt; &amp;&gt; errMessages, OptimizationResult &amp;result, BackendSettings &amp;backendSettings, std::vector&lt; BackendId &gt; &amp;availablePreferredBackends)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.xhtml#l00921">Network.cpp:921</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a48e4d70ae8893f6f1a8ebfced5b03a07"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a48e4d70ae8893f6f1a8ebfced5b03a07">&#9670;&nbsp;</a></span>AssignBackends() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structarmnn_1_1_optimization_result.xhtml">OptimizationResult</a> armnn::AssignBackends </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_optimized_network_impl.xhtml">OptimizedNetworkImpl</a> *&#160;</td>
+ <td class="paramname"><em>optNetObjPtr</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structarmnn_1_1_backend_settings.xhtml">BackendSettings</a> &amp;&#160;</td>
+ <td class="paramname"><em>backendSettings</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_subgraph_view.xhtml">SubgraphView</a> &amp;&#160;</td>
+ <td class="paramname"><em>subgraph</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; std::vector&lt; std::string &gt; &amp;&gt;&#160;</td>
+ <td class="paramname"><em>errMessages</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.xhtml#l01122">1122</a> of file <a class="el" href="_network_8cpp_source.xhtml">Network.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_network_8cpp_source.xhtml#l01034">AssignBackends()</a>, <a class="el" href="_subgraph_view_8cpp_source.xhtml#l00316">SubgraphView::beginIConnectable()</a>, and <a class="el" href="_subgraph_view_8cpp_source.xhtml#l00321">SubgraphView::endIConnectable()</a>.</p>
+<div class="fragment"><div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160;{</div><div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160; SubgraphView::IConnectableLayerIterator firstLayer = subgraph.beginIConnectable();</div><div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160; SubgraphView::IConnectableLayerIterator lastLayer = subgraph.endIConnectable();</div><div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a48e4d70ae8893f6f1a8ebfced5b03a07">AssignBackends</a>(optNetObjPtr,</div><div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160; backendSettings,</div><div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160; firstLayer,</div><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160; lastLayer,</div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160; errMessages);</div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a48e4d70ae8893f6f1a8ebfced5b03a07"><div class="ttname"><a href="namespacearmnn.xhtml#a48e4d70ae8893f6f1a8ebfced5b03a07">armnn::AssignBackends</a></div><div class="ttdeci">OptimizationResult AssignBackends(OptimizedNetworkImpl *optNetObjPtr, BackendSettings &amp;backendSettings, SubgraphView &amp;subgraph, Optional&lt; std::vector&lt; std::string &gt; &amp;&gt; errMessages)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.xhtml#l01122">Network.cpp:1122</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a3a26a0174216ded9353ca943a66709dc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3a26a0174216ded9353ca943a66709dc">&#9670;&nbsp;</a></span>AssignBackendsIConnectable()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void armnn::AssignBackendsIConnectable </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_optimized_network_impl.xhtml">OptimizedNetworkImpl</a> *&#160;</td>
+ <td class="paramname"><em>optNetObjPtr</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a> *&#160;</td>
+ <td class="paramname"><em>it</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; std::vector&lt; std::string &gt; &amp;&gt;&#160;</td>
+ <td class="paramname"><em>errMessages</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structarmnn_1_1_optimization_result.xhtml">OptimizationResult</a> &amp;&#160;</td>
+ <td class="paramname"><em>result</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structarmnn_1_1_backend_settings.xhtml">BackendSettings</a> &amp;&#160;</td>
+ <td class="paramname"><em>backendSettings</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::vector&lt; <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &gt; &amp;&#160;</td>
+ <td class="paramname"><em>availablePreferredBackends</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.xhtml#l00921">921</a> of file <a class="el" href="_network_8cpp_source.xhtml">Network.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00015">ARMNN_ASSERT_MSG</a>, <a class="el" href="_network_8cpp_source.xhtml#l00670">AttemptBackendAssignment()</a>, <a class="el" href="_network_8cpp_source.xhtml#l00611">CheckScaleSetOnQuantizedType()</a>, <a class="el" href="namespacearmnn.xhtml#a14d24d90ab4ba2956e92e27890ba4c91acb17869fe51048b5a5c4c6106551a255">Constant</a>, <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64">CpuRef</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">Float32</a>, <a class="el" href="_optimized_network_impl_8hpp_source.xhtml#l00027">OptimizedNetworkImpl::GetGraph()</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a324118a6721dd6b8a9b9f4e327df2bf5">Input</a>, <a class="el" href="_backend_settings_8hpp_source.xhtml#l00046">BackendSettings::IsBackendSupported()</a>, <a class="el" href="_backend_settings_8hpp_source.xhtml#l00061">BackendSettings::IsCpuRefUsed()</a>, <a class="el" href="_network_8hpp_source.xhtml#l00282">OptimizationResult::IsError()</a>, <a class="el" href="_network_8hpp_source.xhtml#l00278">OptimizationResult::IsOk()</a>, <a class="el" href="_network_8hpp_source.xhtml#l00280">OptimizationResult::IsWarningOnly()</a>, <a class="el" href="_network_8hpp_source.xhtml#l00268">OptimizationResult::m_Error</a>, <a class="el" href="_backend_settings_8hpp_source.xhtml#l00022">BackendSettings::m_SelectedBackends</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a4dd48794eb3305a0f5aece88b111a97b">MemCopy</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4afa662c6eb71caef475b2b981ce8eccd7">Permute</a>, and <a class="el" href="_network_8cpp_source.xhtml#l00596">ReturnWithError()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.xhtml#l01034">AssignBackends()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160;{</div><div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160; <span class="keyword">auto</span> ReturnError = [&amp;](<span class="keyword">const</span> <a class="code" href="namespacearmnn_serializer.xhtml#a9a8118be7780e95363d631cbca7e7800">Layer</a>* layer)</div><div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160; {</div><div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#ae50fff9aa2a1ce46392d8641c10aa3bc">ReturnWithError</a>(result, layer, backendSettings, errMessages);</div><div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160; };</div><div class="line"><a name="l00932"></a><span class="lineno"> 932</span>&#160;</div><div class="line"><a name="l00933"></a><span class="lineno"> 933</span>&#160; <span class="keyword">auto</span> layer = PolymorphicDowncast&lt;Layer*&gt;(it);</div><div class="line"><a name="l00934"></a><span class="lineno"> 934</span>&#160;</div><div class="line"><a name="l00935"></a><span class="lineno"> 935</span>&#160; <span class="keywordflow">if</span> (layer-&gt;GetType() == LayerType::Input)</div><div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160; {</div><div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160; }</div><div class="line"><a name="l00939"></a><span class="lineno"> 939</span>&#160;</div><div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> dataTypeIn = layer-&gt;GetNumInputSlots() == 0 ? DataType::Float32 :</div><div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160; layer-&gt;GetInputSlot(0).GetConnectedOutputSlot()-&gt;GetTensorInfo().GetDataType();</div><div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> dataTypeOut = layer-&gt;GetNumOutputSlots() == 0 ? DataType::Float32 :</div><div class="line"><a name="l00943"></a><span class="lineno"> 943</span>&#160; layer-&gt;GetOutputSlot(0).GetTensorInfo().GetDataType();</div><div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160;</div><div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160; std::string reasonIfUnsupported;</div><div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160; <span class="keywordtype">bool</span> found = <span class="keyword">false</span>;</div><div class="line"><a name="l00947"></a><span class="lineno"> 947</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="namespacearmnn.xhtml#af002111f64aee648e3258247075cae36">CheckScaleSetOnQuantizedType</a>(layer, errMessages))</div><div class="line"><a name="l00948"></a><span class="lineno"> 948</span>&#160; {</div><div class="line"><a name="l00949"></a><span class="lineno"> 949</span>&#160; <span class="comment">// don&#39;t bomb immediately, find all the quantized outputs</span></div><div class="line"><a name="l00950"></a><span class="lineno"> 950</span>&#160; <span class="comment">// which haven&#39;t had a scale set and report them all back.</span></div><div class="line"><a name="l00951"></a><span class="lineno"> 951</span>&#160; result.m_Error = <span class="keyword">true</span>;</div><div class="line"><a name="l00952"></a><span class="lineno"> 952</span>&#160; }</div><div class="line"><a name="l00953"></a><span class="lineno"> 953</span>&#160;</div><div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160; <span class="comment">// First try assign layer to hint backend</span></div><div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160; <span class="keywordflow">if</span> (layer-&gt;GetBackendHint().has_value() &amp;&amp;</div><div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160; backendSettings.IsBackendSupported(layer-&gt;GetBackendHint().value()) &amp;&amp;</div><div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56f168327453ea4461cbc1c0ac7f15b6">AttemptBackendAssignment</a>(backendSettings,</div><div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160; optNetObjPtr-&gt;GetGraph(),</div><div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160; layer,</div><div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; layer-&gt;GetBackendHint().value(),</div><div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160; dataTypeIn,</div><div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160; dataTypeOut,</div><div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160; availablePreferredBackends,</div><div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160; reasonIfUnsupported,</div><div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160; errMessages).IsOk())</div><div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160; {</div><div class="line"><a name="l00967"></a><span class="lineno"> 967</span>&#160; found = <span class="keyword">true</span>;</div><div class="line"><a name="l00968"></a><span class="lineno"> 968</span>&#160; backendSettings.m_SelectedBackends.insert(layer-&gt;GetBackendHint().value());</div><div class="line"><a name="l00969"></a><span class="lineno"> 969</span>&#160; }</div><div class="line"><a name="l00970"></a><span class="lineno"> 970</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00971"></a><span class="lineno"> 971</span>&#160; {</div><div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160; <span class="comment">// Try assign layer to prefered list of backends</span></div><div class="line"><a name="l00973"></a><span class="lineno"> 973</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; backend : availablePreferredBackends)</div><div class="line"><a name="l00974"></a><span class="lineno"> 974</span>&#160; {</div><div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160; <span class="keywordflow">if</span> (layer-&gt;GetBackendHint().has_value() &amp;&amp;</div><div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160; layer-&gt;GetBackendHint().value() == backend)</div><div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160; {</div><div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160; <span class="keywordflow">continue</span>; <span class="comment">//Don&#39;t re-test the backend hint</span></div><div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160; }</div><div class="line"><a name="l00980"></a><span class="lineno"> 980</span>&#160;</div><div class="line"><a name="l00981"></a><span class="lineno"> 981</span>&#160; OptimizationResult res = <a class="code" href="namespacearmnn.xhtml#a56f168327453ea4461cbc1c0ac7f15b6">AttemptBackendAssignment</a>(backendSettings,</div><div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160; optNetObjPtr-&gt;GetGraph(),</div><div class="line"><a name="l00983"></a><span class="lineno"> 983</span>&#160; layer,</div><div class="line"><a name="l00984"></a><span class="lineno"> 984</span>&#160; backend,</div><div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160; dataTypeIn,</div><div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160; dataTypeOut,</div><div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160; availablePreferredBackends,</div><div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160; reasonIfUnsupported,</div><div class="line"><a name="l00989"></a><span class="lineno"> 989</span>&#160; errMessages);</div><div class="line"><a name="l00990"></a><span class="lineno"> 990</span>&#160;</div><div class="line"><a name="l00991"></a><span class="lineno"> 991</span>&#160; <span class="keywordflow">if</span> (res.IsOk())</div><div class="line"><a name="l00992"></a><span class="lineno"> 992</span>&#160; {</div><div class="line"><a name="l00993"></a><span class="lineno"> 993</span>&#160; found = <span class="keyword">true</span>;</div><div class="line"><a name="l00994"></a><span class="lineno"> 994</span>&#160; backendSettings.m_SelectedBackends.insert(backend);</div><div class="line"><a name="l00995"></a><span class="lineno"> 995</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00996"></a><span class="lineno"> 996</span>&#160; }</div><div class="line"><a name="l00997"></a><span class="lineno"> 997</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (res.IsError())</div><div class="line"><a name="l00998"></a><span class="lineno"> 998</span>&#160; {</div><div class="line"><a name="l00999"></a><span class="lineno"> 999</span>&#160; result = res; <span class="comment">// Cannot continue.</span></div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160; <span class="comment">// Note: we don&#39;t need to log the error as it would already</span></div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160; <span class="comment">// be logged in AttemptBackendAssignment().</span></div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160; }</div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160; {</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(res.IsWarningOnly(), <span class="stringliteral">&quot;OptimizationResult in unexpected state.&quot;</span>);</div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160; }</div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160; }</div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160; }</div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160;</div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160; <span class="comment">// If the layer is unsupported by any devices, log and return a null network.</span></div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160; <span class="keywordflow">if</span> (!found)</div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160; {</div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160; <span class="comment">// NOTE: if the layer is not an operation queue type AND we have not got CpuRef as a</span></div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160; <span class="comment">// fallback we should set the compute device on the layer to CpuRef (these are not</span></div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160; <span class="comment">// available as accelerated operations, or are only available under certain</span></div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160; <span class="comment">// conditions, currently they comprise MemCopy, Constant, Permute)</span></div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">armnn::LayerType</a> layerType = layer-&gt;GetType();</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160; <span class="keywordflow">if</span> (!backendSettings.IsCpuRefUsed() &amp;&amp; (layerType == <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a4dd48794eb3305a0f5aece88b111a97b">armnn::LayerType::MemCopy</a> ||</div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160; layerType == <a class="code" href="namespacearmnn.xhtml#a14d24d90ab4ba2956e92e27890ba4c91acb17869fe51048b5a5c4c6106551a255">armnn::LayerType::Constant</a> ||</div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160; layerType == <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4afa662c6eb71caef475b2b981ce8eccd7">armnn::LayerType::Permute</a>))</div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160; {</div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160; BackendId cpuBackendId(<a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64">armnn::Compute::CpuRef</a>);</div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160; layer-&gt;SetBackendId(cpuBackendId);</div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160; backendSettings.m_SelectedBackends.insert(cpuBackendId);</div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160; }</div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160; {</div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160; result = ReturnError(layer);</div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160; }</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160; }</div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160;</div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64"><div class="ttname"><a href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64">armnn::Compute::CpuRef</a></div><div class="ttdoc">CPU Execution: Reference C++ kernels. </div></div>
+<div class="ttc" id="namespacearmnn_serializer_xhtml_a9a8118be7780e95363d631cbca7e7800"><div class="ttname"><a href="namespacearmnn_serializer.xhtml#a9a8118be7780e95363d631cbca7e7800">armnnSerializer::Layer</a></div><div class="ttdeci">Layer</div><div class="ttdef"><b>Definition:</b> <a href="_armnn_schema__generated_8h_source.xhtml#l01243">ArmnnSchema_generated.h:1243</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ae50fff9aa2a1ce46392d8641c10aa3bc"><div class="ttname"><a href="namespacearmnn.xhtml#ae50fff9aa2a1ce46392d8641c10aa3bc">armnn::ReturnWithError</a></div><div class="ttdeci">OptimizationResult ReturnWithError(OptimizationResult res, const Layer *layer, const BackendSettings &amp;backendSettings, Optional&lt; std::vector&lt; std::string &gt; &amp;&gt; errMessages)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.xhtml#l00596">Network.cpp:596</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a></div><div class="ttdeci">DataType</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00035">Types.hpp:35</a></div></div>
+<div class="ttc" id="_assert_8hpp_xhtml_a91c4dfde57907d7698c7531785690a7f"><div class="ttname"><a href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a></div><div class="ttdeci">#define ARMNN_ASSERT_MSG(COND, MSG)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00015">Assert.hpp:15</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a56943a0946e5f15e5e58054b8e7a04a4afa662c6eb71caef475b2b981ce8eccd7"><div class="ttname"><a href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4afa662c6eb71caef475b2b981ce8eccd7">armnn::LayerType::Permute</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a56943a0946e5f15e5e58054b8e7a04a4a4dd48794eb3305a0f5aece88b111a97b"><div class="ttname"><a href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a4dd48794eb3305a0f5aece88b111a97b">armnn::LayerType::MemCopy</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_af002111f64aee648e3258247075cae36"><div class="ttname"><a href="namespacearmnn.xhtml#af002111f64aee648e3258247075cae36">armnn::CheckScaleSetOnQuantizedType</a></div><div class="ttdeci">bool CheckScaleSetOnQuantizedType(Layer *layer, Optional&lt; std::vector&lt; std::string &gt; &amp;&gt; errMessages)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.xhtml#l00611">Network.cpp:611</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a56f168327453ea4461cbc1c0ac7f15b6"><div class="ttname"><a href="namespacearmnn.xhtml#a56f168327453ea4461cbc1c0ac7f15b6">armnn::AttemptBackendAssignment</a></div><div class="ttdeci">OptimizationResult AttemptBackendAssignment(BackendSettings &amp;backendSettings, Graph &amp;graph, Layer *layer, BackendId backend, DataType dataTypeIn, DataType dataTypeOut, const std::vector&lt; BackendId &gt; &amp;availablePreferredBackends, std::string &amp;reasonIfUnsupported, Optional&lt; std::vector&lt; std::string &gt; &amp;&gt; errMessages)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.xhtml#l00670">Network.cpp:670</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a14d24d90ab4ba2956e92e27890ba4c91acb17869fe51048b5a5c4c6106551a255"><div class="ttname"><a href="namespacearmnn.xhtml#a14d24d90ab4ba2956e92e27890ba4c91acb17869fe51048b5a5c4c6106551a255">armnn::PaddingMode::Constant</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a56943a0946e5f15e5e58054b8e7a04a4"><div class="ttname"><a href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">armnn::LayerType</a></div><div class="ttdeci">LayerType</div><div class="ttdoc">When adding a new layer, adapt also the LastLayer enum value in the enum class LayerType below...</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00458">Types.hpp:458</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a09ff1f6670d27d3b41e5b5d35a6c9f37"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a09ff1f6670d27d3b41e5b5d35a6c9f37">&#9670;&nbsp;</a></span>AssignSplitId()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void armnn::AssignSplitId </td>
+ <td>(</td>
+ <td class="paramtype">LayerSelectionInfo::LayerInfoContainer &amp;&#160;</td>
+ <td class="paramname"><em>layerInfos</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">LayerSelectionInfo &amp;&#160;</td>
+ <td class="paramname"><em>layerInfo</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_subgraph_view_selector_8cpp_source.xhtml#l00309">309</a> of file <a class="el" href="_subgraph_view_selector_8cpp_source.xhtml">SubgraphViewSelector.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_subgraph_view_selector_8cpp_source.xhtml#l00267">ForEachLayerInput()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_subgraph_view_selector_8cpp_source.xhtml#l00389">SubgraphViewSelector::SelectSubgraphs()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160;{</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="comment">// Check each input to see if we can attach ourselves to any of the subgraphs that have already been assigned.</span></div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <a class="code" href="namespacearmnn.xhtml#afce94270d9c4a51cd0c4ac6a58af4e26">ForEachLayerInput</a>(layerInfos, layerInfo, [&amp;](LayerSelectionInfo&amp; parentInfo)</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; {</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="comment">// We can only attach ourselves to the subgraph from this input if there isn&#39;t a cut here.</span></div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <span class="keywordflow">if</span> (layerInfo.m_IsSelected == parentInfo.m_IsSelected)</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; {</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="comment">// We also need to check that merging into this subgraph won&#39;t cause a dependency cycle between subgraphs.</span></div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="comment">// This will be the case if the subgraph that we will become part of is already a dependency</span></div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <span class="comment">// of one of the subgraphs that are input to this layer, e.g:</span></div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="comment">// 0 | The numbers (0, 1) are the subgraph IDs of each layer and we are looking at layer X.</span></div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="comment">// / \ |</span></div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="comment">// 1 0 | We can&#39;t merge X into subgraph 0, because the left-hand input already depends on subgraph 0.</span></div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="comment">// \ / | We can however merge X into subgraph 1.</span></div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="comment">// X |</span></div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; bool dependenciesOk = true;</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; ForEachLayerInput(layerInfos, layerInfo, [&amp;](LayerSelectionInfo&amp; otherParentInfo)</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; {</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="comment">// We call HasAntecedent() ~ n^2 times, where n is the number of inputs to this layer.</span></div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <span class="comment">// Hence it is important that this is efficient - see PartialSubgraph class description.</span></div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; if (otherParentInfo.m_Subgraph-&gt;HasAntecedent(parentInfo.m_Subgraph.get()))</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; {</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; dependenciesOk = false;</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; }</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; });</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160;</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <span class="keywordflow">if</span> (dependenciesOk)</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; {</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <span class="comment">// Merge into the subgraph of this input. If we have already been merged into another subgraph</span></div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <span class="comment">// (from another input of this layer), then merge both of them together.</span></div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <span class="keywordflow">if</span> (layerInfo.m_Subgraph == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; {</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; layerInfo.m_Subgraph = parentInfo.m_Subgraph;</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; }</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; {</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <span class="comment">// We call MergeWith() ~ n times, where n is the number of inputs to this layer.</span></div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <span class="comment">// Therefore it does not need to be as performant as HasAntecedent().</span></div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; layerInfo.m_Subgraph-&gt;MergeWith(parentInfo.m_Subgraph.get());</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; }</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; }</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; }</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; });</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160;</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="comment">// If we weren&#39;t able to merge into an existing subgraph then we need to make a new one</span></div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <span class="keywordflow">if</span> (layerInfo.m_Subgraph == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; {</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; layerInfo.m_Subgraph = std::make_shared&lt;PartialSubgraph&gt;();</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; }</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160;</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <span class="comment">// Record dependencies of the chosen subgraph based on the inputs of this layer.</span></div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <a class="code" href="namespacearmnn.xhtml#afce94270d9c4a51cd0c4ac6a58af4e26">ForEachLayerInput</a>(layerInfos, layerInfo, [&amp;](LayerSelectionInfo&amp; parentInfo)</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; {</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; <span class="comment">// These functions are called ~n times, where n is the number of inputs to this layer.</span></div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="comment">// Therefore it does not need to be as performant as HasAntecedent().</span></div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <span class="keywordflow">if</span> (!layerInfo.m_Subgraph-&gt;IsMergedWith(parentInfo.m_Subgraph.get()))</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; {</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; layerInfo.m_Subgraph-&gt;AddDirectAntecedent(parentInfo.m_Subgraph.get());</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; }</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; });</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_afce94270d9c4a51cd0c4ac6a58af4e26"><div class="ttname"><a href="namespacearmnn.xhtml#afce94270d9c4a51cd0c4ac6a58af4e26">armnn::ForEachLayerInput</a></div><div class="ttdeci">void ForEachLayerInput(LayerSelectionInfo::LayerInfoContainer &amp;layerInfos, LayerSelectionInfo &amp;layerInfo, Delegate function)</div><div class="ttdef"><b>Definition:</b> <a href="_subgraph_view_selector_8cpp_source.xhtml#l00267">SubgraphViewSelector.cpp:267</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a56f168327453ea4461cbc1c0ac7f15b6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a56f168327453ea4461cbc1c0ac7f15b6">&#9670;&nbsp;</a></span>AttemptBackendAssignment()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structarmnn_1_1_optimization_result.xhtml">OptimizationResult</a> armnn::AttemptBackendAssignment </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structarmnn_1_1_backend_settings.xhtml">BackendSettings</a> &amp;&#160;</td>
+ <td class="paramname"><em>backendSettings</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_graph.xhtml">Graph</a> &amp;&#160;</td>
+ <td class="paramname"><em>graph</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_layer.xhtml">Layer</a> *&#160;</td>
+ <td class="paramname"><em>layer</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a>&#160;</td>
+ <td class="paramname"><em>backend</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>&#160;</td>
+ <td class="paramname"><em>dataTypeIn</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>&#160;</td>
+ <td class="paramname"><em>dataTypeOut</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::vector&lt; <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &gt; &amp;&#160;</td>
+ <td class="paramname"><em>availablePreferredBackends</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::string &amp;&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; std::vector&lt; std::string &gt; &amp;&gt;&#160;</td>
+ <td class="paramname"><em>errMessages</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.xhtml#l00670">670</a> of file <a class="el" href="_network_8cpp_source.xhtml">Network.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">BFloat16</a>, <a class="el" href="namespacearmnn.xhtml#a14d24d90ab4ba2956e92e27890ba4c91acb17869fe51048b5a5c4c6106551a255">Constant</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a2ba4c46787312a2467153f40c542851a">ConvertBf16ToFp32</a>, <a class="el" href="_floating_point_converter_8cpp_source.xhtml#l00031">FloatingPointConverter::ConvertFloat16To32()</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a912a4b4d73726c282e3f79aa2c390d6c">ConvertFp16ToFp32</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a6512859957de2cf2a5fe4dccb07bd9da">ConvertFp32ToBf16</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4addf4f83b056acd5549949fc0350e9aad">ConvertFp32ToFp16</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4adb033d2f81b68f9a17e8f62de69fed4a">Convolution2d</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">Float16</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">Float32</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4acab78faff25393e9defd1911cb58133e">FullyConnected</a>, <a class="el" href="_backend_id_8hpp_source.xhtml#l00138">BackendId::Get()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00274">Layer::GetBackendId()</a>, <a class="el" href="_types_utils_8hpp_source.xhtml#l00202">GetDataTypeName()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00242">Layer::GetInputSlots()</a>, <a class="el" href="_internal_types_8cpp_source.xhtml#l00013">GetLayerTypeAsCString()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00323">Layer::GetOutputSlot()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00270">Layer::GetType()</a>, <a class="el" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>, <a class="el" href="_network_utils_8cpp_source.xhtml#l00051">InsertConvertBf16ToFp32LayersBefore()</a>, <a class="el" href="_network_utils_8cpp_source.xhtml#l00129">InsertConvertFp16ToFp32LayersBefore()</a>, <a class="el" href="_network_utils_8cpp_source.xhtml#l00168">InsertConvertFp32ToBf16LayersAfter()</a>, <a class="el" href="_network_utils_8cpp_source.xhtml#l00201">InsertConvertFp32ToFp16LayersAfter()</a>, <a class="el" href="_workload_factory_8cpp_source.xhtml#l01498">IWorkloadFactory::IsLayerSupported()</a>, <a class="el" href="_constant_layer_8hpp_source.xhtml#l00048">ConstantLayer::m_LayerOutput</a>, <a class="el" href="_network_8cpp_source.xhtml#l00584">ReportWarning()</a>, <a class="el" href="_network_8cpp_source.xhtml#l00596">ReturnWithError()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00275">Layer::SetBackendId()</a>, and <a class="el" href="_layer_8cpp_source.xhtml#l00061">OutputSlot::SetTensorInfo()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.xhtml#l00921">AssignBackendsIConnectable()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160;{</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; OptimizationResult result;</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160;</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; <span class="comment">// Helper lambda to compose meaningful error message before returning with error</span></div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; <span class="keyword">auto</span> ReturnError = [&amp;](<span class="keyword">const</span> <a class="code" href="namespacearmnn_serializer.xhtml#a9a8118be7780e95363d631cbca7e7800">Layer</a>* layer)</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; {</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#ae50fff9aa2a1ce46392d8641c10aa3bc">ReturnWithError</a>(result, layer, backendSettings, errMessages);</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; };</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160;</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; <span class="comment">// need to set the compute device on the layer</span></div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; <span class="comment">// before we can check if it is supported</span></div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; layer-&gt;SetBackendId(backend);</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; <span class="keywordflow">if</span> (!IWorkloadFactory::IsLayerSupported(*layer, EmptyOptional(), reasonIfUnsupported))</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; {</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; <span class="keywordflow">if</span> (dataTypeIn == DataType::Float16 || dataTypeOut == DataType::Float16)</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; {</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; <span class="keywordflow">if</span> (IWorkloadFactory::IsLayerSupported(*layer, DataType::Float32, reasonIfUnsupported)</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; &amp;&amp; layer-&gt;GetType() != LayerType::ConvertFp32ToFp16</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; &amp;&amp; layer-&gt;GetType() != LayerType::ConvertFp16ToFp32)</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; {</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; <span class="keyword">auto</span> ConstantLayerFromFp16ToFp32 = [](<a class="code" href="namespacearmnn_serializer.xhtml#a9a8118be7780e95363d631cbca7e7800">Layer</a>&amp; layer)</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; {</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; <span class="keywordflow">if</span> (layer.GetType() == LayerType::Constant)</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; {</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; ConstantLayer* constantLayer = PolymorphicDowncast&lt;ConstantLayer*&gt;(&amp;layer);</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160;</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; <span class="keyword">auto</span>&amp; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a> = constantLayer-&gt;m_LayerOutput-&gt;GetTensorInfo();</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160;</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; <span class="keywordflow">if</span> (info.GetDataType() == DataType::Float16)</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; {</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; std::vector&lt;float&gt; newValues(info.GetNumElements());</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160;</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; <a class="code" href="classarmnn_utils_1_1_floating_point_converter.xhtml#ac1f1568f02163a68906a0030e0ba9871">armnnUtils::FloatingPointConverter::ConvertFloat16To32</a>(</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; constantLayer-&gt;m_LayerOutput-&gt;GetConstTensor&lt;<a class="code" href="namespacearmnn.xhtml#a0f38fa92b2468d5378258a2b074c1a31">Half</a>&gt;(),</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; info.GetNumElements(),</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; newValues.data());</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160;</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; TensorInfo newInfo(info);</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; newInfo.SetDataType(DataType::Float32);</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; ConstTensor newInput(newInfo, newValues);</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; constantLayer-&gt;m_LayerOutput.reset(<span class="keyword">new</span> ScopedTensorHandle(newInput));</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160;</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; layer.GetOutputSlot(0).SetTensorInfo(newInfo);</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; }</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; }</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; };</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160;</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; <span class="keywordtype">bool</span> checkType = <span class="keyword">false</span>;</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160;</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> inputSlot : layer-&gt;GetInputSlots())</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; {</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; <span class="keyword">auto</span> connectedOutputSlot = inputSlot.GetConnectedOutputSlot();</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; <span class="keywordflow">if</span> (connectedOutputSlot-&gt;GetOwningLayer().GetType() == LayerType::Constant)</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; {</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; <span class="keywordflow">if</span> (connectedOutputSlot-&gt;GetNumConnections() == 1)</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; {</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; checkType = <span class="keyword">true</span>;</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; ConstantLayerFromFp16ToFp32(connectedOutputSlot-&gt;GetOwningLayer());</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; }</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; }</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; }</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160;</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; <span class="comment">// Insert FP16 -&gt; FP32 conversion layer before current layer</span></div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; std::vector&lt;ConvertFp16ToFp32Layer*&gt; convertFp16ToFp32Layers;</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; <span class="keywordflow">if</span> (dataTypeIn == DataType::Float16)</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; {</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; convertFp16ToFp32Layers =</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad31c56533e4f9f9f51719599fbfcf7bb">InsertConvertFp16ToFp32LayersBefore</a>(graph, *layer, checkType);</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; }</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160;</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; <span class="comment">// Insert FP32 -&gt; FP16 conversion layer after current layer</span></div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; std::vector&lt;ConvertFp32ToFp16Layer*&gt; convertFp32ToFp16Layers;</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; <span class="keywordflow">if</span> (dataTypeOut == DataType::Float16)</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; {</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; convertFp32ToFp16Layers =</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; <a class="code" href="namespacearmnn.xhtml#abf625e50a5eaeafce5b39580dc95a9d3">InsertConvertFp32ToFp16LayersAfter</a>(graph, *layer);</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; }</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160;</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; <span class="comment">// Assign a supported backend to the newly introduced conversion layers</span></div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; <span class="keyword">auto</span> AssignFirstSupportedBackend = [&amp;](<a class="code" href="namespacearmnn_serializer.xhtml#a9a8118be7780e95363d631cbca7e7800">Layer</a>* layer, BackendId preferredBackend)</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; {</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; <span class="keywordtype">bool</span> supportedBackendFound = <span class="keyword">false</span>;</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; std::string reasonIfUnsupported;</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160;</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; <span class="comment">// Try preferred backend first</span></div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; layer-&gt;SetBackendId(preferredBackend);</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; <span class="keywordflow">if</span> (IWorkloadFactory::IsLayerSupported(*layer,</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; EmptyOptional(),</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; reasonIfUnsupported))</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; {</div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; supportedBackendFound = <span class="keyword">true</span>;</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; }</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; {</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; backend : availablePreferredBackends)</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; {</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; <span class="comment">// Skip preferred backend (we already determined that it is not supported)</span></div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; <span class="keywordflow">if</span> (backend == preferredBackend)</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; {</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; }</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160;</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; layer-&gt;SetBackendId(backend);</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; <span class="keywordflow">if</span> (IWorkloadFactory::IsLayerSupported(*layer,</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; EmptyOptional(),</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; reasonIfUnsupported))</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; {</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; supportedBackendFound = <span class="keyword">true</span>;</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; }</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; }</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; }</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160;</div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; <span class="keywordflow">return</span> supportedBackendFound;</div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; };</div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160;</div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; <span class="keywordflow">for</span> (ConvertFp16ToFp32Layer* convertLayer : convertFp16ToFp32Layers)</div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; {</div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; <span class="keywordflow">if</span> (!AssignFirstSupportedBackend(convertLayer, backend))</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; {</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; <span class="keywordflow">return</span> ReturnError(convertLayer);</div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; }</div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; }</div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160;</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; <span class="keywordflow">for</span> (ConvertFp32ToFp16Layer* convertLayer : convertFp32ToFp16Layers)</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; {</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; <span class="keywordflow">if</span> (!AssignFirstSupportedBackend(convertLayer, backend))</div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160; {</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; <span class="keywordflow">return</span> ReturnError(convertLayer);</div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; }</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; }</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160;</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160; }</div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; }</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dataTypeIn == DataType::BFloat16 || dataTypeOut == DataType::BFloat16)</div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; {</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; <span class="keywordflow">if</span> (IWorkloadFactory::IsLayerSupported(*layer, DataType::Float32, reasonIfUnsupported)</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; &amp;&amp; layer-&gt;GetType() != LayerType::ConvertFp32ToBf16</div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; &amp;&amp; layer-&gt;GetType() != LayerType::ConvertBf16ToFp32)</div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; {</div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; <span class="comment">// Insert BF16 -&gt; FP32 conversion layer before current layer</span></div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; std::vector&lt;ConvertBf16ToFp32Layer*&gt; convertBf16ToFp32Layers;</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; <span class="keywordflow">if</span> (dataTypeIn == DataType::BFloat16)</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; {</div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; convertBf16ToFp32Layers =</div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; <a class="code" href="namespacearmnn.xhtml#adf69fa0e439ddb632462b42253d67b6a">InsertConvertBf16ToFp32LayersBefore</a>(graph, *layer);</div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; <span class="keywordflow">if</span> (layer-&gt;GetType() == LayerType::Convolution2d)</div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; {</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; ConvertBf16ToFp32Weight&lt;Convolution2dLayer&gt;(layer);</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; }</div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (layer-&gt;GetType() == <a class="code" href="namespacearmnn.xhtml#a435f9350a94adfbb0d5b9abb5f430914">LayerType::FullyConnected</a>)</div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; {</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; ConvertBf16ToFp32Weight&lt;FullyConnectedLayer&gt;(layer);</div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; }</div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160; }</div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160;</div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; <span class="comment">// Insert FP32 -&gt; BF16 conversion layer after current layer</span></div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; std::vector&lt;ConvertFp32ToBf16Layer*&gt; convertFp32ToBf16Layers;</div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; <span class="keywordflow">if</span> (dataTypeOut == DataType::BFloat16)</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; {</div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; convertFp32ToBf16Layers =</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; <a class="code" href="namespacearmnn.xhtml#a8ae358a041b4adc33577e8b4c07b8d23">InsertConvertFp32ToBf16LayersAfter</a>(graph, *layer);</div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160; }</div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160;</div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; <span class="comment">// Assign a supported backend to the newly introduced conversion layers</span></div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; <span class="keyword">auto</span> AssignFirstSupportedBackend = [&amp;](<a class="code" href="namespacearmnn_serializer.xhtml#a9a8118be7780e95363d631cbca7e7800">Layer</a>* layer, BackendId preferredBackend)</div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; {</div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; <span class="keywordtype">bool</span> supportedBackendFound = <span class="keyword">false</span>;</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160; std::string reasonIfUnsupported;</div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160;</div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; <span class="comment">// Try preferred backend first</span></div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; layer-&gt;SetBackendId(preferredBackend);</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160; <span class="keywordflow">if</span> (IWorkloadFactory::IsLayerSupported(*layer,</div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160; EmptyOptional(),</div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160; reasonIfUnsupported))</div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160; {</div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160; supportedBackendFound = <span class="keyword">true</span>;</div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160; }</div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160; {</div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; backend : availablePreferredBackends)</div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160; {</div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160; <span class="comment">// Skip preferred backend (we already determined that it is not supported)</span></div><div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160; <span class="keywordflow">if</span> (backend == preferredBackend)</div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160; {</div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160; }</div><div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160;</div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160; layer-&gt;SetBackendId(backend);</div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160; <span class="keywordflow">if</span> (IWorkloadFactory::IsLayerSupported(*layer,</div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160; EmptyOptional(),</div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160; reasonIfUnsupported))</div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160; {</div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160; supportedBackendFound = <span class="keyword">true</span>;</div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160; }</div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160; }</div><div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160; }</div><div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160;</div><div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160; <span class="keywordflow">return</span> supportedBackendFound;</div><div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160; };</div><div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160;</div><div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160; <span class="keywordflow">for</span> (ConvertBf16ToFp32Layer* convertLayer : convertBf16ToFp32Layers)</div><div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160; {</div><div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; <span class="keywordflow">if</span> (!AssignFirstSupportedBackend(convertLayer, backend))</div><div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160; {</div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160; <span class="keywordflow">return</span> ReturnError(convertLayer);</div><div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160; }</div><div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160; }</div><div class="line"><a name="l00889"></a><span class="lineno"> 889</span>&#160;</div><div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160; <span class="keywordflow">for</span> (ConvertFp32ToBf16Layer* convertLayer : convertFp32ToBf16Layers)</div><div class="line"><a name="l00891"></a><span class="lineno"> 891</span>&#160; {</div><div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160; <span class="keywordflow">if</span> (!AssignFirstSupportedBackend(convertLayer, backend))</div><div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160; {</div><div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160; <span class="keywordflow">return</span> ReturnError(convertLayer);</div><div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160; }</div><div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160; }</div><div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160;</div><div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l00899"></a><span class="lineno"> 899</span>&#160; }</div><div class="line"><a name="l00900"></a><span class="lineno"> 900</span>&#160; }</div><div class="line"><a name="l00901"></a><span class="lineno"> 901</span>&#160;</div><div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160; std::stringstream warningMsg;</div><div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160; warningMsg &lt;&lt; <span class="stringliteral">&quot;Layer of type &quot;</span> &lt;&lt; <a class="code" href="namespacearmnn.xhtml#addb6b14dd1b632263ffe77430259a7c4">GetLayerTypeAsCString</a>(layer-&gt;GetType())</div><div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160; &lt;&lt; <span class="stringliteral">&quot; is not supported on requested backend &quot;</span> &lt;&lt; layer-&gt;GetBackendId().Get()</div><div class="line"><a name="l00905"></a><span class="lineno"> 905</span>&#160; &lt;&lt; <span class="stringliteral">&quot; for input data type &quot;</span> &lt;&lt; <a class="code" href="namespacearmnn.xhtml#a81b5ff8545adad19a1c9d4ca076d552c">GetDataTypeName</a>(dataTypeIn)</div><div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160; &lt;&lt; <span class="stringliteral">&quot; and output data type &quot;</span> &lt;&lt; <a class="code" href="namespacearmnn.xhtml#a81b5ff8545adad19a1c9d4ca076d552c">GetDataTypeName</a>(dataTypeOut)</div><div class="line"><a name="l00907"></a><span class="lineno"> 907</span>&#160; &lt;&lt; <span class="stringliteral">&quot; (reason: &quot;</span> &lt;&lt; reasonIfUnsupported</div><div class="line"><a name="l00908"></a><span class="lineno"> 908</span>&#160; &lt;&lt; <span class="stringliteral">&quot;), falling back to the next backend.&quot;</span>;</div><div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160; <a class="code" href="namespacearmnn.xhtml#a38e626422579decc13e3ee37da1a84c9">ReportWarning</a>(warningMsg.str(), errMessages);</div><div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160;</div><div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160; <span class="keywordflow">return</span> OptimizationResult(<span class="keyword">true</span>, <span class="keyword">false</span>);</div><div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160; }</div><div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160; {</div><div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l00916"></a><span class="lineno"> 916</span>&#160; }</div><div class="line"><a name="l00917"></a><span class="lineno"> 917</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_abf625e50a5eaeafce5b39580dc95a9d3"><div class="ttname"><a href="namespacearmnn.xhtml#abf625e50a5eaeafce5b39580dc95a9d3">armnn::InsertConvertFp32ToFp16LayersAfter</a></div><div class="ttdeci">std::vector&lt; ConvertFp32ToFp16Layer * &gt; InsertConvertFp32ToFp16LayersAfter(Graph &amp;graph, Layer &amp;layer)</div><div class="ttdef"><b>Definition:</b> <a href="_network_utils_8cpp_source.xhtml#l00201">NetworkUtils.cpp:201</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad31c56533e4f9f9f51719599fbfcf7bb"><div class="ttname"><a href="namespacearmnn.xhtml#ad31c56533e4f9f9f51719599fbfcf7bb">armnn::InsertConvertFp16ToFp32LayersBefore</a></div><div class="ttdeci">std::vector&lt; ConvertFp16ToFp32Layer * &gt; InsertConvertFp16ToFp32LayersBefore(Graph &amp;graph, Layer &amp;layer, bool expectCorrectInputType)</div><div class="ttdef"><b>Definition:</b> <a href="_network_utils_8cpp_source.xhtml#l00129">NetworkUtils.cpp:129</a></div></div>
+<div class="ttc" id="namespacearmnn_serializer_xhtml_a9a8118be7780e95363d631cbca7e7800"><div class="ttname"><a href="namespacearmnn_serializer.xhtml#a9a8118be7780e95363d631cbca7e7800">armnnSerializer::Layer</a></div><div class="ttdeci">Layer</div><div class="ttdef"><b>Definition:</b> <a href="_armnn_schema__generated_8h_source.xhtml#l01243">ArmnnSchema_generated.h:1243</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ae50fff9aa2a1ce46392d8641c10aa3bc"><div class="ttname"><a href="namespacearmnn.xhtml#ae50fff9aa2a1ce46392d8641c10aa3bc">armnn::ReturnWithError</a></div><div class="ttdeci">OptimizationResult ReturnWithError(OptimizationResult res, const Layer *layer, const BackendSettings &amp;backendSettings, Optional&lt; std::vector&lt; std::string &gt; &amp;&gt; errMessages)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.xhtml#l00596">Network.cpp:596</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a81b5ff8545adad19a1c9d4ca076d552c"><div class="ttname"><a href="namespacearmnn.xhtml#a81b5ff8545adad19a1c9d4ca076d552c">armnn::GetDataTypeName</a></div><div class="ttdeci">constexpr const char * GetDataTypeName(DataType dataType)</div><div class="ttdef"><b>Definition:</b> <a href="_types_utils_8hpp_source.xhtml#l00202">TypesUtils.hpp:202</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_adf69fa0e439ddb632462b42253d67b6a"><div class="ttname"><a href="namespacearmnn.xhtml#adf69fa0e439ddb632462b42253d67b6a">armnn::InsertConvertBf16ToFp32LayersBefore</a></div><div class="ttdeci">std::vector&lt; ConvertBf16ToFp32Layer * &gt; InsertConvertBf16ToFp32LayersBefore(Graph &amp;graph, Layer &amp;layer, bool expectCorrectInputType)</div><div class="ttdef"><b>Definition:</b> <a href="_network_utils_8cpp_source.xhtml#l00051">NetworkUtils.cpp:51</a></div></div>
+<div class="ttc" id="classarmnn_utils_1_1_floating_point_converter_xhtml_ac1f1568f02163a68906a0030e0ba9871"><div class="ttname"><a href="classarmnn_utils_1_1_floating_point_converter.xhtml#ac1f1568f02163a68906a0030e0ba9871">armnnUtils::FloatingPointConverter::ConvertFloat16To32</a></div><div class="ttdeci">static void ConvertFloat16To32(const void *srcFloat16Buffer, size_t numElements, float *dstFloat32Buffer)</div><div class="ttdef"><b>Definition:</b> <a href="_floating_point_converter_8cpp_source.xhtml#l00031">FloatingPointConverter.cpp:31</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a8ae358a041b4adc33577e8b4c07b8d23"><div class="ttname"><a href="namespacearmnn.xhtml#a8ae358a041b4adc33577e8b4c07b8d23">armnn::InsertConvertFp32ToBf16LayersAfter</a></div><div class="ttdeci">std::vector&lt; ConvertFp32ToBf16Layer * &gt; InsertConvertFp32ToBf16LayersAfter(Graph &amp;graph, Layer &amp;layer)</div><div class="ttdef"><b>Definition:</b> <a href="_network_utils_8cpp_source.xhtml#l00168">NetworkUtils.cpp:168</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c"><div class="ttname"><a href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">armnn::BoostLogSeverityMapping::info</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a38e626422579decc13e3ee37da1a84c9"><div class="ttname"><a href="namespacearmnn.xhtml#a38e626422579decc13e3ee37da1a84c9">armnn::ReportWarning</a></div><div class="ttdeci">void ReportWarning(const std::string &amp;warningMessage, Optional&lt; std::vector&lt; std::string &gt; &amp;&gt; warningMessages)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.xhtml#l00584">Network.cpp:584</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a0f38fa92b2468d5378258a2b074c1a31"><div class="ttname"><a href="namespacearmnn.xhtml#a0f38fa92b2468d5378258a2b074c1a31">armnn::Half</a></div><div class="ttdeci">half_float::half Half</div><div class="ttdef"><b>Definition:</b> <a href="_half_8hpp_source.xhtml#l00018">Half.hpp:18</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_addb6b14dd1b632263ffe77430259a7c4"><div class="ttname"><a href="namespacearmnn.xhtml#addb6b14dd1b632263ffe77430259a7c4">armnn::GetLayerTypeAsCString</a></div><div class="ttdeci">const char * GetLayerTypeAsCString(LayerType type)</div><div class="ttdef"><b>Definition:</b> <a href="_internal_types_8cpp_source.xhtml#l00013">InternalTypes.cpp:13</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a435f9350a94adfbb0d5b9abb5f430914"><div class="ttname"><a href="namespacearmnn.xhtml#a435f9350a94adfbb0d5b9abb5f430914">armnn::FullyConnected</a></div><div class="ttdeci">void FullyConnected(const TensorShape &amp;rInputShape, Decoder&lt; float &gt; &amp;rInputDecoder, const TensorShape &amp;rOutputShape, Encoder&lt; float &gt; &amp;rOutputEncoder, const TensorShape &amp;rWeightsShape, Decoder&lt; float &gt; &amp;rWeightDecoder, Decoder&lt; float &gt; *pBiasDecoder, const bool biasEnabled, const unsigned int K, const bool transposeWeights)</div><div class="ttdoc">Performs a matrix multiplication and optionally adds a bias. </div><div class="ttdef"><b>Definition:</b> <a href="backends_2reference_2workloads_2_fully_connected_8cpp_source.xhtml#l00015">FullyConnected.cpp:15</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ac2807505b850738bc8a1991ce669dd47"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac2807505b850738bc8a1991ce669dd47">&#9670;&nbsp;</a></span>BackendRegistryInstance()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classarmnn_1_1_backend_registry.xhtml">BackendRegistry</a> &amp; BackendRegistryInstance </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_backend_registry_8cpp_source.xhtml#l00013">13</a> of file <a class="el" href="_backend_registry_8cpp_source.xhtml">BackendRegistry.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_inference_model_8hpp_source.xhtml#l00398">InferenceModel&lt; IParser, TDataType &gt;::AddCommandLineOptions()</a>, <a class="el" href="_common_test_utils_8cpp_source.xhtml#l00045">CreateBackendObject()</a>, <a class="el" href="_network_8cpp_source.xhtml#l01136">CreateSupportedBackends()</a>, <a class="el" href="_dynamic_backend_utils_8cpp_source.xhtml#l00312">DynamicBackendUtils::DeregisterDynamicBackends()</a>, <a class="el" href="_backend_helper_8cpp_source.xhtml#l00044">GetCapability()</a>, <a class="el" href="_backend_helper_8cpp_source.xhtml#l00016">GetILayerSupportByBackendId()</a>, <a class="el" href="_backend_helper_8cpp_source.xhtml#l00129">GetNumberOfCacheFiles()</a>, <a class="el" href="_profiling_service_8cpp_source.xhtml#l00329">ProfilingService::GetSendTimelinePacket()</a>, <a class="el" href="_profiling_test_utils_8cpp_source.xhtml#l00043">GetSuitableBackendRegistered()</a>, <a class="el" href="_backend_helper_8cpp_source.xhtml#l00100">HasCapability()</a>, <a class="el" href="_backend_helper_8cpp_source.xhtml#l00114">IsCapabilitySupported()</a>, <a class="el" href="_model_accuracy_tool-_armnn_8cpp_source.xhtml#l00049">main()</a>, <a class="el" href="_loaded_network_8cpp_source.xhtml#l00082">LoadedNetwork::MakeLoadedNetwork()</a>, <a class="el" href="backends_2backends_common_2test_2_mock_backend_8cpp_source.xhtml#l00068">MockBackendInitialiser::MockBackendInitialiser()</a>, <a class="el" href="_mock_import_backend_8cpp_source.xhtml#l00022">MockImportBackendInitialiser::MockImportBackendInitialiser()</a>, <a class="el" href="_execute_network_program_options_8cpp_source.xhtml#l00171">ProgramOptions::ProgramOptions()</a>, <a class="el" href="_loaded_network_8cpp_source.xhtml#l02062">LoadedNetwork::RegisterDebugCallback()</a>, <a class="el" href="_dynamic_backend_utils_8cpp_source.xhtml#l00324">DynamicBackendUtils::RegisterDynamicBackends()</a>, <a class="el" href="_dynamic_backend_tests_8hpp_source.xhtml#l01245">RuntimeEmptyTestImpl()</a>, <a class="el" href="_runtime_8cpp_source.xhtml#l00297">RuntimeImpl::RuntimeImpl()</a>, <a class="el" href="_dynamic_backend_tests_8hpp_source.xhtml#l01374">RuntimeInvalidOverridePathTestImpl()</a>, <a class="el" href="_optimizer_tests_8cpp_source.xhtml#l00306">TEST_SUITE()</a>, <a class="el" href="_dynamic_backend_tests_8hpp_source.xhtml#l00099">TestBackendRegistry::TestBackendRegistry()</a>, <a class="el" href="backends_2backends_common_2test_2_mock_backend_8cpp_source.xhtml#l00077">MockBackendInitialiser::~MockBackendInitialiser()</a>, <a class="el" href="_mock_import_backend_8cpp_source.xhtml#l00031">MockImportBackendInitialiser::~MockImportBackendInitialiser()</a>, <a class="el" href="_runtime_8cpp_source.xhtml#l00509">RuntimeImpl::~RuntimeImpl()</a>, and <a class="el" href="_dynamic_backend_tests_8hpp_source.xhtml#l00104">TestBackendRegistry::~TestBackendRegistry()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;{</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; <span class="keyword">static</span> BackendRegistry instance;</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; <span class="keywordflow">return</span> instance;</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="adc251e65d99405496d503811589e9a20"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adc251e65d99405496d503811589e9a20">&#9670;&nbsp;</a></span>BatchNormImpl()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void BatchNormImpl </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_batch_normalization_queue_descriptor.xhtml">BatchNormalizationQueueDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>data</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>meanDecoder</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>varianceDecoder</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>betaDecoder</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>gammaDecoder</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>inputDecoder</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>outputEncoder</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_batch_norm_impl_8cpp_source.xhtml#l00018">18</a> of file <a class="el" href="_batch_norm_impl_8cpp_source.xhtml">BatchNormImpl.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Decoder&lt; IType &gt;::Get()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00023">DataLayoutIndexed::GetChannelsIndex()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00024">DataLayoutIndexed::GetHeightIndex()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00028">DataLayoutIndexed::GetIndex()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</a>, <a class="el" href="_ref_workload_utils_8hpp_source.xhtml#l00026">GetTensorInfo()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00025">DataLayoutIndexed::GetWidthIndex()</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00803">BatchNormalizationDescriptor::m_DataLayout</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00801">BatchNormalizationDescriptor::m_Eps</a>, <a class="el" href="include_2armnn_2backends_2_workload_data_8hpp_source.xhtml#l00026">QueueDescriptor::m_Inputs</a>, <a class="el" href="include_2armnn_2backends_2_workload_data_8hpp_source.xhtml#l00054">QueueDescriptorWithParameters&lt; LayerDescriptor &gt;::m_Parameters</a>, and <a class="el" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_ref_batch_normalization_workload_8cpp_source.xhtml#l00030">RefBatchNormalizationWorkload::ExecuteAsync()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;{</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">const</span> TensorInfo&amp; inputInfo = <a class="code" href="namespacearmnn_utils.xhtml#acee63cd08da47910fc166a1990988fa8">GetTensorInfo</a>(data.m_Inputs[0]);</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keyword">const</span> TensorShape inputShape = inputInfo.GetShape();</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml">armnnUtils::DataLayoutIndexed</a> dataLayout(data.m_Parameters.m_DataLayout);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputBatches = inputShape[0];</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputHeight = inputShape[dataLayout.GetHeightIndex()];</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputWidth = inputShape[dataLayout.GetWidthIndex()];</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputChannels = inputShape[dataLayout.GetChannelsIndex()];</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> c = 0; c &lt; inputChannels; c++)</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; {</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; meanDecoder[c];</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; varianceDecoder[c];</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; betaDecoder[c];</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; gammaDecoder[c];</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordtype">float</span> mean = meanDecoder.<a class="code" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Get</a>();</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordtype">float</span> var = varianceDecoder.<a class="code" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Get</a>();</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordtype">float</span> beta = betaDecoder.<a class="code" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Get</a>();</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordtype">float</span> gamma = gammaDecoder.<a class="code" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Get</a>();</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordtype">float</span> mult = gamma / sqrtf(var + data.m_Parameters.m_Eps);</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordtype">float</span> add = beta - mult * mean;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> n = 0; n &lt; inputBatches; n++)</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; {</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> h = 0; h &lt; inputHeight; h++)</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; {</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> w = 0; w &lt; inputWidth; w++)</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; {</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index = dataLayout.GetIndex(inputShape, n, c, h, w);</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; inputDecoder[index];</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; outputEncoder[index];</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; outputEncoder.<a class="code" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Set</a>(mult * inputDecoder.<a class="code" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Get</a>() + add);</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; }</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; }</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; }</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; }</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_encoder_xhtml_ae3b62b846a9c239f332830b9e36030eb"><div class="ttname"><a href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">armnn::Encoder::Set</a></div><div class="ttdeci">virtual void Set(IType right)=0</div></div>
+<div class="ttc" id="classarmnn_1_1_decoder_xhtml_ac729108381e2340bea12877971713ecb"><div class="ttname"><a href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">armnn::Decoder::Get</a></div><div class="ttdeci">virtual IType Get() const =0</div></div>
+<div class="ttc" id="classarmnn_utils_1_1_data_layout_indexed_xhtml"><div class="ttname"><a href="classarmnn_utils_1_1_data_layout_indexed.xhtml">armnnUtils::DataLayoutIndexed</a></div><div class="ttdoc">Provides access to the appropriate indexes for Channels, Height and Width based on DataLayout...</div><div class="ttdef"><b>Definition:</b> <a href="_data_layout_indexed_8hpp_source.xhtml#l00017">DataLayoutIndexed.hpp:17</a></div></div>
+<div class="ttc" id="namespacearmnn_utils_xhtml_acee63cd08da47910fc166a1990988fa8"><div class="ttname"><a href="namespacearmnn_utils.xhtml#acee63cd08da47910fc166a1990988fa8">armnnUtils::GetTensorInfo</a></div><div class="ttdeci">armnn::TensorInfo GetTensorInfo(unsigned int numberOfBatches, unsigned int numberOfChannels, unsigned int height, unsigned int width, const armnn::DataLayout dataLayout, const armnn::DataType dataType)</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_utils_8cpp_source.xhtml#l00038">TensorUtils.cpp:38</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a8746512fab5ec10c2c57800c66311ba7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8746512fab5ec10c2c57800c66311ba7">&#9670;&nbsp;</a></span>BatchToSpaceNd()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void BatchToSpaceNd </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_utils_1_1_data_layout_indexed.xhtml">DataLayoutIndexed</a> &amp;&#160;</td>
+ <td class="paramname"><em>dataLayout</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>inputTensorInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>outputTensorInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::vector&lt; unsigned int &gt; &amp;&#160;</td>
+ <td class="paramname"><em>blockShape</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::vector&lt; std::pair&lt; unsigned int, unsigned int &gt;&gt; &amp;&#160;</td>
+ <td class="paramname"><em>cropsData</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>inputDecoder</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>outputEncoder</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="backends_2reference_2workloads_2_batch_to_space_n_d_8cpp_source.xhtml#l00035">35</a> of file <a class="el" href="backends_2reference_2workloads_2_batch_to_space_n_d_8cpp_source.xhtml">BatchToSpaceNd.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00015">ARMNN_ASSERT_MSG</a>, <a class="el" href="backends_2reference_2workloads_2_batch_to_space_n_d_8cpp_source.xhtml#l00035">BatchToSpaceNd()</a>, <a class="el" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Decoder&lt; IType &gt;::Get()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00023">DataLayoutIndexed::GetChannelsIndex()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00024">DataLayoutIndexed::GetHeightIndex()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00174">TensorShape::GetNumDimensions()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00025">DataLayoutIndexed::GetWidthIndex()</a>, <a class="el" href="backends_2reference_2workloads_2_batch_to_space_n_d_8cpp_source.xhtml#l00019">Offset()</a>, and <a class="el" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="backends_2reference_2workloads_2_batch_to_space_n_d_8cpp_source.xhtml#l00035">BatchToSpaceNd()</a>, <a class="el" href="_batch_to_space_nd_layer_8cpp_source.xhtml#l00026">BatchToSpaceNdLayer::BatchToSpaceNdLayer()</a>, and <a class="el" href="_test_name_and_descriptor_layer_visitor_8cpp_source.xhtml#l00274">TEST_SUITE()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;{</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> inputShape = inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>();</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(inputShape.<a class="code" href="classarmnn_1_1_tensor_shape.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>() == 4, <span class="stringliteral">&quot;Expected Input with 4 Dimensions&quot;</span>);</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> outputShape = outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>();</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(outputShape.GetNumDimensions() == 4, <span class="stringliteral">&quot;Expected Output with 4 Dimensions&quot;</span>);</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputBatchSize = inputShape[0];</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channels = inputShape[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a861b2621ee46e4b63379988b360b8cd9">GetChannelsIndex</a>()];</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputBatchSize = outputShape[0];</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputHeight = outputShape[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a61c00316c443adc233c24e85c6c5b740">GetHeightIndex</a>()];</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputWidth = outputShape[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a414e6f95548e6f7a01d5028b55ad3941">GetWidthIndex</a>()];</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(blockShape.size() &gt; 0, <span class="stringliteral">&quot;BlockShape must contain 1 or more entries&quot;</span>);</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> blockShapeHeight = blockShape[0];</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> blockShapeWidth = blockShape[1];</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(cropsData.size() &gt; 0, <span class="stringliteral">&quot;Crops must contain 1 or more entries&quot;</span>);</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> cropsTop = cropsData[0].first;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> cropsLeft = cropsData[1].first;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inBatch = 0; inBatch &lt; inputBatchSize; ++inBatch)</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; {</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outBatch = inBatch % outputBatchSize;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> spatialOffset = inBatch / outputBatchSize;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inH = 0; inH &lt; inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a61c00316c443adc233c24e85c6c5b740">GetHeightIndex</a>()]; ++inH) {</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outH = inH * blockShapeHeight + spatialOffset / blockShapeWidth - cropsTop;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">if</span> (outH &gt;= outputHeight)</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; {</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; }</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inW = 0; inW &lt; inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a414e6f95548e6f7a01d5028b55ad3941">GetWidthIndex</a>()]; ++inW) {</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outW = inW * blockShapeWidth + spatialOffset % blockShapeWidth - cropsLeft;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">if</span> (outW &gt;= outputWidth)</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; {</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; }</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> c = 0; c &lt; channels; c++)</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; {</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outOffset = <a class="code" href="namespacearmnn.xhtml#ac70a495c61526a0500b33b23db86ca27">Offset</a>(outputShape, outBatch, outH, outW, c, dataLayout);</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inOffset = <a class="code" href="namespacearmnn.xhtml#ac70a495c61526a0500b33b23db86ca27">Offset</a>(inputShape, inBatch, inH, inW, c, dataLayout);</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; outputEncoder[outOffset];</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; inputDecoder[inOffset];</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; outputEncoder.<a class="code" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Set</a>(inputDecoder.<a class="code" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Get</a>());</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; }</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; }</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; }</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; }</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;}</div><div class="ttc" id="classarmnn_utils_1_1_data_layout_indexed_xhtml_a414e6f95548e6f7a01d5028b55ad3941"><div class="ttname"><a href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a414e6f95548e6f7a01d5028b55ad3941">armnnUtils::DataLayoutIndexed::GetWidthIndex</a></div><div class="ttdeci">unsigned int GetWidthIndex() const</div><div class="ttdef"><b>Definition:</b> <a href="_data_layout_indexed_8hpp_source.xhtml#l00025">DataLayoutIndexed.hpp:25</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a8b5d0f8a24e9d9238f412260a552acf8"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">armnn::TensorInfo::GetShape</a></div><div class="ttdeci">const TensorShape &amp; GetShape() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00191">Tensor.hpp:191</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ac70a495c61526a0500b33b23db86ca27"><div class="ttname"><a href="namespacearmnn.xhtml#ac70a495c61526a0500b33b23db86ca27">armnn::Offset</a></div><div class="ttdeci">unsigned int Offset(const TensorShape &amp;shape, unsigned int batch, unsigned int height, unsigned int width, unsigned int channels, const DataLayoutIndexed &amp;dataLayout)</div><div class="ttdef"><b>Definition:</b> <a href="backends_2reference_2workloads_2_batch_to_space_n_d_8cpp_source.xhtml#l00019">BatchToSpaceNd.cpp:19</a></div></div>
+<div class="ttc" id="classarmnn_1_1_encoder_xhtml_ae3b62b846a9c239f332830b9e36030eb"><div class="ttname"><a href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">armnn::Encoder::Set</a></div><div class="ttdeci">virtual void Set(IType right)=0</div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_shape_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00020">Tensor.hpp:20</a></div></div>
+<div class="ttc" id="classarmnn_utils_1_1_data_layout_indexed_xhtml_a61c00316c443adc233c24e85c6c5b740"><div class="ttname"><a href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a61c00316c443adc233c24e85c6c5b740">armnnUtils::DataLayoutIndexed::GetHeightIndex</a></div><div class="ttdeci">unsigned int GetHeightIndex() const</div><div class="ttdef"><b>Definition:</b> <a href="_data_layout_indexed_8hpp_source.xhtml#l00024">DataLayoutIndexed.hpp:24</a></div></div>
+<div class="ttc" id="classarmnn_1_1_decoder_xhtml_ac729108381e2340bea12877971713ecb"><div class="ttname"><a href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">armnn::Decoder::Get</a></div><div class="ttdeci">virtual IType Get() const =0</div></div>
+<div class="ttc" id="_assert_8hpp_xhtml_a91c4dfde57907d7698c7531785690a7f"><div class="ttname"><a href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a></div><div class="ttdeci">#define ARMNN_ASSERT_MSG(COND, MSG)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00015">Assert.hpp:15</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_shape_xhtml_a157e27d41e9f6b21f0d3c025fa47dc24"><div class="ttname"><a href="classarmnn_1_1_tensor_shape.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">armnn::TensorShape::GetNumDimensions</a></div><div class="ttdeci">unsigned int GetNumDimensions() const</div><div class="ttdoc">Function that returns the tensor rank. </div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8cpp_source.xhtml#l00174">Tensor.cpp:174</a></div></div>
+<div class="ttc" id="classarmnn_utils_1_1_data_layout_indexed_xhtml_a861b2621ee46e4b63379988b360b8cd9"><div class="ttname"><a href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a861b2621ee46e4b63379988b360b8cd9">armnnUtils::DataLayoutIndexed::GetChannelsIndex</a></div><div class="ttdeci">unsigned int GetChannelsIndex() const</div><div class="ttdef"><b>Definition:</b> <a href="_data_layout_indexed_8hpp_source.xhtml#l00023">DataLayoutIndexed.hpp:23</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a20f74b679d59b52e9fae3bbef8f10ffb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a20f74b679d59b52e9fae3bbef8f10ffb">&#9670;&nbsp;</a></span>CalcLevel()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int armnn::CalcLevel </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_event.xhtml">Event</a> *&#160;</td>
+ <td class="paramname"><em>eventPtr</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_profiling_8cpp_source.xhtml#l00246">246</a> of file <a class="el" href="_profiling_8cpp_source.xhtml">Profiling.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_profiling_event_8cpp_source.xhtml#l00079">Event::GetParentEvent()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_profiling_8cpp_source.xhtml#l00456">ProfilerImpl::AnalyzeEventsAndWriteResults()</a>, and <a class="el" href="_profiling_8cpp_source.xhtml#l00257">ProfilerImpl::PopulateParent()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160;{</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="keywordtype">int</span> level = 0;</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="keywordflow">while</span> (eventPtr != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; {</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; eventPtr = eventPtr-&gt;GetParentEvent();</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; level++;</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; }</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keywordflow">return</span> level;</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a738d3243c1dc564304d78908c6112e4f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a738d3243c1dc564304d78908c6112e4f">&#9670;&nbsp;</a></span>CalculateEdgeStrategy()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn.xhtml#aff209afc1dc598da399e3e78617ce016">EdgeStrategy</a> armnn::CalculateEdgeStrategy </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a> &amp;&#160;</td>
+ <td class="paramname"><em>backends</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_i_tensor_handle_factory.xhtml#a32f4aa6a7089d877af08928139c2c277">ITensorHandleFactory::FactoryId</a>&#160;</td>
+ <td class="paramname"><em>srcFactoryId</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_layer.xhtml">Layer</a> &amp;&#160;</td>
+ <td class="paramname"><em>layer</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_layer.xhtml">Layer</a> &amp;&#160;</td>
+ <td class="paramname"><em>connectedLayer</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_tensor_handle_factory_registry.xhtml">TensorHandleFactoryRegistry</a> &amp;&#160;</td>
+ <td class="paramname"><em>registry</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">bool&#160;</td>
+ <td class="paramname"><em>importEnabled</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.xhtml#l01522">1522</a> of file <a class="el" href="_network_8cpp_source.xhtml">Network.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00015">ARMNN_ASSERT_MSG</a>, <a class="el" href="namespacearmnn.xhtml#aff209afc1dc598da399e3e78617ce016ac366da48cc11956ae377a77751936852">CopyToTarget</a>, <a class="el" href="namespacearmnn.xhtml#aff209afc1dc598da399e3e78617ce016a78d1be0baa31e083ae8da99aaedaf650">DirectCompatibility</a>, <a class="el" href="namespacearmnn.xhtml#aff209afc1dc598da399e3e78617ce016a46e8b7bfd6fd3c0cb34a100478a39189">ExportToTarget</a>, <a class="el" href="namespacearmnn.xhtml#a10c50bc964cc8cc559eebcd7df5a8af3a5a3e0409dae79a7940aade8d399dcd5d">FallbackImportDisabled</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00274">Layer::GetBackendId()</a>, <a class="el" href="include_2armnn_2backends_2_i_tensor_handle_factory_8hpp_source.xhtml#l00089">ITensorHandleFactory::GetCapabilities()</a>, <a class="el" href="include_2armnn_2backends_2_i_tensor_handle_factory_8hpp_source.xhtml#l00086">ITensorHandleFactory::GetExportFlags()</a>, <a class="el" href="_tensor_handle_factory_registry_8cpp_source.xhtml#l00039">TensorHandleFactoryRegistry::GetFactory()</a>, <a class="el" href="include_2armnn_2backends_2_i_tensor_handle_factory_8hpp_source.xhtml#l00087">ITensorHandleFactory::GetImportFlags()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00270">Layer::GetType()</a>, <a class="el" href="include_2armnn_2backends_2_i_tensor_handle_factory_8hpp_source.xhtml#l00046">ITensorHandleFactory::LegacyFactoryId</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a29c2c02a361c9d7028472e5d92cd4a54">Output</a>, <a class="el" href="namespacearmnn.xhtml#a10c50bc964cc8cc559eebcd7df5a8af3aa47abd1077ef632a38ada05b6edbf389">PaddingRequired</a>, <a class="el" href="include_2armnn_2backends_2_i_tensor_handle_factory_8hpp_source.xhtml#l00084">ITensorHandleFactory::SupportsMapUnmap()</a>, and <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.xhtml#l01611">SelectTensorHandleStrategy()</a>.</p>
+<div class="fragment"><div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>&#160;{</div><div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>&#160; <span class="keyword">auto</span> toBackend = backends.find(connectedLayer.GetBackendId());</div><div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(toBackend != backends.end(), <span class="stringliteral">&quot;Backend id not found for the connected layer&quot;</span>);</div><div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>&#160;</div><div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>&#160; <span class="keyword">auto</span> dstPrefs = toBackend-&gt;second.get()-&gt;GetHandleFactoryPreferences();</div><div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>&#160;</div><div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>&#160; <span class="comment">// Legacy API check for backward compatibility</span></div><div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>&#160; <span class="keywordflow">if</span> (srcFactoryId == ITensorHandleFactory::LegacyFactoryId || dstPrefs.empty())</div><div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>&#160; {</div><div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>&#160; <span class="keywordflow">if</span> (layer.GetBackendId() != connectedLayer.GetBackendId())</div><div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>&#160; {</div><div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>&#160; <span class="keywordflow">return</span> EdgeStrategy::CopyToTarget;</div><div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>&#160; }</div><div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>&#160; {</div><div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>&#160; <span class="keywordflow">return</span> EdgeStrategy::DirectCompatibility;</div><div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>&#160; }</div><div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>&#160; }</div><div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>&#160;</div><div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>&#160; <span class="comment">// TensorHandleFactory API present, so perform more sophisticated strategies.</span></div><div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>&#160; <span class="comment">// Dst Output layers don&#39;t require copy because they use import or map/unmap</span></div><div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>&#160; <span class="keywordflow">if</span> (connectedLayer.GetType() == LayerType::Output)</div><div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>&#160; {</div><div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>&#160; <span class="keywordflow">return</span> EdgeStrategy::DirectCompatibility;</div><div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>&#160; }</div><div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>&#160;</div><div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>&#160; <span class="comment">// Search for direct match in prefs</span></div><div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; pref : dstPrefs)</div><div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>&#160; {</div><div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>&#160; <span class="keywordflow">if</span> (pref == srcFactoryId)</div><div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>&#160; {</div><div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>&#160; <span class="keywordflow">return</span> EdgeStrategy::DirectCompatibility;</div><div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>&#160; }</div><div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>&#160; }</div><div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>&#160;</div><div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>&#160; <span class="comment">// Search for export/import options</span></div><div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>&#160; ITensorHandleFactory* srcFactory = registry.GetFactory(srcFactoryId);</div><div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>&#160; <span class="keywordflow">if</span> (srcFactory-&gt;GetExportFlags() != 0 &amp;&amp; importEnabled)</div><div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>&#160; {</div><div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; pref : dstPrefs)</div><div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>&#160; {</div><div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>&#160; ITensorHandleFactory* dstFactory = registry.GetFactory(pref);</div><div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>&#160;</div><div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>&#160; <span class="comment">// Handles cases when a destPref is not listed in TensorHandleFactoryRegistry</span></div><div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>&#160; <span class="keywordflow">if</span> (!dstFactory) {</div><div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>&#160; }</div><div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>&#160; <span class="keywordflow">if</span> ((dstFactory-&gt;GetImportFlags() &amp; srcFactory-&gt;GetExportFlags()) != 0)</div><div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>&#160; {</div><div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>&#160; <span class="keyword">auto</span> srcCapability = srcFactory-&gt;GetCapabilities(&amp;layer, &amp;layer, CapabilityClass::PaddingRequired);</div><div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>&#160; <span class="keyword">auto</span> dstCapability = dstFactory-&gt;GetCapabilities(&amp;connectedLayer,</div><div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>&#160; &amp;connectedLayer,</div><div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>&#160; CapabilityClass::PaddingRequired);</div><div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>&#160; <span class="keyword">auto</span> srcFallback = srcFactory-&gt;GetCapabilities(&amp;layer, &amp;layer, CapabilityClass::FallbackImportDisabled);</div><div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>&#160; <span class="keyword">auto</span> dstFallback = dstFactory-&gt;GetCapabilities(&amp;connectedLayer,</div><div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>&#160; &amp;connectedLayer,</div><div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>&#160; CapabilityClass::FallbackImportDisabled);</div><div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>&#160; <span class="comment">// Do not require memory copy if the source and destination do not require padding.</span></div><div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>&#160; <span class="keywordflow">if</span> (srcCapability.empty() &amp;&amp; dstCapability.empty() &amp;&amp; srcFallback.empty() &amp;&amp; dstFallback.empty())</div><div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>&#160; {</div><div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>&#160; <span class="keywordflow">return</span> EdgeStrategy::ExportToTarget;</div><div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>&#160; }</div><div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>&#160; }</div><div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>&#160; }</div><div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>&#160; }</div><div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>&#160;</div><div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>&#160; <span class="comment">// Search for copy options via map/unmap</span></div><div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>&#160; <span class="keywordflow">if</span> (srcFactory-&gt;SupportsMapUnmap())</div><div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>&#160; {</div><div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; pref : dstPrefs)</div><div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>&#160; {</div><div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>&#160; ITensorHandleFactory* dstFactory = registry.GetFactory(pref);</div><div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>&#160; <span class="keywordflow">if</span> (dstFactory &amp;&amp; dstFactory-&gt;SupportsMapUnmap())</div><div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>&#160; {</div><div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>&#160; <span class="keywordflow">return</span> EdgeStrategy::CopyToTarget;</div><div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>&#160; }</div><div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>&#160; }</div><div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>&#160; }</div><div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>&#160;</div><div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>&#160; <span class="keywordflow">return</span> EdgeStrategy::Undefined;</div><div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>&#160;}</div><div class="ttc" id="_assert_8hpp_xhtml_a91c4dfde57907d7698c7531785690a7f"><div class="ttname"><a href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a></div><div class="ttdeci">#define ARMNN_ASSERT_MSG(COND, MSG)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00015">Assert.hpp:15</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a9cffc3a390a70c97ba1463da69077c23"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9cffc3a390a70c97ba1463da69077c23">&#9670;&nbsp;</a></span>CalculateSlotOption()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classarmnn_1_1_i_tensor_handle_factory.xhtml#a32f4aa6a7089d877af08928139c2c277">ITensorHandleFactory::FactoryId</a> armnn::CalculateSlotOption </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a> &amp;&#160;</td>
+ <td class="paramname"><em>backends</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_output_slot.xhtml">OutputSlot</a> &amp;&#160;</td>
+ <td class="paramname"><em>outputSlot</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_tensor_handle_factory_registry.xhtml">TensorHandleFactoryRegistry</a> &amp;&#160;</td>
+ <td class="paramname"><em>registry</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">bool&#160;</td>
+ <td class="paramname"><em>importEnabled</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.xhtml#l01372">1372</a> of file <a class="el" href="_network_8cpp_source.xhtml">Network.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00015">ARMNN_ASSERT_MSG</a>, <a class="el" href="namespacearmnn.xhtml#a10c50bc964cc8cc559eebcd7df5a8af3a5a3e0409dae79a7940aade8d399dcd5d">FallbackImportDisabled</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00274">Layer::GetBackendId()</a>, <a class="el" href="include_2armnn_2backends_2_i_tensor_handle_factory_8hpp_source.xhtml#l00089">ITensorHandleFactory::GetCapabilities()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00130">OutputSlot::GetConnections()</a>, <a class="el" href="include_2armnn_2backends_2_i_tensor_handle_factory_8hpp_source.xhtml#l00086">ITensorHandleFactory::GetExportFlags()</a>, <a class="el" href="_tensor_handle_factory_registry_8cpp_source.xhtml#l00039">TensorHandleFactoryRegistry::GetFactory()</a>, <a class="el" href="_i_backend_internal_8cpp_source.xhtml#l00142">IBackendInternal::GetHandleFactoryPreferences()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00242">Layer::GetInputSlots()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00118">OutputSlot::GetOwningLayer()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00270">Layer::GetType()</a>, <a class="el" href="include_2armnn_2backends_2_i_tensor_handle_factory_8hpp_source.xhtml#l00046">ITensorHandleFactory::LegacyFactoryId</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a29c2c02a361c9d7028472e5d92cd4a54">Output</a>, <a class="el" href="_network_8cpp_source.xhtml#l01257">RequiresCopy()</a>, and <a class="el" href="include_2armnn_2backends_2_i_tensor_handle_factory_8hpp_source.xhtml#l00084">ITensorHandleFactory::SupportsMapUnmap()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.xhtml#l01611">SelectTensorHandleStrategy()</a>.</p>
+<div class="fragment"><div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>&#160;{</div><div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>&#160; <span class="comment">// First ensure the from backends can support the TensorHandeAPI</span></div><div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160; <a class="code" href="namespacearmnn_serializer.xhtml#a9a8118be7780e95363d631cbca7e7800">Layer</a>&amp; layer = outputSlot.GetOwningLayer();</div><div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>&#160; <span class="keyword">auto</span> frmBackend = backends.find(layer.GetBackendId());</div><div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>&#160; <span class="keywordflow">if</span> (frmBackend == backends.end() ||</div><div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160; !frmBackend-&gt;second-&gt;SupportsTensorAllocatorAPI())</div><div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160; {</div><div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>&#160; <span class="keywordflow">return</span> ITensorHandleFactory::LegacyFactoryId;</div><div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>&#160; }</div><div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>&#160;</div><div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>&#160; <span class="keywordtype">bool</span> outputConnection = <span class="keyword">false</span>;</div><div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; connection : outputSlot.GetConnections())</div><div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160; {</div><div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn_serializer.xhtml#a9a8118be7780e95363d631cbca7e7800">Layer</a>&amp; connectedLayer = connection-&gt;GetOwningLayer();</div><div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>&#160; <span class="keywordflow">if</span> (connectedLayer.GetType() == LayerType::Output)</div><div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>&#160; {</div><div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>&#160; outputConnection = <span class="keyword">true</span>;</div><div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>&#160; }</div><div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>&#160; }</div><div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>&#160;</div><div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>&#160; IBackendInternal* srcBackend = frmBackend-&gt;second.get();</div><div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160; <span class="keyword">auto</span> srcPrefs = srcBackend-&gt;GetHandleFactoryPreferences();</div><div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>&#160;</div><div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>&#160; <span class="comment">// Initialize the scores</span></div><div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>&#160; std::map&lt;ITensorHandleFactory::FactoryId, int&gt; factoryScores;</div><div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; pref : srcPrefs)</div><div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>&#160; {</div><div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>&#160; <span class="keywordflow">if</span> (importEnabled)</div><div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>&#160; {</div><div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>&#160; ITensorHandleFactory* factory = registry.GetFactory(pref);</div><div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>&#160; <span class="keywordflow">if</span> (outputConnection)</div><div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>&#160; {</div><div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>&#160; <span class="comment">// Check if this is fallback case</span></div><div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>&#160; <span class="keywordtype">bool</span> fallbackConnection = <span class="keyword">false</span>;</div><div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; inputSlot : layer.GetInputSlots())</div><div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>&#160; {</div><div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>&#160; <span class="keywordflow">if</span> (inputSlot.GetConnectedOutputSlot()-&gt;GetOwningLayer().GetBackendId() != layer.GetBackendId())</div><div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>&#160; {</div><div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>&#160; fallbackConnection = <span class="keyword">true</span>;</div><div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>&#160; }</div><div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>&#160; }</div><div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>&#160; <span class="keywordflow">if</span> (fallbackConnection)</div><div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>&#160; {</div><div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>&#160; <span class="keyword">auto</span> factoryCap = factory-&gt;GetCapabilities(&amp;layer, &amp;layer, CapabilityClass::FallbackImportDisabled);</div><div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>&#160; <span class="comment">// Cannot use factory import if fallback import is not supported.</span></div><div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>&#160; <span class="keywordflow">if</span> (!factoryCap.empty())</div><div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>&#160; {</div><div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>&#160; }</div><div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>&#160; }</div><div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (factory-&gt;GetExportFlags() == 0)</div><div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>&#160; {</div><div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>&#160; }</div><div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>&#160; }</div><div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>&#160; <span class="keywordflow">if</span> (!outputConnection)</div><div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>&#160; {</div><div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>&#160; <span class="keyword">auto</span> factoryCap = factory-&gt;GetCapabilities(&amp;layer, &amp;layer, CapabilityClass::FallbackImportDisabled);</div><div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>&#160; <span class="comment">// Cannot use factory import if fallback import is not supported.</span></div><div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>&#160; <span class="keywordflow">if</span> (!factoryCap.empty())</div><div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>&#160; {</div><div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>&#160; }</div><div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>&#160; }</div><div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>&#160;</div><div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>&#160; }</div><div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>&#160; {</div><div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>&#160; <span class="comment">// Only consider factories that support map/unmap</span></div><div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>&#160; ITensorHandleFactory* factory = registry.GetFactory(pref);</div><div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>&#160; <span class="keywordflow">if</span> (!factory-&gt;SupportsMapUnmap())</div><div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>&#160; {</div><div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>&#160; <span class="comment">// The current tensor handle factory does not support the map/unmap strategy, move to the next one</span></div><div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>&#160; }</div><div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>&#160; }</div><div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>&#160;</div><div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>&#160;</div><div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>&#160; <span class="keyword">auto</span> it = factoryScores.find(pref);</div><div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>&#160; <span class="keywordflow">if</span> (it == factoryScores.end())</div><div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>&#160; {</div><div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>&#160; <span class="comment">// Add new score to the table</span></div><div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>&#160; factoryScores[pref] = 0;</div><div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>&#160; }</div><div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>&#160; }</div><div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>&#160;</div><div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>&#160; <span class="comment">// Score each handle factory based on how many times it requires copies on the slot connections</span></div><div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; connection : outputSlot.GetConnections())</div><div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>&#160; {</div><div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn_serializer.xhtml#a9a8118be7780e95363d631cbca7e7800">Layer</a>&amp; connectedLayer = connection-&gt;GetOwningLayer();</div><div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>&#160;</div><div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>&#160; <span class="keyword">auto</span> toBackend = backends.find(connectedLayer.GetBackendId());</div><div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(toBackend != backends.end(), <span class="stringliteral">&quot;Backend id not found for the connected layer&quot;</span>);</div><div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>&#160;</div><div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>&#160; <span class="keyword">auto</span> dstPrefs = toBackend-&gt;second.get()-&gt;GetHandleFactoryPreferences();</div><div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; src : srcPrefs)</div><div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>&#160; {</div><div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>&#160; <span class="keywordflow">if</span> (factoryScores.find(src) == factoryScores.end()) <span class="comment">// Don&#39;t consider excluded factories</span></div><div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>&#160; {</div><div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>&#160; }</div><div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>&#160;</div><div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; dst : dstPrefs)</div><div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>&#160; {</div><div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.xhtml#a5ee4a1cca55f69b31e625c786655ed1a">RequiresCopy</a>(src, dst, registry))</div><div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>&#160; {</div><div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>&#160; <span class="comment">// Copy avoided, increase the score</span></div><div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>&#160; factoryScores[src]++;</div><div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>&#160; }</div><div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160; }</div><div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>&#160; }</div><div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>&#160; }</div><div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>&#160;</div><div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>&#160; <span class="comment">// Find the lowest score</span></div><div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>&#160; <span class="keywordtype">int</span> minScore = std::numeric_limits&lt;int&gt;::max();</div><div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it : factoryScores)</div><div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>&#160; {</div><div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>&#160; minScore = std::min(minScore, it.second);</div><div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>&#160; }</div><div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>&#160;</div><div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>&#160; <span class="comment">// Collect factories matching the best(lowest) score</span></div><div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>&#160; std::vector&lt;ITensorHandleFactory::FactoryId&gt; optimalFactories;</div><div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it : factoryScores)</div><div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>&#160; {</div><div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>&#160; <span class="keywordflow">if</span> (it.second == minScore)</div><div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>&#160; {</div><div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>&#160; optimalFactories.push_back(it.first);</div><div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>&#160; }</div><div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>&#160; }</div><div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>&#160;</div><div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>&#160; <span class="comment">// For all compatible Factories matching the best score, find the preferred one for the current layer.</span></div><div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; srcPref : srcPrefs)</div><div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>&#160; {</div><div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; comp : optimalFactories)</div><div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>&#160; {</div><div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>&#160; <span class="keywordflow">if</span> (comp == srcPref)</div><div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>&#160; {</div><div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>&#160; <span class="keywordflow">return</span> comp;</div><div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>&#160; }</div><div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>&#160; }</div><div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>&#160; }</div><div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>&#160;</div><div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>&#160; <span class="keywordflow">return</span> ITensorHandleFactory::LegacyFactoryId;</div><div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a5ee4a1cca55f69b31e625c786655ed1a"><div class="ttname"><a href="namespacearmnn.xhtml#a5ee4a1cca55f69b31e625c786655ed1a">armnn::RequiresCopy</a></div><div class="ttdeci">bool RequiresCopy(ITensorHandleFactory::FactoryId src, ITensorHandleFactory::FactoryId dst, TensorHandleFactoryRegistry &amp;registry)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.xhtml#l01257">Network.cpp:1257</a></div></div>
+<div class="ttc" id="namespacearmnn_serializer_xhtml_a9a8118be7780e95363d631cbca7e7800"><div class="ttname"><a href="namespacearmnn_serializer.xhtml#a9a8118be7780e95363d631cbca7e7800">armnnSerializer::Layer</a></div><div class="ttdeci">Layer</div><div class="ttdef"><b>Definition:</b> <a href="_armnn_schema__generated_8h_source.xhtml#l01243">ArmnnSchema_generated.h:1243</a></div></div>
+<div class="ttc" id="_assert_8hpp_xhtml_a91c4dfde57907d7698c7531785690a7f"><div class="ttname"><a href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a></div><div class="ttdeci">#define ARMNN_ASSERT_MSG(COND, MSG)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00015">Assert.hpp:15</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a5f34318a121e010053655204df94720c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5f34318a121e010053655204df94720c">&#9670;&nbsp;</a></span>CalculateSlotOptionForInput()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classarmnn_1_1_i_tensor_handle_factory.xhtml#a32f4aa6a7089d877af08928139c2c277">ITensorHandleFactory::FactoryId</a> armnn::CalculateSlotOptionForInput </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a> &amp;&#160;</td>
+ <td class="paramname"><em>backends</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_output_slot.xhtml">OutputSlot</a> &amp;&#160;</td>
+ <td class="paramname"><em>slot</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_tensor_handle_factory_registry.xhtml">TensorHandleFactoryRegistry</a> &amp;&#160;</td>
+ <td class="paramname"><em>registry</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">bool&#160;</td>
+ <td class="paramname"><em>importEnabled</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.xhtml#l01277">1277</a> of file <a class="el" href="_network_8cpp_source.xhtml">Network.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>, <a class="el" href="_assert_8hpp_source.xhtml#l00015">ARMNN_ASSERT_MSG</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00274">Layer::GetBackendId()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00130">OutputSlot::GetConnections()</a>, <a class="el" href="_tensor_handle_factory_registry_8cpp_source.xhtml#l00039">TensorHandleFactoryRegistry::GetFactory()</a>, <a class="el" href="include_2armnn_2backends_2_i_tensor_handle_factory_8hpp_source.xhtml#l00087">ITensorHandleFactory::GetImportFlags()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00118">OutputSlot::GetOwningLayer()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00270">Layer::GetType()</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a324118a6721dd6b8a9b9f4e327df2bf5">Input</a>, <a class="el" href="include_2armnn_2backends_2_i_tensor_handle_factory_8hpp_source.xhtml#l00046">ITensorHandleFactory::LegacyFactoryId</a>, and <a class="el" href="include_2armnn_2backends_2_i_tensor_handle_factory_8hpp_source.xhtml#l00084">ITensorHandleFactory::SupportsMapUnmap()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.xhtml#l01611">SelectTensorHandleStrategy()</a>.</p>
+<div class="fragment"><div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160;{</div><div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160; <a class="code" href="namespacearmnn_serializer.xhtml#a9a8118be7780e95363d631cbca7e7800">Layer</a>&amp; layer = slot.GetOwningLayer();</div><div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer.GetType() == LayerType::Input);</div><div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160;</div><div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160; <span class="comment">// Explicitly select the tensorhandle factory for InputLayer because the rules for it are slightly different. It</span></div><div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160; <span class="comment">// doesn&#39;t matter which backend it is assigned to because they all use the same implementation, which</span></div><div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160; <span class="comment">// requires Map/Unmap support. This means that, so long as the handle type supports map/unmap semantics, we can</span></div><div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160; <span class="comment">// select a factory with maximum compatibility with the layers connected to the InputLayer.</span></div><div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160;</div><div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160; <span class="comment">// First ensure the from backends can support the TensorHandeAPI</span></div><div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160; <span class="keyword">auto</span> frmBackend = backends.find(layer.GetBackendId());</div><div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160; <span class="keywordflow">if</span> (frmBackend == backends.end() ||</div><div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160; !frmBackend-&gt;second-&gt;SupportsTensorAllocatorAPI())</div><div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160; {</div><div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160; <span class="keywordflow">return</span> ITensorHandleFactory::LegacyFactoryId;</div><div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160; }</div><div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160;</div><div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160; <span class="comment">// Go through all connections to the output slot and determine the TensorHandleFactory which results in the</span></div><div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160; <span class="comment">// fewest copies.</span></div><div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160; std::map&lt;ITensorHandleFactory::FactoryId, int&gt; factoryScores;</div><div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160; <span class="keywordtype">int</span> topScore = 0;</div><div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160; <a class="code" href="namespacearmnn.xhtml#a947e07902b1b5d98b57eeae34053146b">ITensorHandleFactory::FactoryId</a> topChoice = ITensorHandleFactory::LegacyFactoryId;</div><div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160;</div><div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; connection : slot.GetConnections())</div><div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160; {</div><div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160;</div><div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn_serializer.xhtml#a9a8118be7780e95363d631cbca7e7800">Layer</a>&amp; connectedLayer = connection-&gt;GetOwningLayer();</div><div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160;</div><div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160; <span class="keyword">auto</span> toBackend = backends.find(connectedLayer.GetBackendId());</div><div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(toBackend != backends.end(), <span class="stringliteral">&quot;Backend id not found for the connected layer&quot;</span>);</div><div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160;</div><div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160; <span class="keywordflow">if</span> (!toBackend-&gt;second.get()-&gt;SupportsTensorAllocatorAPI())</div><div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160; {</div><div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160; <span class="comment">// The destination backend does not support the tensor allocator API, move to the next one</span></div><div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160; }</div><div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160;</div><div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>&#160; <span class="keyword">auto</span> dstPrefs = toBackend-&gt;second.get()-&gt;GetHandleFactoryPreferences();</div><div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; dst : dstPrefs)</div><div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>&#160; {</div><div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>&#160; <span class="comment">// Input layers use the mem copy workload or import, so the selected factory must</span></div><div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>&#160; <span class="comment">// support either the map/unmap API or Import API</span></div><div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>&#160; ITensorHandleFactory* factory = registry.GetFactory(dst);</div><div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>&#160; <span class="keywordflow">if</span> (importEnabled &amp;&amp; factory-&gt;GetImportFlags() == 0)</div><div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160; {</div><div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160; }</div><div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!importEnabled &amp;&amp; !factory-&gt;SupportsMapUnmap())</div><div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160; {</div><div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160; }</div><div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160;</div><div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160; <span class="keyword">auto</span> it = factoryScores.find(dst);</div><div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160; <span class="keywordflow">if</span> (it == factoryScores.end())</div><div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160; {</div><div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160; <span class="comment">// Add new score to the table</span></div><div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160; factoryScores[dst] = 0;</div><div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160; <span class="keywordflow">if</span> (topChoice == ITensorHandleFactory::LegacyFactoryId)</div><div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160; {</div><div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160; topChoice = dst;</div><div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>&#160; }</div><div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>&#160; }</div><div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>&#160; {</div><div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>&#160; <span class="comment">// Increase the score</span></div><div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>&#160; factoryScores[dst]++;</div><div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>&#160;</div><div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>&#160; <span class="comment">// Track the best option</span></div><div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>&#160; <span class="keywordflow">if</span> (factoryScores[dst] &gt; topScore)</div><div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>&#160; {</div><div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>&#160; topScore = factoryScores[dst];</div><div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>&#160; topChoice = dst;</div><div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>&#160; }</div><div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>&#160; }</div><div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>&#160; }</div><div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>&#160; }</div><div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>&#160;</div><div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>&#160; <span class="keywordflow">return</span> topChoice;</div><div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>&#160;}</div><div class="ttc" id="namespacearmnn_serializer_xhtml_a9a8118be7780e95363d631cbca7e7800"><div class="ttname"><a href="namespacearmnn_serializer.xhtml#a9a8118be7780e95363d631cbca7e7800">armnnSerializer::Layer</a></div><div class="ttdeci">Layer</div><div class="ttdef"><b>Definition:</b> <a href="_armnn_schema__generated_8h_source.xhtml#l01243">ArmnnSchema_generated.h:1243</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a947e07902b1b5d98b57eeae34053146b"><div class="ttname"><a href="namespacearmnn.xhtml#a947e07902b1b5d98b57eeae34053146b">armnn::FactoryId</a></div><div class="ttdeci">ITensorHandleFactory::FactoryId FactoryId</div><div class="ttdef"><b>Definition:</b> <a href="_mock_tensor_handle_factory_8cpp_source.xhtml#l00012">MockTensorHandleFactory.cpp:12</a></div></div>
+<div class="ttc" id="_assert_8hpp_xhtml_a91c4dfde57907d7698c7531785690a7f"><div class="ttname"><a href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a></div><div class="ttdeci">#define ARMNN_ASSERT_MSG(COND, MSG)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00015">Assert.hpp:15</a></div></div>
+<div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ab46c7f5f4736d550ab0e5e05a0fff4a9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab46c7f5f4736d550ab0e5e05a0fff4a9">&#9670;&nbsp;</a></span>CalculateSlotOptionForOutput()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classarmnn_1_1_i_tensor_handle_factory.xhtml#a32f4aa6a7089d877af08928139c2c277">ITensorHandleFactory::FactoryId</a> armnn::CalculateSlotOptionForOutput </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a> &amp;&#160;</td>
+ <td class="paramname"><em>backends</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_output_slot.xhtml">OutputSlot</a> &amp;&#160;</td>
+ <td class="paramname"><em>slot</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_tensor_handle_factory_registry.xhtml">TensorHandleFactoryRegistry</a> &amp;&#160;</td>
+ <td class="paramname"><em>registry</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.xhtml#l01362">1362</a> of file <a class="el" href="_network_8cpp_source.xhtml">Network.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="include_2armnn_2backends_2_i_tensor_handle_factory_8hpp_source.xhtml#l00047">ITensorHandleFactory::DeferredFactoryId</a>, and <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.xhtml#l01611">SelectTensorHandleStrategy()</a>.</p>
+<div class="fragment"><div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>&#160;{</div><div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(backends, slot, registry);</div><div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>&#160; <span class="keywordflow">return</span> ITensorHandleFactory::DeferredFactoryId;</div><div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a189b5dedbf7a3cbcbe7760ac72c7b07d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a189b5dedbf7a3cbcbe7760ac72c7b07d">&#9670;&nbsp;</a></span>ChainReduceLayers()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::vector&lt;<a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>*&gt; armnn::ChainReduceLayers </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_optimization_views.xhtml">OptimizationViews</a> &amp;&#160;</td>
+ <td class="paramname"><em>optimizationViews</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *&#160;</td>
+ <td class="paramname"><em>baseLayer</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structarmnn_1_1_reduce_descriptor.xhtml">ReduceDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>desc</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00326">326</a> of file <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml">ArmComputeSubgraphUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>, <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00328">ComputeReductionTensorShape()</a>, <a class="el" href="include_2armnn_2backends_2_optimization_views_8hpp_source.xhtml#l00062">OptimizationViews::GetINetwork()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00321">Layer::GetInputSlot()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00323">Layer::GetOutputSlot()</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01499">ReduceDescriptor::m_KeepDims</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01501">ReduceDescriptor::m_vAxis</a>, and <a class="el" href="_layer_8cpp_source.xhtml#l00061">OutputSlot::SetTensorInfo()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;{</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="comment">// Vector of new chained layers, used for substitution.</span></div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; std::vector&lt;IConnectableLayer*&gt; layers;</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160;</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="comment">// Vector of axes so each layer is reshaped correctly.</span></div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; std::vector&lt;uint32_t&gt; axes;</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> recalulatedAxis = 0;</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160;</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i != desc.m_vAxis.size(); ++i)</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; {</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <span class="comment">// Get TensorInfo from base layer and reduce shape using axis.</span></div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; TensorInfo layerInfo = baseLayer-&gt;GetInputSlot(0).GetConnectedOutputSlot()-&gt;GetTensorInfo();</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160;</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; axes.emplace_back(desc.m_vAxis[i]);</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160;</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <span class="keyword">const</span> TensorInfo&amp; reducedTensorInfo = <a class="code" href="namespacearmnn.xhtml#a9d43aa01b882d8776ab9403eea3cf779">ComputeReductionTensorShape</a>(layerInfo,</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; axes,</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; desc.m_KeepDims);</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160;</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <span class="comment">// Create a vector for the single axis to be assigned to the descriptor.</span></div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <span class="comment">// Update axis if keepDims is set reduce layers correctly.</span></div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; std::vector&lt;uint32_t&gt; singleAxis(1, desc.m_vAxis[i] - recalulatedAxis);</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160;</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="comment">// Create a descriptor and assign single axis.</span></div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; ReduceDescriptor newReduceDescriptor = baseLayer-&gt;GetParameters();</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; newReduceDescriptor.m_vAxis.assign(singleAxis.begin(), singleAxis.end());</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160;</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="comment">// Add new layer to graph.</span></div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; std::string layerName = <span class="stringliteral">&quot;reduce_layer_&quot;</span> + std::to_string(i);</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160;</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <a class="code" href="namespacearmnn_serializer.xhtml#a9a8118be7780e95363d631cbca7e7800">Layer</a>* replacementLayer = PolymorphicDowncast&lt;Layer*&gt;(</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; optimizationViews.GetINetwork()-&gt;AddReduceLayer(newReduceDescriptor,</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; layerName.c_str()));</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160;</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <span class="comment">// Connect previous layer with new layer.</span></div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; <span class="comment">// The first and last layer will be connected when the subgraph is replaced.</span></div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; <span class="keywordflow">if</span> (!layers.empty())</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; {</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; layers[i - 1]-&gt;GetOutputSlot(0).Connect(replacementLayer-&gt;GetInputSlot(0));</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; }</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160;</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <span class="comment">// Set updated tensorInfo for new layer.</span></div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; replacementLayer-&gt;GetOutputSlot(0).SetTensorInfo(reducedTensorInfo);</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160;</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; <span class="keywordflow">if</span> (!desc.m_KeepDims)</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; {</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; recalulatedAxis++;</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; }</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160;</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; layers.emplace_back(replacementLayer);</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; }</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160;</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="comment">// Check if the TensorInfo from the last layer equals the inferred output from the original layer.</span></div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(baseLayer-&gt;GetOutputSlot(0).GetTensorInfo() ==</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; PolymorphicDowncast&lt;Layer*&gt;(layers.back())-&gt;GetOutputSlot().GetTensorInfo());</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160;</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <span class="keywordflow">return</span> layers;</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160;}</div><div class="ttc" id="namespacearmnn_serializer_xhtml_a9a8118be7780e95363d631cbca7e7800"><div class="ttname"><a href="namespacearmnn_serializer.xhtml#a9a8118be7780e95363d631cbca7e7800">armnnSerializer::Layer</a></div><div class="ttdeci">Layer</div><div class="ttdef"><b>Definition:</b> <a href="_armnn_schema__generated_8h_source.xhtml#l01243">ArmnnSchema_generated.h:1243</a></div></div>
+<div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a9d43aa01b882d8776ab9403eea3cf779"><div class="ttname"><a href="namespacearmnn.xhtml#a9d43aa01b882d8776ab9403eea3cf779">armnn::ComputeReductionTensorShape</a></div><div class="ttdeci">const TensorInfo ComputeReductionTensorShape(const armnn::TensorInfo &amp;input, const std::vector&lt; uint32_t &gt; &amp;vAxis, const bool keepDims)</div><div class="ttdoc">Function to compute the output tensor shape based on the axes and if keepDims is set. </div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.xhtml#l00328">ArmComputeUtils.hpp:328</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a84f86b4de5adf0b164e811c87051a0ee"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a84f86b4de5adf0b164e811c87051a0ee">&#9670;&nbsp;</a></span>CheckFlag()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::CheckFlag </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#a5b05f3b7208ec7cea3338e30057c0bac">MemorySourceFlags</a>&#160;</td>
+ <td class="paramname"><em>flags</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#a14fcd7f88d11cea0a018269dca5f9277">MemorySource</a>&#160;</td>
+ <td class="paramname"><em>source</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_memory_sources_8hpp_source.xhtml#l00041">41</a> of file <a class="el" href="_memory_sources_8hpp_source.xhtml">MemorySources.hpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_loaded_network_8cpp_source.xhtml#l00737">LoadedNetwork::EnqueueWorkload()</a>, <a class="el" href="_loaded_network_8cpp_source.xhtml#l01118">LoadedNetwork::FreeWorkingMemory()</a>, <a class="el" href="_loaded_network_8cpp_source.xhtml#l01306">LoadedNetwork::ImportInputs()</a>, and <a class="el" href="_loaded_network_8cpp_source.xhtml#l01439">LoadedNetwork::ImportOutputs()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;{</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordflow">return</span> (static_cast&lt;MemorySourceFlags&gt;(source) &amp; flags) != 0;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a5a38bd982292180692711b0ae296bb34"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5a38bd982292180692711b0ae296bb34">&#9670;&nbsp;</a></span>CheckLayerBindingId()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void armnn::CheckLayerBindingId </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">LayerBindingId</a>&#160;</td>
+ <td class="paramname"><em>visitorId</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">LayerBindingId</a>&#160;</td>
+ <td class="paramname"><em>id</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_test_input_output_layer_visitor_8hpp_source.xhtml#l00013">13</a> of file <a class="el" href="_test_input_output_layer_visitor_8hpp_source.xhtml">TestInputOutputLayerVisitor.hpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_test_input_output_layer_visitor_8hpp_source.xhtml#l00030">TestInputLayerVisitor::ExecuteStrategy()</a>, and <a class="el" href="_test_input_output_layer_visitor_8hpp_source.xhtml#l00065">TestOutputLayerVisitor::ExecuteStrategy()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;{</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; CHECK_EQ(visitorId, <span class="keywordtype">id</span>);</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="af002111f64aee648e3258247075cae36"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af002111f64aee648e3258247075cae36">&#9670;&nbsp;</a></span>CheckScaleSetOnQuantizedType()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::CheckScaleSetOnQuantizedType </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_layer.xhtml">Layer</a> *&#160;</td>
+ <td class="paramname"><em>layer</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; std::vector&lt; std::string &gt; &amp;&gt;&#160;</td>
+ <td class="paramname"><em>errMessages</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.xhtml#l00611">611</a> of file <a class="el" href="_network_8cpp_source.xhtml">Network.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_logging_8hpp_source.xhtml#l00205">ARMNN_LOG</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00198">TensorInfo::GetDataType()</a>, <a class="el" href="_internal_types_8cpp_source.xhtml#l00013">GetLayerTypeAsCString()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00225">Layer::GetNameStr()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00319">Layer::GetNumOutputSlots()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00323">Layer::GetOutputSlot()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00480">TensorInfo::GetQuantizationOffset()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00463">TensorInfo::GetQuantizationScale()</a>, <a class="el" href="_layer_8cpp_source.xhtml#l00066">OutputSlot::GetTensorInfo()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00270">Layer::GetType()</a>, <a class="el" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">QAsymmU8</a>, <a class="el" href="_network_8cpp_source.xhtml#l00572">ReportError()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00491">TensorInfo::SetQuantizationOffset()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00475">TensorInfo::SetQuantizationScale()</a>, <a class="el" href="_layer_8cpp_source.xhtml#l00061">OutputSlot::SetTensorInfo()</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a31d953b9d49a6b4378f45097047976d0">Softmax</a>, and <a class="el" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407a7b83d3f08fa392b79e3f553b585971cd">warning</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.xhtml#l00921">AssignBackendsIConnectable()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160;{</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; <span class="keywordtype">bool</span> noErrors = <span class="keyword">true</span>;</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numOutputs = layer-&gt;GetNumOutputSlots();</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; numOutputs; i++) {</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; OutputSlot&amp; outputSlot = layer-&gt;GetOutputSlot(i);</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; TensorInfo <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a> = outputSlot.GetTensorInfo();</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; <span class="keywordflow">if</span> (DataType::QAsymmU8 == info.GetDataType()) {</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; <span class="keywordflow">if</span> (0.f == info.GetQuantizationScale()) {</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; noErrors = <span class="keyword">false</span>;</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; std::stringstream ss;</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;output &quot;</span> &lt;&lt; i &lt;&lt; <span class="stringliteral">&quot; of layer &quot;</span> &lt;&lt; <a class="code" href="namespacearmnn.xhtml#addb6b14dd1b632263ffe77430259a7c4">GetLayerTypeAsCString</a>(layer-&gt;GetType())</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; &lt;&lt; <span class="stringliteral">&quot; (&quot;</span> &lt;&lt; layer-&gt;GetNameStr() &lt;&lt; <span class="stringliteral">&quot;) is of type&quot;</span></div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; &lt;&lt; <span class="stringliteral">&quot; Quantized 8 bit but its scale parameter has not been set&quot;</span>;</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; <a class="code" href="namespacearmnn.xhtml#a7658f93d899c8646515a29370e6aa994">ReportError</a>(ss.str(), errMessages);</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; }</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; <span class="comment">// Softmax under QuantisedAsymm8 must always be scale (1.0f/256.0f) and offset 0</span></div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; <span class="keywordflow">if</span> ((info.GetQuantizationScale() != (1.0f / 256.0f) ||</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; info.GetQuantizationOffset() != 0) &amp;&amp;</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; layer-&gt;GetType() == <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a31d953b9d49a6b4378f45097047976d0">armnn::LayerType::Softmax</a>)</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; {</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; std::stringstream ss;</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;Quantization parameters for Softmax layer (Scale: &quot;</span> &lt;&lt;</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; info.GetQuantizationScale() &lt;&lt; <span class="stringliteral">&quot; and Offset: &quot;</span> &lt;&lt; info.GetQuantizationOffset() &lt;&lt;</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; <span class="stringliteral">&quot;) are incorrect and have been updated to Scale: 0.00390625 and Offset: 0&quot;</span>;</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(warning) &lt;&lt; ss.str();</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; info.SetQuantizationScale((1.0f /256.0f));</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; info.SetQuantizationOffset(0);</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; outputSlot.SetTensorInfo(info);</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; }</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; }</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; }</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; <span class="keywordflow">return</span> noErrors;</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a7658f93d899c8646515a29370e6aa994"><div class="ttname"><a href="namespacearmnn.xhtml#a7658f93d899c8646515a29370e6aa994">armnn::ReportError</a></div><div class="ttdeci">void ReportError(const std::string &amp;errorMessage, Optional&lt; std::vector&lt; std::string &gt; &amp;&gt; errorMessages)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.xhtml#l00572">Network.cpp:572</a></div></div>
+<div class="ttc" id="_logging_8hpp_xhtml_a7b6ad073975f437ec38ca7d20154727f"><div class="ttname"><a href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a></div><div class="ttdeci">#define ARMNN_LOG(severity)</div><div class="ttdef"><b>Definition:</b> <a href="_logging_8hpp_source.xhtml#l00205">Logging.hpp:205</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a56943a0946e5f15e5e58054b8e7a04a4a31d953b9d49a6b4378f45097047976d0"><div class="ttname"><a href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a31d953b9d49a6b4378f45097047976d0">armnn::LayerType::Softmax</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c"><div class="ttname"><a href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">armnn::BoostLogSeverityMapping::info</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_addb6b14dd1b632263ffe77430259a7c4"><div class="ttname"><a href="namespacearmnn.xhtml#addb6b14dd1b632263ffe77430259a7c4">armnn::GetLayerTypeAsCString</a></div><div class="ttdeci">const char * GetLayerTypeAsCString(LayerType type)</div><div class="ttdef"><b>Definition:</b> <a href="_internal_types_8cpp_source.xhtml#l00013">InternalTypes.cpp:13</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="acea2d8c53b441e24b6d60b090fda37c9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acea2d8c53b441e24b6d60b090fda37c9">&#9670;&nbsp;</a></span>CheckSupportRule()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::CheckSupportRule </td>
+ <td>(</td>
+ <td class="paramtype">F&#160;</td>
+ <td class="paramname"><em>rule</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; std::string &amp;&gt;&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>reason</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layer_support_rules_8hpp_source.xhtml#l00038">38</a> of file <a class="el" href="_layer_support_rules_8hpp_source.xhtml">LayerSupportRules.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_optional_8hpp_source.xhtml#l00146">OptionalReferenceSwitch&lt; std::is_reference&lt; T &gt;::value, T &gt;::value()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00543">RefLayerSupport::IsActivationSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00611">RefLayerSupport::IsAdditionSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00649">RefLayerSupport::IsArgMinMaxSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00682">RefLayerSupport::IsBatchNormalizationSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00729">RefLayerSupport::IsBatchToSpaceNdSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00779">RefLayerSupport::IsCastSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00809">RefLayerSupport::IsChannelShuffleSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00842">RefLayerSupport::IsComparisonSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00874">RefLayerSupport::IsConcatSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00907">RefLayerSupport::IsConstantSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00926">RefLayerSupport::IsConvertBf16ToFp32Supported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00961">RefLayerSupport::IsConvertFp32ToBf16Supported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00996">RefLayerSupport::IsConvolution2dSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01078">RefLayerSupport::IsConvolution3dSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01148">RefLayerSupport::IsDebugSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01178">RefLayerSupport::IsDepthToSpaceSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01208">RefLayerSupport::IsDepthwiseConvolutionSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01279">RefLayerSupport::IsDequantizeSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01314">RefLayerSupport::IsDetectionPostProcessSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01357">RefLayerSupport::IsDivisionSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01395">RefLayerSupport::IsElementwiseUnarySupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01447">RefLayerSupport::IsFakeQuantizationSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01465">RefLayerSupport::IsFillSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01490">RefLayerSupport::IsFloorSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01513">RefLayerSupport::IsFullyConnectedSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01593">RefLayerSupport::IsGatherSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01637">RefLayerSupport::IsInstanceNormalizationSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01669">RefLayerSupport::IsL2NormalizationSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01704">RefLayerSupport::IsLogicalBinarySupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01729">RefLayerSupport::IsLogSoftmaxSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01756">RefLayerSupport::IsLstmSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01868">RefLayerSupport::IsMaximumSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01906">RefLayerSupport::IsMeanSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01969">RefLayerSupport::IsMemCopySupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01998">RefLayerSupport::IsMinimumSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02036">RefLayerSupport::IsMultiplicationSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02074">RefLayerSupport::IsNormalizationSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02113">RefLayerSupport::IsPadSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02144">RefLayerSupport::IsPermuteSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02175">RefLayerSupport::IsPooling2dSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02206">RefLayerSupport::IsPooling3dSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02665">RefLayerSupport::IsPreluSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02262">RefLayerSupport::IsQuantizeSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02298">RefLayerSupport::IsRankSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02313">RefLayerSupport::IsReduceSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02343">RefLayerSupport::IsReshapeSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02367">RefLayerSupport::IsResizeSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02396">RefLayerSupport::IsShapeSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02414">RefLayerSupport::IsSliceSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02443">RefLayerSupport::IsSoftmaxSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02473">RefLayerSupport::IsSpaceToBatchNdSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02502">RefLayerSupport::IsSpaceToDepthSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02533">RefLayerSupport::IsSplitterSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02564">RefLayerSupport::IsStackSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02598">RefLayerSupport::IsStridedSliceSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02627">RefLayerSupport::IsSubtractionSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02700">RefLayerSupport::IsTransposeConvolution2dSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02770">RefLayerSupport::IsTransposeSupported()</a>, and <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02801">RefLayerSupport::IsUnidirectionalSequenceLstmSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;{</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordtype">bool</span> supported = rule();</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">if</span> (!supported &amp;&amp; reason)</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; {</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; reasonIfUnsupported.value() += std::string(reason) + <span class="stringliteral">&quot;\n&quot;</span>; <span class="comment">// Append the reason on a new line</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; }</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">return</span> supported;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a1391582cd6e145b67c98f3410667968e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1391582cd6e145b67c98f3410667968e">&#9670;&nbsp;</a></span>ClAbsWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClAbsWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_abs_workload_8cpp_source.xhtml#l00019">19</a> of file <a class="el" href="_cl_abs_workload_8cpp_source.xhtml">ClAbsWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00900">ClLayerSupport::IsElementwiseUnarySupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;{</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keywordflow">return</span> arm_compute::CLAbsLayer::validate(&amp;aclInput, &amp;aclOutput);</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a42ef3cee193102dc7755193579209cca"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a42ef3cee193102dc7755193579209cca">&#9670;&nbsp;</a></span>ClActivationWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClActivationWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_activation_workload_8cpp_source.xhtml#l00017">17</a> of file <a class="el" href="_cl_activation_workload_8cpp_source.xhtml">ClActivationWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00588">ClLayerSupport::IsActivationSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;{</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationLayerInfo =</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(descriptor);</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keywordflow">return</span> arm_compute::CLActivationLayer::validate(&amp;aclInput,</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; &amp;aclOutput,</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; activationLayerInfo);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ad701d0d29baa4266ab4d33b090aa661c"><div class="ttname"><a href="namespacearmnn.xhtml#ad701d0d29baa4266ab4d33b090aa661c">armnn::ConvertActivationDescriptorToAclActivationLayerInfo</a></div><div class="ttdeci">arm_compute::ActivationLayerInfo ConvertActivationDescriptorToAclActivationLayerInfo(const ActivationDescriptor &amp;actDesc)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.xhtml#l00085">ArmComputeUtils.hpp:85</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a24fc3e8e29d3fa56cc6b2d81e48625d1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a24fc3e8e29d3fa56cc6b2d81e48625d1">&#9670;&nbsp;</a></span>ClAdditionValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClAdditionValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input0</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> *&#160;</td>
+ <td class="paramname"><em>activationDescriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_addition_workload_8cpp_source.xhtml#l00045">45</a> of file <a class="el" href="_cl_addition_workload_8cpp_source.xhtml">ClAdditionWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00600">ClLayerSupport::IsAdditionSupported()</a>, and <a class="el" href="_cl_backend_8cpp_source.xhtml#l00276">ClBackend::OptimizeSubgraphView()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;{</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput0Info = BuildArmComputeTensorInfo(input0);</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput1Info = BuildArmComputeTensorInfo(input1);</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationInfo = <a class="code" href="namespacearmnn.xhtml#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; activationDescriptor);</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::CLArithmeticAddition::validate(&amp;aclInput0Info,</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; &amp;aclInput1Info,</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; &amp;aclOutputInfo,</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; g_AclConvertPolicy,</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; activationInfo);</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordflow">return</span> aclStatus;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70b"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">armnn::Status</a></div><div class="ttdeci">Status</div><div class="ttdoc">enumeration </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00029">Types.hpp:29</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad701d0d29baa4266ab4d33b090aa661c"><div class="ttname"><a href="namespacearmnn.xhtml#ad701d0d29baa4266ab4d33b090aa661c">armnn::ConvertActivationDescriptorToAclActivationLayerInfo</a></div><div class="ttdeci">arm_compute::ActivationLayerInfo ConvertActivationDescriptorToAclActivationLayerInfo(const ActivationDescriptor &amp;actDesc)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.xhtml#l00085">ArmComputeUtils.hpp:85</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ab80423b306d8e0436b9a316922911d4d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab80423b306d8e0436b9a316922911d4d">&#9670;&nbsp;</a></span>ClArgMinMaxWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClArgMinMaxWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_arg_min_max_descriptor.xhtml">ArgMinMaxDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_arg_min_max_workload_8cpp_source.xhtml#l00031">31</a> of file <a class="el" href="_cl_arg_min_max_workload_8cpp_source.xhtml">ClArgMinMaxWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00613">ClLayerSupport::IsArgMinMaxSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;{</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keyword">auto</span> numDims = input.GetNumDimensions();</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keyword">auto</span> unsignedAxis = <a class="code" href="namespacearmnn_utils.xhtml#ac93cb1365b4bcb67df2a3164606096c5">armnnUtils::GetUnsignedAxis</a>(numDims, descriptor.m_Axis);</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordtype">int</span> aclAxis = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">int</span>&gt;(CalcAclAxis(numDims, unsignedAxis));</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">if</span> (descriptor.m_Function == ArgMinMaxFunction::Max)</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; {</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordflow">return</span> arm_compute::CLArgMinMaxLayer::validate(&amp;aclInput, aclAxis, &amp;aclOutput,</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; arm_compute::ReductionOperation::ARG_IDX_MAX);</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; }</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; {</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">return</span> arm_compute::CLArgMinMaxLayer::validate(&amp;aclInput, aclAxis, &amp;aclOutput,</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; arm_compute::ReductionOperation::ARG_IDX_MIN);</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; }</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;}</div><div class="ttc" id="namespacearmnn_utils_xhtml_ac93cb1365b4bcb67df2a3164606096c5"><div class="ttname"><a href="namespacearmnn_utils.xhtml#ac93cb1365b4bcb67df2a3164606096c5">armnnUtils::GetUnsignedAxis</a></div><div class="ttdeci">unsigned int GetUnsignedAxis(const unsigned int inputDimension, const int axis)</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_utils_8cpp_source.xhtml#l00148">TensorUtils.cpp:148</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a375ca3cff9f1b005d1412dc5f3cf5b6e"><div class="ttname"><a href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a></div><div class="ttdeci">std::enable_if_t&lt; std::is_unsigned&lt; Source &gt;::value &amp;&amp;std::is_unsigned&lt; Dest &gt;::value, Dest &gt; numeric_cast(Source source)</div><div class="ttdef"><b>Definition:</b> <a href="_numeric_cast_8hpp_source.xhtml#l00035">NumericCast.hpp:35</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="adfe10e7086e3e3b98927cf84aee03dd0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adfe10e7086e3e3b98927cf84aee03dd0">&#9670;&nbsp;</a></span>ClBackendId()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr const char* armnn::ClBackendId </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_backend_id_8hpp_source.xhtml#l00010">10</a> of file <a class="el" href="_cl_backend_id_8hpp_source.xhtml">ClBackendId.hpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_backend_8cpp_source.xhtml#l00045">ClBackend::GetIdStatic()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;{ <span class="keywordflow">return</span> <span class="stringliteral">&quot;GpuAcc&quot;</span>; }</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a29bd65c1ec4ff9f75b636ec8e7b038be"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a29bd65c1ec4ff9f75b636ec8e7b038be">&#9670;&nbsp;</a></span>ClBatchNormalizationValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClBatchNormalizationValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>mean</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>var</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>beta</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>gamma</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_batch_normalization_descriptor.xhtml">BatchNormalizationDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> *&#160;</td>
+ <td class="paramname"><em>activationDescriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_batch_normalization_float_workload_8cpp_source.xhtml#l00019">19</a> of file <a class="el" href="_cl_batch_normalization_float_workload_8cpp_source.xhtml">ClBatchNormalizationFloatWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00626">ClLayerSupport::IsBatchNormalizationSupported()</a>, and <a class="el" href="_cl_backend_8cpp_source.xhtml#l00276">ClBackend::OptimizeSubgraphView()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;{</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo =</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; armcomputetensorutils::BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo =</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; armcomputetensorutils::BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclMeanInfo =</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; armcomputetensorutils::BuildArmComputeTensorInfo(mean, descriptor.m_DataLayout);</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclVarInfo =</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; armcomputetensorutils::BuildArmComputeTensorInfo(var, descriptor.m_DataLayout);</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclBetaInfo =</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; armcomputetensorutils::BuildArmComputeTensorInfo(beta, descriptor.m_DataLayout);</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclGammaInfo =</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; armcomputetensorutils::BuildArmComputeTensorInfo(gamma, descriptor.m_DataLayout);</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationInfo = <a class="code" href="namespacearmnn.xhtml#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; activationDescriptor);</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordflow">return</span> arm_compute::CLBatchNormalizationLayer::validate(&amp;aclInputInfo,</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; &amp;aclOutputInfo,</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; &amp;aclMeanInfo,</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; &amp;aclVarInfo,</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; &amp;aclBetaInfo,</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; &amp;aclGammaInfo,</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; descriptor.m_Eps,</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; activationInfo);</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ad701d0d29baa4266ab4d33b090aa661c"><div class="ttname"><a href="namespacearmnn.xhtml#ad701d0d29baa4266ab4d33b090aa661c">armnn::ConvertActivationDescriptorToAclActivationLayerInfo</a></div><div class="ttdeci">arm_compute::ActivationLayerInfo ConvertActivationDescriptorToAclActivationLayerInfo(const ActivationDescriptor &amp;actDesc)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.xhtml#l00085">ArmComputeUtils.hpp:85</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ae87476befb36d9cc4fb926337ba65b5d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae87476befb36d9cc4fb926337ba65b5d">&#9670;&nbsp;</a></span>ClBatchToSpaceNdWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClBatchToSpaceNdWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_batch_to_space_nd_descriptor.xhtml">BatchToSpaceNdDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_batch_to_space_nd_workload_8cpp_source.xhtml#l00057">57</a> of file <a class="el" href="_cl_batch_to_space_nd_workload_8cpp_source.xhtml">ClBatchToSpaceNdWorkload.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_descriptors_8hpp_source.xhtml#l00862">BatchToSpaceNdDescriptor::m_DataLayout</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00647">ClLayerSupport::IsBatchToSpaceNdSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;{</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> dataLayout = descriptor.m_DataLayout;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, dataLayout);</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="comment">// ArmNN blockShape is [H, W] Cl asks for W, H</span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; int32_t blockHeight = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;int32_t&gt;(descriptor.m_BlockShape[0]);</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; int32_t blockWidth = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;int32_t&gt;(descriptor.m_BlockShape[1]);</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, dataLayout);</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::CLBatchToSpaceLayer::validate(&amp;aclInputInfo,</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; blockWidth,</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; blockHeight,</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; &amp;aclOutputInfo);</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordflow">return</span> aclStatus;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a></div><div class="ttdeci">DataLayout</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00049">Types.hpp:49</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70b"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">armnn::Status</a></div><div class="ttdeci">Status</div><div class="ttdoc">enumeration </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00029">Types.hpp:29</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a375ca3cff9f1b005d1412dc5f3cf5b6e"><div class="ttname"><a href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a></div><div class="ttdeci">std::enable_if_t&lt; std::is_unsigned&lt; Source &gt;::value &amp;&amp;std::is_unsigned&lt; Dest &gt;::value, Dest &gt; numeric_cast(Source source)</div><div class="ttdef"><b>Definition:</b> <a href="_numeric_cast_8hpp_source.xhtml#l00035">NumericCast.hpp:35</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a7f82264f26183ae3c66390e33be14ec6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7f82264f26183ae3c66390e33be14ec6">&#9670;&nbsp;</a></span>ClCastValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClCastValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_cast_workload_8cpp_source.xhtml#l00020">20</a> of file <a class="el" href="_cl_cast_workload_8cpp_source.xhtml">ClCastWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00659">ClLayerSupport::IsCastSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;{</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keywordflow">return</span> arm_compute::CLCast::validate(&amp;aclInput, &amp;aclOutput, g_AclConvertPolicy);</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a02e646180897aca9fcbc02d16efdd784"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a02e646180897aca9fcbc02d16efdd784">&#9670;&nbsp;</a></span>ClChannelShuffleValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClChannelShuffleValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_channel_shuffle_descriptor.xhtml">ChannelShuffleDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_channel_shuffle_workload_8cpp_source.xhtml#l00020">20</a> of file <a class="el" href="_cl_channel_shuffle_workload_8cpp_source.xhtml">ClChannelShuffleWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00669">ClLayerSupport::IsChannelShuffleSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;{</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="comment">// In Arm NN and in NNAPI, channel shuffle implementation is datalayout agnostic and it has axis as a parameter.</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="comment">// The channel shuffle Implementation for Neon is dependent on datalayout and does not have axis as a parameter,</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="comment">// it only supports channel shuffle for 4D tensors in dimension C (1 or 3).</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">arm_compute::DataLayout</a> aclDataLayout;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keywordflow">if</span> (input.GetNumDimensions() == 4)</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; {</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordflow">switch</span> (descriptor.m_Axis)</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; {</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordflow">case</span> 1:</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; aclDataLayout = ConvertDataLayout(<a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a>);</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">case</span> 3:</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; aclDataLayout = ConvertDataLayout(<a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a>);</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>{arm_compute::ErrorCode::RUNTIME_ERROR, <span class="stringliteral">&quot;Unsupported axis&quot;</span>};</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; }</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; aclInputInfo.set_data_layout(aclDataLayout);</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; aclOutputInfo.set_data_layout(aclDataLayout);</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">return</span> arm_compute::CLChannelShuffleLayer::validate(&amp;aclInputInfo, &amp;aclOutputInfo, descriptor.m_NumGroups);</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; }</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; {</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>{arm_compute::ErrorCode::RUNTIME_ERROR, <span class="stringliteral">&quot;Unsupported number of dimensions&quot;</span>};</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; }</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a></div><div class="ttdeci">DataLayout</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00049">Types.hpp:49</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70b"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">armnn::Status</a></div><div class="ttdeci">Status</div><div class="ttdoc">enumeration </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00029">Types.hpp:29</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="af6f6476c5d1c4c85153020f5229ebd14"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af6f6476c5d1c4c85153020f5229ebd14">&#9670;&nbsp;</a></span>ClComparisonWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClComparisonWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input0</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_comparison_descriptor.xhtml">ComparisonDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_comparison_workload_8cpp_source.xhtml#l00024">24</a> of file <a class="el" href="_cl_comparison_workload_8cpp_source.xhtml">ClComparisonWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00681">ClLayerSupport::IsComparisonSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;{</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput0Info = BuildArmComputeTensorInfo(input0);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput1Info = BuildArmComputeTensorInfo(input1);</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58c">arm_compute::ComparisonOperation</a> comparisonOperation = <a class="code" href="namespacearmnn.xhtml#ac1438a97bbc2aee5cd8470d9d2a3aebc">ConvertComparisonOperationToAcl</a>(descriptor);</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::CLComparison::validate(&amp;aclInput0Info,</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; &amp;aclInput1Info,</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; &amp;aclOutputInfo,</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; comparisonOperation);</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">return</span> aclStatus;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a2d299363c9fc33334c571fa29ca4f58c"><div class="ttname"><a href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58c">armnn::ComparisonOperation</a></div><div class="ttdeci">ComparisonOperation</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00095">Types.hpp:95</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70b"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">armnn::Status</a></div><div class="ttdeci">Status</div><div class="ttdoc">enumeration </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00029">Types.hpp:29</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ac1438a97bbc2aee5cd8470d9d2a3aebc"><div class="ttname"><a href="namespacearmnn.xhtml#ac1438a97bbc2aee5cd8470d9d2a3aebc">armnn::ConvertComparisonOperationToAcl</a></div><div class="ttdeci">arm_compute::ComparisonOperation ConvertComparisonOperationToAcl(const ComparisonDescriptor &amp;descriptor)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.xhtml#l00115">ArmComputeUtils.hpp:115</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a7782f0809076f14363eacb4a38964b9f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7782f0809076f14363eacb4a38964b9f">&#9670;&nbsp;</a></span>ClConcatWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClConcatWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const std::vector&lt; const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> *&gt; &amp;&#160;</td>
+ <td class="paramname"><em>inputs</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_origins_descriptor.xhtml">OriginsDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_concat_workload_8cpp_source.xhtml#l00027">27</a> of file <a class="el" href="_cl_concat_workload_8cpp_source.xhtml">ClConcatWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00695">ClLayerSupport::IsConcatSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;{</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; std::vector&lt;arm_compute::TensorInfo&gt; aclInputs;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> TensorInfo* input : inputs)</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; {</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(*input, <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a>);</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; aclInputs.emplace_back(aclInputInfo);</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; }</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; std::vector&lt;const arm_compute::ITensorInfo*&gt; aclInputPtrs;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">for</span> (arm_compute::ITensorInfo&amp; input : aclInputs)</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; {</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; aclInputPtrs.emplace_back(&amp;input);</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; }</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordtype">size_t</span> aclAxis = CalcAxis(descriptor);</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">return</span> arm_compute::CLConcatenateLayer::validate(aclInputPtrs, &amp;aclOutputInfo, aclAxis);</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a2f5c2e8794174361f2308f4a0d3f9c73"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2f5c2e8794174361f2308f4a0d3f9c73">&#9670;&nbsp;</a></span>ClConstantWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClConstantWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_constant_workload_8cpp_source.xhtml#l00018">18</a> of file <a class="el" href="_cl_constant_workload_8cpp_source.xhtml">ClConstantWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00736">ClLayerSupport::IsConstantSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;{</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo neonOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; std::array&lt;arm_compute::DataType,8&gt; supportedTypes = {</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; arm_compute::DataType::F16,</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; arm_compute::DataType::F32,</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; arm_compute::DataType::QASYMM8,</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; arm_compute::DataType::QASYMM8_SIGNED,</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; arm_compute::DataType::QSYMM16,</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; arm_compute::DataType::QSYMM8,</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; arm_compute::DataType::QSYMM8_PER_CHANNEL,</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; arm_compute::DataType::S32</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; };</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">auto</span> it = std::find(begin(supportedTypes), end(supportedTypes), neonOutputInfo.data_type());</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordflow">if</span> (it != end(supportedTypes))</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; {</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>{};</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; }</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; {</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>{arm_compute::ErrorCode::RUNTIME_ERROR, <span class="stringliteral">&quot;Unsupported DataType&quot;</span>};</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; }</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70b"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">armnn::Status</a></div><div class="ttdeci">Status</div><div class="ttdoc">enumeration </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00029">Types.hpp:29</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a744cd226e45f7c948e0533abbd166b1f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a744cd226e45f7c948e0533abbd166b1f">&#9670;&nbsp;</a></span>ClContextBufferHasIdentifier()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::ClContextBufferHasIdentifier </td>
+ <td>(</td>
+ <td class="paramtype">const void *&#160;</td>
+ <td class="paramname"><em>buf</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_context_schema__generated_8h_source.xhtml#l00152">152</a> of file <a class="el" href="_cl_context_schema__generated_8h_source.xhtml">ClContextSchema_generated.h</a>.</p>
+
+<p class="reference">References <a class="el" href="_cl_context_schema__generated_8h_source.xhtml#l00148">ClContextIdentifier()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; {</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordflow">return</span> flatbuffers::BufferHasIdentifier(</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; buf, <a class="code" href="namespacearmnn.xhtml#ab672391d036102ab6864bb181d4844d5">ClContextIdentifier</a>());</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ab672391d036102ab6864bb181d4844d5"><div class="ttname"><a href="namespacearmnn.xhtml#ab672391d036102ab6864bb181d4844d5">armnn::ClContextIdentifier</a></div><div class="ttdeci">const char * ClContextIdentifier()</div><div class="ttdef"><b>Definition:</b> <a href="_cl_context_schema__generated_8h_source.xhtml#l00148">ClContextSchema_generated.h:148</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ab4e35e40c433e5fb0a0b89ca7c89988d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab4e35e40c433e5fb0a0b89ca7c89988d">&#9670;&nbsp;</a></span>ClContextExtension()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char* armnn::ClContextExtension </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_context_schema__generated_8h_source.xhtml#l00167">167</a> of file <a class="el" href="_cl_context_schema__generated_8h_source.xhtml">ClContextSchema_generated.h</a>.</p>
+<div class="fragment"><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; {</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;armnn&quot;</span>;</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="ab672391d036102ab6864bb181d4844d5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab672391d036102ab6864bb181d4844d5">&#9670;&nbsp;</a></span>ClContextIdentifier()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char* armnn::ClContextIdentifier </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_context_schema__generated_8h_source.xhtml#l00148">148</a> of file <a class="el" href="_cl_context_schema__generated_8h_source.xhtml">ClContextSchema_generated.h</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_context_schema__generated_8h_source.xhtml#l00152">ClContextBufferHasIdentifier()</a>, <a class="el" href="_cl_context_schema__generated_8h_source.xhtml#l00171">FinishClContextBuffer()</a>, <a class="el" href="_cl_context_schema__generated_8h_source.xhtml#l00177">FinishSizePrefixedClContextBuffer()</a>, <a class="el" href="_cl_context_schema__generated_8h_source.xhtml#l00157">VerifyClContextBuffer()</a>, and <a class="el" href="_cl_context_schema__generated_8h_source.xhtml#l00162">VerifySizePrefixedClContextBuffer()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; {</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;ARMN&quot;</span>;</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a46efae0191388fd33db4e95c5d79e2be"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a46efae0191388fd33db4e95c5d79e2be">&#9670;&nbsp;</a></span>ClConvertFp16ToFp32WorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClConvertFp16ToFp32WorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_convert_fp16_to_fp32_workload_8cpp_source.xhtml#l00044">44</a> of file <a class="el" href="_cl_convert_fp16_to_fp32_workload_8cpp_source.xhtml">ClConvertFp16ToFp32Workload.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">Float16</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">Float32</a>, and <a class="el" href="_tensor_8hpp_source.xhtml#l00198">TensorInfo::GetDataType()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00744">ClLayerSupport::IsConvertFp16ToFp32Supported()</a>, and <a class="el" href="_cl_convert_fp16_to_fp32_workload_8hpp_source.xhtml#l00026">ClConvertFp16ToFp32Workload::SupportsTensorHandleReplacement()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;{</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">if</span> (input.GetDataType() != DataType::Float16)</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; {</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::RUNTIME_ERROR, <span class="stringliteral">&quot;Input should be Float16&quot;</span>);</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; }</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordflow">if</span> (output.GetDataType() != DataType::Float32)</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; {</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::RUNTIME_ERROR, <span class="stringliteral">&quot;Output should be Float32&quot;</span>);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; }</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::CLDepthConvertLayer::validate(</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; &amp;aclInputInfo, &amp;aclOutputInfo, g_AclConvertPolicy, 0);</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordflow">return</span> aclStatus;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70b"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">armnn::Status</a></div><div class="ttdeci">Status</div><div class="ttdoc">enumeration </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00029">Types.hpp:29</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a37f6946bfb7a9c7d64881b7a2e13945f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a37f6946bfb7a9c7d64881b7a2e13945f">&#9670;&nbsp;</a></span>ClConvertFp32ToFp16WorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClConvertFp32ToFp16WorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_convert_fp32_to_fp16_workload_8cpp_source.xhtml#l00044">44</a> of file <a class="el" href="_cl_convert_fp32_to_fp16_workload_8cpp_source.xhtml">ClConvertFp32ToFp16Workload.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">Float16</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">Float32</a>, and <a class="el" href="_tensor_8hpp_source.xhtml#l00198">TensorInfo::GetDataType()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00754">ClLayerSupport::IsConvertFp32ToFp16Supported()</a>, and <a class="el" href="_cl_convert_fp32_to_fp16_workload_8hpp_source.xhtml#l00026">ClConvertFp32ToFp16Workload::SupportsTensorHandleReplacement()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;{</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">if</span> (input.GetDataType() != DataType::Float32)</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; {</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::RUNTIME_ERROR, <span class="stringliteral">&quot;Input should be Float32&quot;</span>);</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; }</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordflow">if</span> (output.GetDataType() != DataType::Float16)</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; {</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::RUNTIME_ERROR, <span class="stringliteral">&quot;Output should be Float16&quot;</span>);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; }</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::CLDepthConvertLayer::validate(</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; &amp;aclInputInfo, &amp;aclOutputInfo, g_AclConvertPolicy, 0);</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordflow">return</span> aclStatus;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70b"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">armnn::Status</a></div><div class="ttdeci">Status</div><div class="ttdoc">enumeration </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00029">Types.hpp:29</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a61cf0886d4c1a6e24c101a57ccb2ec31"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a61cf0886d4c1a6e24c101a57ccb2ec31">&#9670;&nbsp;</a></span>ClConvolution2dWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClConvolution2dWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_convolution2d_descriptor.xhtml">Convolution2dDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>weights</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &gt; &amp;&#160;</td>
+ <td class="paramname"><em>biases</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">bool&#160;</td>
+ <td class="paramname"><em>isFastMathEnabled</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> *&#160;</td>
+ <td class="paramname"><em>activationDescriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_convolution2d_workload_8cpp_source.xhtml#l00023">23</a> of file <a class="el" href="_cl_convolution2d_workload_8cpp_source.xhtml">ClConvolution2dWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00764">ClLayerSupport::IsConvolution2dSupported()</a>, and <a class="el" href="_cl_backend_8cpp_source.xhtml#l00276">ClBackend::OptimizeSubgraphView()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;{</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclWeightsInfo = BuildArmComputeTensorInfo(weights, descriptor.m_DataLayout);</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">const</span> arm_compute::Size2D aclDilationInfo = BuildArmComputeSize2D(descriptor.m_DilationX,</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; descriptor.m_DilationY);</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; arm_compute::TensorInfo aclBiasesInfo;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; arm_compute::TensorInfo *optionalAclBiasesInfo = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">if</span> (descriptor.m_BiasEnabled)</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; {</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(biases.has_value());</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; aclBiasesInfo = BuildArmComputeTensorInfo(biases.value(), descriptor.m_DataLayout);</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; optionalAclBiasesInfo = &amp;aclBiasesInfo;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; }</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; arm_compute::PadStrideInfo layerInfo = BuildArmComputePadStrideInfo(descriptor);</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationInfo = <a class="code" href="namespacearmnn.xhtml#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; activationDescriptor);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordflow">return</span> arm_compute::CLConvolutionLayer::validate(&amp;aclInputInfo,</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; &amp;aclWeightsInfo,</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; optionalAclBiasesInfo,</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; &amp;aclOutputInfo,</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; layerInfo,</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; arm_compute::WeightsInfo(),</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; aclDilationInfo,</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; activationInfo,</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; isFastMathEnabled);</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;}</div><div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad701d0d29baa4266ab4d33b090aa661c"><div class="ttname"><a href="namespacearmnn.xhtml#ad701d0d29baa4266ab4d33b090aa661c">armnn::ConvertActivationDescriptorToAclActivationLayerInfo</a></div><div class="ttdeci">arm_compute::ActivationLayerInfo ConvertActivationDescriptorToAclActivationLayerInfo(const ActivationDescriptor &amp;actDesc)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.xhtml#l00085">ArmComputeUtils.hpp:85</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ae387b3587bcce82eb33623b300097a8c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae387b3587bcce82eb33623b300097a8c">&#9670;&nbsp;</a></span>ClConvolution3dWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClConvolution3dWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_convolution3d_descriptor.xhtml">Convolution3dDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>weights</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &gt; &amp;&#160;</td>
+ <td class="paramname"><em>biases</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">bool&#160;</td>
+ <td class="paramname"><em>isFastMathEnabled</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> *&#160;</td>
+ <td class="paramname"><em>activationDescriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_convolution3d_workload_8cpp_source.xhtml#l00023">23</a> of file <a class="el" href="_cl_convolution3d_workload_8cpp_source.xhtml">ClConvolution3dWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00797">ClLayerSupport::IsConvolution3dSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;{</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclWeightsInfo = BuildArmComputeTensorInfo(weights, descriptor.m_DataLayout);</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; arm_compute::TensorInfo aclBiasesInfo;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; arm_compute::TensorInfo* optionalAclBiasesInfo = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">if</span> (descriptor.m_BiasEnabled)</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; {</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(biases.has_value());</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; aclBiasesInfo = BuildArmComputeTensorInfo(biases.value(), descriptor.m_DataLayout);</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; optionalAclBiasesInfo = &amp;aclBiasesInfo;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; }</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keyword">const</span> arm_compute::Conv3dInfo aclConv3DInfo = <a class="code" href="namespacearmnn.xhtml#a855760e957668804d33c0691a802496e">ComputeConv3DInfo</a>(descriptor,</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; isFastMathEnabled,</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; activationDescriptor);</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">return</span> arm_compute::CLConv3D::validate(&amp;aclInputInfo,</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; &amp;aclWeightsInfo,</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; optionalAclBiasesInfo,</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; &amp;aclOutputInfo,</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; aclConv3DInfo);</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a855760e957668804d33c0691a802496e"><div class="ttname"><a href="namespacearmnn.xhtml#a855760e957668804d33c0691a802496e">armnn::ComputeConv3DInfo</a></div><div class="ttdeci">arm_compute::Conv3dInfo ComputeConv3DInfo(const armnn::Convolution3dDescriptor descriptor, bool isFastMathEnabled, const ActivationDescriptor *activationDescriptor)</div><div class="ttdoc">Utility function used to setup an arm_compute::Conv3dInfo object from convolution3d descriptor...</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.xhtml#l00269">ArmComputeUtils.hpp:269</a></div></div>
+<div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ab3624c723d9a0ec93722b19060b76115"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab3624c723d9a0ec93722b19060b76115">&#9670;&nbsp;</a></span>ClDepthToSpaceWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClDepthToSpaceWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="namespacearmnn.xhtml#a3647f60510bc8ddaced01c51b0ee8714">DepthToSpaceDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_depth_to_space_workload_8cpp_source.xhtml#l00022">22</a> of file <a class="el" href="_cl_depth_to_space_workload_8cpp_source.xhtml">ClDepthToSpaceWorkload.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_descriptors_8hpp_source.xhtml#l01071">SpaceToDepthDescriptor::m_DataLayout</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00840">ClLayerSupport::IsDepthToSpaceSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;{</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> dataLayout = descriptor.m_DataLayout;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, dataLayout);</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; int32_t blockSize = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;int32_t&gt;(descriptor.m_BlockSize);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, dataLayout);</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::CLDepthToSpaceLayer::validate(&amp;aclInputInfo,</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; &amp;aclOutputInfo,</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; blockSize);</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">return</span> aclStatus;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a></div><div class="ttdeci">DataLayout</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00049">Types.hpp:49</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70b"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">armnn::Status</a></div><div class="ttdeci">Status</div><div class="ttdoc">enumeration </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00029">Types.hpp:29</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a375ca3cff9f1b005d1412dc5f3cf5b6e"><div class="ttname"><a href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a></div><div class="ttdeci">std::enable_if_t&lt; std::is_unsigned&lt; Source &gt;::value &amp;&amp;std::is_unsigned&lt; Dest &gt;::value, Dest &gt; numeric_cast(Source source)</div><div class="ttdef"><b>Definition:</b> <a href="_numeric_cast_8hpp_source.xhtml#l00035">NumericCast.hpp:35</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="aa6670a2fcf9f365da69f3f3092dfa64b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa6670a2fcf9f365da69f3f3092dfa64b">&#9670;&nbsp;</a></span>ClDepthwiseConvolutionWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClDepthwiseConvolutionWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml">DepthwiseConvolution2dDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>weights</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &gt; &amp;&#160;</td>
+ <td class="paramname"><em>biases</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> *&#160;</td>
+ <td class="paramname"><em>activationDescriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_depthwise_convolution_workload_8cpp_source.xhtml#l00026">26</a> of file <a class="el" href="_cl_depthwise_convolution_workload_8cpp_source.xhtml">ClDepthwiseConvolutionWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00852">ClLayerSupport::IsDepthwiseConvolutionSupported()</a>, <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00869">ClLayerSupport::IsDilatedDepthwiseConvolutionSupported()</a>, and <a class="el" href="_cl_backend_8cpp_source.xhtml#l00276">ClBackend::OptimizeSubgraphView()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;{</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="comment">// ArmNN&#39;s weight format is usually [ M, I, H, W ] but for depthwise its [ 1, H, W, I*M]</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="comment">// Permute to [ 1, I * M, H, W ] (if NCHW) as required by the compute library</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> aclDepthMultiplier;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; TensorInfo weightsPermuted;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; std::tie(weightsPermuted, aclDepthMultiplier) = <a class="code" href="namespacearmnn.xhtml#ac4aa9e41515b354234645f115c49de32">Convert1HWOTensorInfoToAcl</a>(weights, input,descriptor.m_DataLayout);</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="comment">// Convert the weights into the compute library format</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclWeightsInfo = BuildArmComputeTensorInfo(weightsPermuted, descriptor.m_DataLayout);</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; arm_compute::TensorInfo aclBiasesInfo;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; arm_compute::TensorInfo *optionalAclBiasesInfo = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">if</span> (descriptor.m_BiasEnabled)</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; {</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(biases.has_value());</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; aclBiasesInfo = BuildArmComputeTensorInfo(biases.value(), descriptor.m_DataLayout);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; optionalAclBiasesInfo = &amp;aclBiasesInfo;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; }</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keyword">const</span> arm_compute::PadStrideInfo aclPadStrideInfo = BuildArmComputePadStrideInfo(descriptor);</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keyword">const</span> arm_compute::Size2D aclDilationInfo = BuildArmComputeSize2D(</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; descriptor.m_DilationX,</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; descriptor.m_DilationY);</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationInfo = <a class="code" href="namespacearmnn.xhtml#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; activationDescriptor);</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">return</span> arm_compute::CLDepthwiseConvolutionLayer::validate(&amp;aclInputInfo,</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; &amp;aclWeightsInfo,</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; optionalAclBiasesInfo,</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; &amp;aclOutputInfo,</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; aclPadStrideInfo,</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; aclDepthMultiplier,</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; activationInfo,</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; aclDilationInfo);</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;}</div><div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ac4aa9e41515b354234645f115c49de32"><div class="ttname"><a href="namespacearmnn.xhtml#ac4aa9e41515b354234645f115c49de32">armnn::Convert1HWOTensorInfoToAcl</a></div><div class="ttdeci">std::tuple&lt; TensorInfo, unsigned int &gt; Convert1HWOTensorInfoToAcl(const TensorInfo &amp;weightInfo, const TensorInfo &amp;inputInfo, const DataLayout dataLayout)</div><div class="ttdoc">Weights for depthwise have a datalayout of [1,H,W,O] = [1,H,W,I*M] This function coverts a TensorInfo...</div><div class="ttdef"><b>Definition:</b> <a href="_workload_utils_8cpp_source.xhtml#l00169">WorkloadUtils.cpp:169</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad701d0d29baa4266ab4d33b090aa661c"><div class="ttname"><a href="namespacearmnn.xhtml#ad701d0d29baa4266ab4d33b090aa661c">armnn::ConvertActivationDescriptorToAclActivationLayerInfo</a></div><div class="ttdeci">arm_compute::ActivationLayerInfo ConvertActivationDescriptorToAclActivationLayerInfo(const ActivationDescriptor &amp;actDesc)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.xhtml#l00085">ArmComputeUtils.hpp:85</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a75045734c29d7d6635342c05adbc151b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a75045734c29d7d6635342c05adbc151b">&#9670;&nbsp;</a></span>ClDequantizeWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClDequantizeWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_dequantize_workload_8cpp_source.xhtml#l00022">22</a> of file <a class="el" href="_cl_dequantize_workload_8cpp_source.xhtml">ClDequantizeWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00830">ClLayerSupport::IsDequantizeSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;{</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keywordflow">return</span> arm_compute::CLDequantizationLayer::validate(&amp;aclInputInfo, &amp;aclOutputInfo);</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a0591ff61ac269187164ea23713d33852"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0591ff61ac269187164ea23713d33852">&#9670;&nbsp;</a></span>ClDivisionWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClDivisionWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input0</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> *&#160;</td>
+ <td class="paramname"><em>activationDescriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_division_workload_8cpp_source.xhtml#l00018">18</a> of file <a class="el" href="_cl_division_workload_8cpp_source.xhtml">ClDivisionWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00887">ClLayerSupport::IsDivisionSupported()</a>, and <a class="el" href="_cl_backend_8cpp_source.xhtml#l00276">ClBackend::OptimizeSubgraphView()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;{</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput1 = armcomputetensorutils::BuildArmComputeTensorInfo(input0);</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput2 = armcomputetensorutils::BuildArmComputeTensorInfo(input1);</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationInfo = <a class="code" href="namespacearmnn.xhtml#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; activationDescriptor);</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordflow">return</span> arm_compute::CLArithmeticDivision::validate(&amp;aclInput1, &amp;aclInput2, &amp;aclOutput, activationInfo);</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ad701d0d29baa4266ab4d33b090aa661c"><div class="ttname"><a href="namespacearmnn.xhtml#ad701d0d29baa4266ab4d33b090aa661c">armnn::ConvertActivationDescriptorToAclActivationLayerInfo</a></div><div class="ttdeci">arm_compute::ActivationLayerInfo ConvertActivationDescriptorToAclActivationLayerInfo(const ActivationDescriptor &amp;actDesc)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.xhtml#l00085">ArmComputeUtils.hpp:85</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a9831849c09391e90e50de46e2ee16403"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9831849c09391e90e50de46e2ee16403">&#9670;&nbsp;</a></span>ClExpWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClExpWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_exp_workload_8cpp_source.xhtml#l00018">18</a> of file <a class="el" href="_cl_exp_workload_8cpp_source.xhtml">ClExpWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00900">ClLayerSupport::IsElementwiseUnarySupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;{</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordflow">return</span> arm_compute::CLExpLayer::validate(&amp;aclInput, &amp;aclOutput);</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a8874961260f35da85229554f92e16ca9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8874961260f35da85229554f92e16ca9">&#9670;&nbsp;</a></span>ClFloorWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClFloorWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_floor_float_workload_8cpp_source.xhtml#l00014">14</a> of file <a class="el" href="_cl_floor_float_workload_8cpp_source.xhtml">ClFloorFloatWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00959">ClLayerSupport::IsFloorSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;{</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keywordflow">return</span> arm_compute::CLFloor::validate(&amp;aclInput, &amp;aclOutput);</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a18c7eef8533ca0acbbe081cd1a1fec98"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a18c7eef8533ca0acbbe081cd1a1fec98">&#9670;&nbsp;</a></span>ClFullyConnectedWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClFullyConnectedWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>weights</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &gt; &amp;&#160;</td>
+ <td class="paramname"><em>biases</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_fully_connected_descriptor.xhtml">FullyConnectedDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> *&#160;</td>
+ <td class="paramname"><em>activationDescriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_fully_connected_workload_8cpp_source.xhtml#l00019">19</a> of file <a class="el" href="_cl_fully_connected_workload_8cpp_source.xhtml">ClFullyConnectedWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00969">ClLayerSupport::IsFullyConnectedSupported()</a>, and <a class="el" href="_cl_backend_8cpp_source.xhtml#l00276">ClBackend::OptimizeSubgraphView()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;{</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclWeights = BuildArmComputeTensorInfo(weights);</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; arm_compute::TensorInfo aclBiases;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; arm_compute::TensorInfo* optionalAclBiases = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordflow">if</span> (descriptor.m_BiasEnabled)</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; {</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(biases.has_value());</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; aclBiases = BuildArmComputeTensorInfo(biases.value());</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; optionalAclBiases = &amp;aclBiases;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; }</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keyword">const</span> arm_compute::FullyConnectedLayerInfo fullyConnectedLayerInfo =</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <a class="code" href="namespacearmnn.xhtml#ae2e0c1d8160fadce44d479379790718e">ConvertFullyConnectedDescriptorToAclFullyConnectedLayerInfo</a>(descriptor, activationDescriptor);</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">return</span> arm_compute::CLFullyConnectedLayer::validate(&amp;aclInput,</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; &amp;aclWeights,</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; optionalAclBiases,</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; &amp;aclOutput,</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; fullyConnectedLayerInfo);</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ae2e0c1d8160fadce44d479379790718e"><div class="ttname"><a href="namespacearmnn.xhtml#ae2e0c1d8160fadce44d479379790718e">armnn::ConvertFullyConnectedDescriptorToAclFullyConnectedLayerInfo</a></div><div class="ttdeci">arm_compute::FullyConnectedLayerInfo ConvertFullyConnectedDescriptorToAclFullyConnectedLayerInfo(const FullyConnectedDescriptor &amp;fullyConnectedDesc, const ActivationDescriptor *activationDesc)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.xhtml#l00168">ArmComputeUtils.hpp:168</a></div></div>
+<div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="aff9e3b78a938c14a4420ce6365b997fb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aff9e3b78a938c14a4420ce6365b997fb">&#9670;&nbsp;</a></span>ClGatherWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClGatherWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>indices</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_gather_descriptor.xhtml">GatherDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_gather_workload_8cpp_source.xhtml#l00015">15</a> of file <a class="el" href="_cl_gather_workload_8cpp_source.xhtml">ClGatherWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00986">ClLayerSupport::IsGatherSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;{</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclIndices = BuildArmComputeTensorInfo(indices);</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keywordtype">int</span> aclAxis = <a class="code" href="namespacearmnn.xhtml#a44a3b98b37a25c995aa9e4dae7d7b456">ComputeAclAxis</a>(descriptor.m_Axis, input);</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keywordflow">return</span> arm_compute::CLGather::validate(&amp;aclInput, &amp;aclIndices, &amp;aclOutput, aclAxis);</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a44a3b98b37a25c995aa9e4dae7d7b456"><div class="ttname"><a href="namespacearmnn.xhtml#a44a3b98b37a25c995aa9e4dae7d7b456">armnn::ComputeAclAxis</a></div><div class="ttdeci">int ComputeAclAxis(const int &amp;armnnAxis, const armnn::TensorInfo &amp;tensor)</div><div class="ttdoc">Function to convert ArmNN axis (left to right) to ACL axis (right to left) ranging from [-rank...</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.xhtml#l00240">ArmComputeUtils.hpp:240</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ab1545eea543ad790732f0722ce35cc80"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab1545eea543ad790732f0722ce35cc80">&#9670;&nbsp;</a></span>ClImportTensorHandleFactoryId()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr const char* armnn::ClImportTensorHandleFactoryId </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_import_tensor_handle_factory_8hpp_source.xhtml#l00015">15</a> of file <a class="el" href="_cl_import_tensor_handle_factory_8hpp_source.xhtml">ClImportTensorHandleFactory.hpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_import_tensor_handle_factory_8cpp_source.xhtml#l00093">ClImportTensorHandleFactory::GetIdStatic()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;{</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Arm/Cl/ImportTensorHandleFactory&quot;</span>;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a79d362f0c6e04d51807e0d81b5b05f3a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a79d362f0c6e04d51807e0d81b5b05f3a">&#9670;&nbsp;</a></span>ClInstanceNormalizationWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClInstanceNormalizationWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_instance_normalization_descriptor.xhtml">InstanceNormalizationDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_instance_normalization_workload_8cpp_source.xhtml#l00018">18</a> of file <a class="el" href="_cl_instance_normalization_workload_8cpp_source.xhtml">ClInstanceNormalizationWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01006">ClLayerSupport::IsInstanceNormalizationSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;{</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keywordflow">return</span> arm_compute::CLInstanceNormalizationLayer::validate(&amp;aclInputInfo,</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; &amp;aclOutputInfo,</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; descriptor.m_Gamma,</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; descriptor.m_Beta,</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; descriptor.m_Eps);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="aef334cdb24000c330f4d2e5f1b384784"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aef334cdb24000c330f4d2e5f1b384784">&#9670;&nbsp;</a></span>ClL2NormalizationWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClL2NormalizationWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_l2_normalization_descriptor.xhtml">L2NormalizationDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_l2_normalization_float_workload_8cpp_source.xhtml#l00017">17</a> of file <a class="el" href="_cl_l2_normalization_float_workload_8cpp_source.xhtml">ClL2NormalizationFloatWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01018">ClLayerSupport::IsL2NormalizationSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;{</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keywordtype">int</span> axis = (descriptor.m_DataLayout == DataLayout::NCHW) ? 2 : 0;</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keywordflow">return</span> arm_compute::CLL2NormalizeLayer::validate(&amp;aclInput, &amp;aclOutput, axis, descriptor.m_Eps);</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a7900acef495ac8033a08d3ed74f06970"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7900acef495ac8033a08d3ed74f06970">&#9670;&nbsp;</a></span>ClLogicalAndWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClLogicalAndWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input0</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_logical_and_workload_8cpp_source.xhtml#l00020">20</a> of file <a class="el" href="_cl_logical_and_workload_8cpp_source.xhtml">ClLogicalAndWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01030">ClLayerSupport::IsLogicalBinarySupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;{</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo0 = BuildArmComputeTensorInfo(input0);</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo1 = BuildArmComputeTensorInfo(input1);</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::CLLogicalAnd::validate(&amp;aclInputInfo0,</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; &amp;aclInputInfo1,</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; &amp;aclOutputInfo);</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keywordflow">return</span> aclStatus;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70b"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">armnn::Status</a></div><div class="ttdeci">Status</div><div class="ttdoc">enumeration </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00029">Types.hpp:29</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ace776a194a715c709136a9966ada1a48"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ace776a194a715c709136a9966ada1a48">&#9670;&nbsp;</a></span>ClLogicalNotWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClLogicalNotWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_logical_not_workload_8cpp_source.xhtml#l00020">20</a> of file <a class="el" href="_cl_logical_not_workload_8cpp_source.xhtml">ClLogicalNotWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00900">ClLayerSupport::IsElementwiseUnarySupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;{</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::CLLogicalNot::validate(&amp;aclInputInfo,</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; &amp;aclOutputInfo);</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keywordflow">return</span> aclStatus;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70b"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">armnn::Status</a></div><div class="ttdeci">Status</div><div class="ttdoc">enumeration </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00029">Types.hpp:29</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a89391e63f7a679b023e6bd1798186db6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a89391e63f7a679b023e6bd1798186db6">&#9670;&nbsp;</a></span>ClLogicalOrWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClLogicalOrWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input0</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_logical_or_workload_8cpp_source.xhtml#l00020">20</a> of file <a class="el" href="_cl_logical_or_workload_8cpp_source.xhtml">ClLogicalOrWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01030">ClLayerSupport::IsLogicalBinarySupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;{</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo0 = BuildArmComputeTensorInfo(input0);</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo1 = BuildArmComputeTensorInfo(input1);</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::CLLogicalOr::validate(&amp;aclInputInfo0,</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; &amp;aclInputInfo1,</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; &amp;aclOutputInfo);</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keywordflow">return</span> aclStatus;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70b"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">armnn::Status</a></div><div class="ttdeci">Status</div><div class="ttdoc">enumeration </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00029">Types.hpp:29</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a7071f5d6693d3014ddcb34c886ffc734"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7071f5d6693d3014ddcb34c886ffc734">&#9670;&nbsp;</a></span>ClLogSoftmaxWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClLogSoftmaxWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="namespacearmnn.xhtml#ac14705405cbcdd580df613de6766fe65">LogSoftmaxDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_log_softmax_workload_8cpp_source.xhtml#l00017">17</a> of file <a class="el" href="_cl_log_softmax_workload_8cpp_source.xhtml">ClLogSoftmaxWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01058">ClLayerSupport::IsLogSoftmaxSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;{</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keywordtype">int</span> aclAxis = <a class="code" href="namespacearmnn.xhtml#a44a3b98b37a25c995aa9e4dae7d7b456">ComputeAclAxis</a>(descriptor.m_Axis, input);</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keywordflow">return</span> arm_compute::CLLogSoftmaxLayer::validate(&amp;aclInputInfo, &amp;aclOutputInfo, descriptor.m_Beta, aclAxis);</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a44a3b98b37a25c995aa9e4dae7d7b456"><div class="ttname"><a href="namespacearmnn.xhtml#a44a3b98b37a25c995aa9e4dae7d7b456">armnn::ComputeAclAxis</a></div><div class="ttdeci">int ComputeAclAxis(const int &amp;armnnAxis, const armnn::TensorInfo &amp;tensor)</div><div class="ttdoc">Function to convert ArmNN axis (left to right) to ACL axis (right to left) ranging from [-rank...</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.xhtml#l00240">ArmComputeUtils.hpp:240</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a64806be3c31d35b75546da7c6b6b46d0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a64806be3c31d35b75546da7c6b6b46d0">&#9670;&nbsp;</a></span>ClLogWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClLogWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_log_workload_8cpp_source.xhtml#l00018">18</a> of file <a class="el" href="_cl_log_workload_8cpp_source.xhtml">ClLogWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00900">ClLayerSupport::IsElementwiseUnarySupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;{</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordflow">return</span> arm_compute::CLLogLayer::validate(&amp;aclInput, &amp;aclOutput);</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a90ab88fe4c7aa9466c4653404a6b2213"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a90ab88fe4c7aa9466c4653404a6b2213">&#9670;&nbsp;</a></span>ClLstmFloatWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClLstmFloatWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>outputStateIn</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>cellStateIn</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>scratchBuffer</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>outputStateOut</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>cellStateOut</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_lstm_descriptor.xhtml">LstmDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_lstm_input_params_info.xhtml">LstmInputParamsInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>paramsInfo</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_lstm_float_workload_8cpp_source.xhtml#l00270">270</a> of file <a class="el" href="_cl_lstm_float_workload_8cpp_source.xhtml">ClLstmFloatWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01070">ClLayerSupport::IsLstmSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160;{</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; arm_compute::LSTMParams&lt;arm_compute::ITensorInfo&gt; lstm_params_info;</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160;</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="comment">// The inputs and the outputs</span></div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateInInfo = BuildArmComputeTensorInfo(outputStateIn);</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateInInfo = BuildArmComputeTensorInfo(cellStateIn);</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclScratchBufferInfo = BuildArmComputeTensorInfo(scratchBuffer);</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateOutInfo = BuildArmComputeTensorInfo(outputStateOut);</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateOutInfo = BuildArmComputeTensorInfo(cellStateOut);</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160;</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="comment">// Basic parameters</span></div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToForgetWeightsInfo</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToForgetWeights());</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToCellWeightsInfo</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToCellWeights());</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToOutputWeightsInfo</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToOutputWeights());</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToForgetWeightsInfo</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToForgetWeights());</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToCellWeightsInfo</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToCellWeights());</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToOutputWeightsInfo</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToOutputWeights());</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclForgetGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetForgetGateBias());</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellBias());</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetOutputGateBias());</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160;</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; arm_compute::TensorInfo aclInputToInputWeightsInfo;</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; arm_compute::TensorInfo aclRecurrentToInputWeightsInfo;</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; arm_compute::TensorInfo aclCellToInputWeightsInfo;</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; arm_compute::TensorInfo aclInputGateBiasInfo;</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; arm_compute::TensorInfo aclProjectionWeightsInfo;</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; arm_compute::TensorInfo aclProjectionBiasInfo;</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; arm_compute::TensorInfo aclCellToForgetWeightsInfo;</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; arm_compute::TensorInfo aclCellToOutputWeightsInfo;</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; arm_compute::TensorInfo aclInputLayerNormWeightsInfo;</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; arm_compute::TensorInfo aclForgetLayerNormWeightsInfo;</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; arm_compute::TensorInfo aclCellLayerNormWeightsInfo;</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; arm_compute::TensorInfo aclOutputLayerNormWeightsInfo;</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160;</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; {</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; aclInputToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputToInputWeights());</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; aclRecurrentToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToInputWeights());</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160;</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="keywordflow">if</span> (paramsInfo.m_CellToInputWeights != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; {</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; aclCellToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToInputWeights());</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; }</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; aclInputGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputGateBias());</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; lstm_params_info.set_cifg_params(&amp;aclInputToInputWeightsInfo, &amp;aclRecurrentToInputWeightsInfo,</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; paramsInfo.m_CellToInputWeights != <span class="keyword">nullptr</span> ?</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; &amp;aclCellToInputWeightsInfo: <span class="keyword">nullptr</span>,</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; &amp;aclInputGateBiasInfo);</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; }</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160;</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="keywordflow">if</span> (descriptor.m_ProjectionEnabled)</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; {</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; aclProjectionWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionWeights());</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160;</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <span class="keywordflow">if</span> (paramsInfo.m_ProjectionBias != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; {</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; aclProjectionBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputGateBias());</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; }</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; lstm_params_info.set_projection_params(&amp;aclProjectionWeightsInfo,</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; paramsInfo.m_ProjectionBias != <span class="keyword">nullptr</span> ?</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; &amp;aclProjectionBiasInfo: <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; }</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160;</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; {</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; aclCellToForgetWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToForgetWeights());</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; aclCellToOutputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToOutputWeights());</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; lstm_params_info.set_peephole_params(&amp;aclCellToForgetWeightsInfo, &amp;aclCellToOutputWeightsInfo);</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; }</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160;</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <span class="keywordtype">float</span> cell_threshold = descriptor.m_ClippingThresCell;</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="keywordtype">float</span> projection_threshold = descriptor.m_ClippingThresProj;</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160;</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="comment">// for preparing the object for the class ActivationLayerInfo, we need to consider 5 situations</span></div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; arm_compute::ActivationLayerInfo activationLayerInfo;</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="keywordflow">if</span> (descriptor.m_ActivationFunc == 0)</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; {</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="comment">// no activation, do nothing</span></div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; }</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (descriptor.m_ActivationFunc == 1)</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; {</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; activationLayerInfo = arm_compute::ActivationLayerInfo(</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; arm_compute::ActivationLayerInfo::ActivationFunction::RELU);</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; }</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (descriptor.m_ActivationFunc == 3)</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; {</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; activationLayerInfo = arm_compute::ActivationLayerInfo(</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; arm_compute::ActivationLayerInfo::ActivationFunction::BOUNDED_RELU, 6.0);</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; }</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (descriptor.m_ActivationFunc == 4)</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; {</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; activationLayerInfo = arm_compute::ActivationLayerInfo(</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; arm_compute::ActivationLayerInfo::ActivationFunction::TANH, 1.0, 1.0);</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; }</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (descriptor.m_ActivationFunc == 6)</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; {</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; activationLayerInfo = arm_compute::ActivationLayerInfo(</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; arm_compute::ActivationLayerInfo::ActivationFunction::LOGISTIC);</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; }</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; {</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_exception.xhtml">armnn::Exception</a>(<span class="stringliteral">&quot;Wrong Type of Activation Function!&quot;</span>);</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; }</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160;</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <span class="keywordflow">if</span> (descriptor.m_LayerNormEnabled)</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; {</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; {</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; aclInputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputLayerNormWeights());</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; }</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160;</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; aclForgetLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetForgetLayerNormWeights());</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160;</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; aclCellLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellLayerNormWeights());</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160;</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; aclOutputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetOutputLayerNormWeights());</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160;</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; lstm_params_info.set_layer_normalization_params(descriptor.m_CifgEnabled ?</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="keyword">nullptr</span> : &amp;aclInputLayerNormWeightsInfo,</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; &amp;aclForgetLayerNormWeightsInfo,</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; &amp;aclCellLayerNormWeightsInfo,</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; &amp;aclOutputLayerNormWeightsInfo);</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; }</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160;</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <span class="keywordflow">return</span> arm_compute::CLLSTMLayer::validate(&amp;aclInputInfo, &amp;aclInputToForgetWeightsInfo,</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; &amp;aclInputToCellWeightsInfo,</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; &amp;aclInputToOutputWeightsInfo,</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; &amp;aclRecurrentToForgetWeightsInfo,</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; &amp;aclRecurrentToCellWeightsInfo,</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; &amp;aclRecurrentToOutputWeightsInfo,</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; &amp;aclForgetGateBiasInfo,</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; &amp;aclCellBiasInfo,</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; &amp;aclOutputGateBiasInfo,</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; &amp;aclOutputStateInInfo, &amp;aclCellStateInInfo,</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; &amp;aclScratchBufferInfo, &amp;aclOutputStateOutInfo,</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; &amp;aclCellStateOutInfo, &amp;aclOutputInfo,</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; lstm_params_info, activationLayerInfo,</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; cell_threshold, projection_threshold);</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_exception.xhtml">armnn::Exception</a></div><div class="ttdoc">Base class for all ArmNN exceptions so that users can filter to just those. </div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00046">Exceptions.hpp:46</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a553706c6338ffc52b0d916859f642587"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a553706c6338ffc52b0d916859f642587">&#9670;&nbsp;</a></span>ClMaximumWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClMaximumWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input0</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_maximum_workload_8cpp_source.xhtml#l00024">24</a> of file <a class="el" href="_cl_maximum_workload_8cpp_source.xhtml">ClMaximumWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01094">ClLayerSupport::IsMaximumSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;{</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput0Info = BuildArmComputeTensorInfo(input0);</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput1Info = BuildArmComputeTensorInfo(input1);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::CLElementwiseMax::validate(&amp;aclInput0Info,</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; &amp;aclInput1Info,</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; &amp;aclOutputInfo);</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">return</span> aclStatus;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70b"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">armnn::Status</a></div><div class="ttdeci">Status</div><div class="ttdoc">enumeration </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00029">Types.hpp:29</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a048a8ea8b1b39343a73ca7458024ea54"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a048a8ea8b1b39343a73ca7458024ea54">&#9670;&nbsp;</a></span>ClMeanValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClMeanValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_mean_descriptor.xhtml">MeanDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_mean_workload_8cpp_source.xhtml#l00017">17</a> of file <a class="el" href="_cl_mean_workload_8cpp_source.xhtml">ClMeanWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01106">ClLayerSupport::IsMeanSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;{</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <a class="code" href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> coords = BuildArmComputeReductionCoordinates(aclInputInfo.num_dimensions(),</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; input.GetNumDimensions(),</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; descriptor.m_Axis);</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keywordflow">return</span> arm_compute::CLReduceMean::validate(&amp;aclInputInfo, coords, descriptor.m_KeepDims, &amp;aclOutputInfo);</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ac6e86c1def7f674d3c4cb7f577874aa6"><div class="ttname"><a href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">armnn::Coordinates</a></div><div class="ttdeci">std::array&lt; unsigned int, MaxNumOfTensorDimensions &gt; Coordinates</div><div class="ttdef"><b>Definition:</b> <a href="_internal_types_8hpp_source.xhtml#l00015">InternalTypes.hpp:15</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a8c04c8e796a4fbec706df42ed9c27e4e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8c04c8e796a4fbec706df42ed9c27e4e">&#9670;&nbsp;</a></span>ClMinimumWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClMinimumWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input0</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_minimum_workload_8cpp_source.xhtml#l00024">24</a> of file <a class="el" href="_cl_minimum_workload_8cpp_source.xhtml">ClMinimumWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01118">ClLayerSupport::IsMinimumSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;{</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput0Info = BuildArmComputeTensorInfo(input0);</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput1Info = BuildArmComputeTensorInfo(input1);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::CLElementwiseMin::validate(&amp;aclInput0Info,</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; &amp;aclInput1Info,</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; &amp;aclOutputInfo);</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">return</span> aclStatus;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70b"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">armnn::Status</a></div><div class="ttdeci">Status</div><div class="ttdoc">enumeration </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00029">Types.hpp:29</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a9638165cb6c1baae3b2b5fd9f0f75201"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9638165cb6c1baae3b2b5fd9f0f75201">&#9670;&nbsp;</a></span>ClMultiplicationWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClMultiplicationWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input0</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> *&#160;</td>
+ <td class="paramname"><em>activationDescriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_multiplication_workload_8cpp_source.xhtml#l00018">18</a> of file <a class="el" href="_cl_multiplication_workload_8cpp_source.xhtml">ClMultiplicationWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01130">ClLayerSupport::IsMultiplicationSupported()</a>, and <a class="el" href="_cl_backend_8cpp_source.xhtml#l00276">ClBackend::OptimizeSubgraphView()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;{</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput1 = armcomputetensorutils::BuildArmComputeTensorInfo(input0);</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput2 = armcomputetensorutils::BuildArmComputeTensorInfo(input1);</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keyword">auto</span> convertPolicy = (<a class="code" href="namespacearmnn.xhtml#ad44c007f21af2d0375e3ef9400a1b275">IsQuantizedType</a>(input0.GetDataType()) || <a class="code" href="namespacearmnn.xhtml#ad44c007f21af2d0375e3ef9400a1b275">IsQuantizedType</a>(input1.GetDataType())) ?</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; arm_compute::ConvertPolicy::SATURATE :</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; arm_compute::ConvertPolicy::WRAP;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationInfo = <a class="code" href="namespacearmnn.xhtml#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; activationDescriptor);</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="comment">// At the time of writing, configure() will fail if a rounding policy other than TO_ZERO is supplied to it,</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="comment">// when providing a scale of 1.0 for F32 tensors, even though the provided rounding policy appears to be</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="comment">// ignored for F32 tensors.</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">return</span> arm_compute::CLPixelWiseMultiplication::validate(&amp;aclInput1,</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; &amp;aclInput2,</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; &amp;aclOutput,</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; 1.0f,</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; convertPolicy,</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; arm_compute::RoundingPolicy::TO_ZERO,</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; activationInfo);</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ad44c007f21af2d0375e3ef9400a1b275"><div class="ttname"><a href="namespacearmnn.xhtml#ad44c007f21af2d0375e3ef9400a1b275">armnn::IsQuantizedType</a></div><div class="ttdeci">constexpr bool IsQuantizedType()</div><div class="ttdef"><b>Definition:</b> <a href="_types_utils_8hpp_source.xhtml#l00280">TypesUtils.hpp:280</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad701d0d29baa4266ab4d33b090aa661c"><div class="ttname"><a href="namespacearmnn.xhtml#ad701d0d29baa4266ab4d33b090aa661c">armnn::ConvertActivationDescriptorToAclActivationLayerInfo</a></div><div class="ttdeci">arm_compute::ActivationLayerInfo ConvertActivationDescriptorToAclActivationLayerInfo(const ActivationDescriptor &amp;actDesc)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.xhtml#l00085">ArmComputeUtils.hpp:85</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a66a3a6c05b38e48508bbbb3f32023ab7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a66a3a6c05b38e48508bbbb3f32023ab7">&#9670;&nbsp;</a></span>ClNegWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClNegWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_neg_workload_8cpp_source.xhtml#l00018">18</a> of file <a class="el" href="_cl_neg_workload_8cpp_source.xhtml">ClNegWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00900">ClLayerSupport::IsElementwiseUnarySupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;{</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordflow">return</span> arm_compute::CLNegLayer::validate(&amp;aclInput, &amp;aclOutput);</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a144c2e243a255715f309999077ed1792"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a144c2e243a255715f309999077ed1792">&#9670;&nbsp;</a></span>ClNormalizationWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClNormalizationWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_normalization_descriptor.xhtml">NormalizationDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_normalization_float_workload_8cpp_source.xhtml#l00019">19</a> of file <a class="el" href="_cl_normalization_float_workload_8cpp_source.xhtml">ClNormalizationFloatWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01143">ClLayerSupport::IsNormalizationSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;{</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; arm_compute::NormalizationLayerInfo layerInfo = BuildArmComputeNormalizationLayerInfo(descriptor);</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keywordflow">return</span> arm_compute::CLNormalizationLayer::validate(&amp;aclInputInfo, &amp;aclOutputInfo, layerInfo);</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="adcf7b7d939bac1cfaeb333c7b3175bb8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adcf7b7d939bac1cfaeb333c7b3175bb8">&#9670;&nbsp;</a></span>ClPadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClPadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_pad_descriptor.xhtml">PadDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_pad_workload_8cpp_source.xhtml#l00062">62</a> of file <a class="el" href="_cl_pad_workload_8cpp_source.xhtml">ClPadWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01157">ClLayerSupport::IsPadSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;{</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; std::vector&lt;std::pair&lt;unsigned int, unsigned int&gt;&gt; reversed_PadList(descriptor.m_PadList.size());</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; std::reverse_copy(std::begin(descriptor.m_PadList),</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; std::end(descriptor.m_PadList),</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; std::begin(reversed_PadList));</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; arm_compute::PaddingList padList = <span class="keyword">static_cast&lt;</span>arm_compute::PaddingList<span class="keyword">&gt;</span>(reversed_PadList);</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="comment">// PixelValue is currently unused when validating, but it&#39;s required to pass in PaddingMode.</span></div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; arm_compute::PixelValue pixelValue = GetPixelValue(&amp;aclInputInfo, descriptor.m_PadValue);</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus =</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; arm_compute::CLPadLayer::validate(&amp;aclInputInfo,</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; &amp;aclOutputInfo,</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; padList,</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; pixelValue,</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <a class="code" href="namespacearmnn.xhtml#adf5a024ace0dbe2af2d5b1a1b9623771">ConvertPaddingModeToAcl</a>(descriptor.m_PaddingMode));</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordflow">return</span> aclStatus;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70b"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">armnn::Status</a></div><div class="ttdeci">Status</div><div class="ttdoc">enumeration </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00029">Types.hpp:29</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_adf5a024ace0dbe2af2d5b1a1b9623771"><div class="ttname"><a href="namespacearmnn.xhtml#adf5a024ace0dbe2af2d5b1a1b9623771">armnn::ConvertPaddingModeToAcl</a></div><div class="ttdeci">arm_compute::PaddingMode ConvertPaddingModeToAcl(const PaddingMode &amp;paddingMode)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.xhtml#l00303">ArmComputeUtils.hpp:303</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a26c25df9e2271333ab4d4ef71db41dca"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a26c25df9e2271333ab4d4ef71db41dca">&#9670;&nbsp;</a></span>ClPermuteWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClPermuteWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_permute_descriptor.xhtml">PermuteDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_permute_workload_8cpp_source.xhtml#l00017">17</a> of file <a class="el" href="_cl_permute_workload_8cpp_source.xhtml">ClPermuteWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01169">ClLayerSupport::IsPermuteSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;{</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_permutation_vector.xhtml">armnn::PermutationVector</a>&amp; mappings = descriptor.m_DimMappings;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keywordflow">return</span> arm_compute::CLPermute::validate(&amp;aclInputInfo, &amp;aclOutputInfo,</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; armcomputetensorutils::BuildArmComputePermutationVector(mappings));</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_permutation_vector_xhtml"><div class="ttname"><a href="classarmnn_1_1_permutation_vector.xhtml">armnn::PermutationVector</a></div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00282">Types.hpp:282</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a8a21bb33f7f054ce7b48a8c7df9e6d4a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8a21bb33f7f054ce7b48a8c7df9e6d4a">&#9670;&nbsp;</a></span>ClPooling2dWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClPooling2dWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_pooling2d_descriptor.xhtml">Pooling2dDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_pooling2d_workload_8cpp_source.xhtml#l00018">18</a> of file <a class="el" href="_cl_pooling2d_workload_8cpp_source.xhtml">ClPooling2dWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01177">ClLayerSupport::IsPooling2dSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;{</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; arm_compute::PoolingLayerInfo layerInfo = BuildArmComputePoolingLayerInfo(descriptor);</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keywordflow">return</span> arm_compute::CLPoolingLayer::validate(&amp;aclInputInfo, &amp;aclOutputInfo, layerInfo);</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="ae58d1f4437a779274037bc86efac9e26"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae58d1f4437a779274037bc86efac9e26">&#9670;&nbsp;</a></span>ClPreluWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClPreluWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>alpha</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_prelu_workload_8cpp_source.xhtml#l00016">16</a> of file <a class="el" href="_cl_prelu_workload_8cpp_source.xhtml">ClPreluWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01185">ClLayerSupport::IsPreluSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;{</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclAlpha = armcomputetensorutils::BuildArmComputeTensorInfo(alpha);</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keywordflow">return</span> arm_compute::CLPReluLayer::validate(&amp;aclInput,</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; &amp;aclAlpha,</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; &amp;aclOutput);</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a8cdb508cb0ebc06e39dc1661815d73b0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8cdb508cb0ebc06e39dc1661815d73b0">&#9670;&nbsp;</a></span>ClQLstmWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClQLstmWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>cellStateIn</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>outputStateIn</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>cellStateOut</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>outputStateOut</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_q_lstm_descriptor.xhtml">QLstmDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_lstm_input_params_info.xhtml">LstmInputParamsInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>paramsInfo</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_q_lstm_workload_8cpp_source.xhtml#l00247">247</a> of file <a class="el" href="_cl_q_lstm_workload_8cpp_source.xhtml">ClQLstmWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01193">ClLayerSupport::IsQLstmSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;{</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; arm_compute::LSTMParams&lt;arm_compute::ITensorInfo&gt; aclParamsInfo;</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="comment">// Input/Output tensor info</span></div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateInInfo = BuildArmComputeTensorInfo(outputStateIn);</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateInInfo = BuildArmComputeTensorInfo(cellStateIn);</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160;</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateOutInfo = BuildArmComputeTensorInfo(outputStateOut);</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateOutInfo = BuildArmComputeTensorInfo(cellStateOut);</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <span class="comment">// Mandatory tensor info</span></div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToForgetWeightsInfo</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToForgetWeights());</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToCellWeightsInfo</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToCellWeights());</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToOutputWeightsInfo</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToOutputWeights());</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToForgetWeightsInfo</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToForgetWeights());</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToCellWeightsInfo</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToCellWeights());</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToOutputWeightsInfo</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToOutputWeights());</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclForgetGateBiasInfo</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetForgetGateBias());</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellBiasInfo</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetCellBias());</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputGateBiasInfo</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetOutputGateBias());</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160;</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="comment">// Optional tensor info</span></div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; arm_compute::TensorInfo aclInputToInputWeightsInfo;</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; arm_compute::TensorInfo aclRecurrentToInputWeightsInfo;</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160;</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; arm_compute::TensorInfo aclCellToInputWeightsInfo;</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; arm_compute::TensorInfo aclCellToForgetWeightsInfo;</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; arm_compute::TensorInfo aclCellToOutputWeightsInfo;</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160;</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; arm_compute::TensorInfo aclInputGateBiasInfo;</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160;</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; arm_compute::TensorInfo aclProjectionWeightsInfo;</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; arm_compute::TensorInfo aclProjectionBiasInfo;</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160;</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; arm_compute::TensorInfo aclInputLayerNormWeightsInfo;</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; arm_compute::TensorInfo aclForgetLayerNormWeightsInfo;</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; arm_compute::TensorInfo aclCellLayerNormWeightsInfo;</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; arm_compute::TensorInfo aclOutputLayerNormWeightsInfo;</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160;</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="comment">// Create tensor info for optional params if they are enabled</span></div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; {</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; {</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; aclCellToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToInputWeights());</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; }</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160;</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; aclCellToForgetWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToForgetWeights());</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; aclCellToOutputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToOutputWeights());</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160;</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="comment">// Set peephole params info</span></div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; aclParamsInfo.set_peephole_params(&amp;aclCellToForgetWeightsInfo,</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; &amp;aclCellToOutputWeightsInfo);</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; }</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160;</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="keywordflow">if</span> (descriptor.m_ProjectionEnabled)</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; {</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; aclProjectionWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionWeights());</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160;</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="keywordflow">if</span> (paramsInfo.m_ProjectionBias != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; {</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; aclProjectionBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionBias());</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; }</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="comment">// Set projection params info</span></div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; aclParamsInfo.set_projection_params(</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; &amp;aclProjectionWeightsInfo,</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; paramsInfo.m_ProjectionBias != <span class="keyword">nullptr</span> ? &amp;aclProjectionBiasInfo : <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; }</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160;</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keywordflow">if</span> (descriptor.m_LayerNormEnabled)</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; {</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; {</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; aclInputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputLayerNormWeights());</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; }</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160;</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; aclForgetLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetForgetLayerNormWeights());</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; aclCellLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellLayerNormWeights());</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; aclOutputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetOutputLayerNormWeights());</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160;</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <span class="comment">// Set layer norm params info</span></div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; aclParamsInfo.set_layer_normalization_params(</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; paramsInfo.m_InputLayerNormWeights != <span class="keyword">nullptr</span> ? &amp;aclInputLayerNormWeightsInfo : <span class="keyword">nullptr</span>,</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; &amp;aclForgetLayerNormWeightsInfo,</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; &amp;aclCellLayerNormWeightsInfo,</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; &amp;aclOutputLayerNormWeightsInfo);</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; }</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160;</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; {</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; aclInputToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputToInputWeights());</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; aclRecurrentToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToInputWeights());</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; aclInputGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputGateBias());</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160;</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="comment">// Set CIFG params info</span></div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; aclParamsInfo.set_cifg_params(</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; &amp;aclInputToInputWeightsInfo,</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; &amp;aclRecurrentToInputWeightsInfo,</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; paramsInfo.m_CellToInputWeights != <span class="keyword">nullptr</span> ? &amp;aclCellToInputWeightsInfo : <span class="keyword">nullptr</span>,</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; &amp;aclInputGateBiasInfo);</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; }</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160;</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <span class="comment">// Set scalar descriptor params</span></div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; aclParamsInfo.set_cell_clip_params(descriptor.m_CellClip);</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; aclParamsInfo.set_projection_clip_params(descriptor.m_ProjectionClip);</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; aclParamsInfo.set_hidden_state_params(descriptor.m_HiddenStateZeroPoint, descriptor.m_HiddenStateScale);</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; aclParamsInfo.set_matmul_scale_params(descriptor.m_InputIntermediateScale,</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; descriptor.m_ForgetIntermediateScale,</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; descriptor.m_CellIntermediateScale,</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; descriptor.m_OutputIntermediateScale);</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160;</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="comment">// QLSTM CL validate</span></div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <span class="keywordflow">return</span> arm_compute::CLQLSTMLayer::validate(&amp;aclInputInfo,</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; &amp;aclInputToForgetWeightsInfo,</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; &amp;aclInputToCellWeightsInfo,</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; &amp;aclInputToOutputWeightsInfo,</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; &amp;aclRecurrentToForgetWeightsInfo,</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; &amp;aclRecurrentToCellWeightsInfo,</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; &amp;aclRecurrentToOutputWeightsInfo,</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; &amp;aclForgetGateBiasInfo,</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; &amp;aclCellBiasInfo,</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; &amp;aclOutputGateBiasInfo,</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; &amp;aclCellStateInInfo,</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; &amp;aclOutputStateInInfo,</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; &amp;aclCellStateOutInfo,</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; &amp;aclOutputStateOutInfo,</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; &amp;aclOutputInfo,</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; aclParamsInfo);</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a5fb7fe07abfb2373103d842b47a24726"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5fb7fe07abfb2373103d842b47a24726">&#9670;&nbsp;</a></span>ClQuantizedLstmWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClQuantizedLstmWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>previousCellStateIn</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>previousOutputIn</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>cellStateOut</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_quantized_lstm_input_params_info.xhtml">QuantizedLstmInputParamsInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>paramsInfo</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_quantized_lstm_workload_8cpp_source.xhtml#l00018">18</a> of file <a class="el" href="_cl_quantized_lstm_workload_8cpp_source.xhtml">ClQuantizedLstmWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01227">ClLayerSupport::IsQuantizedLstmSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;{</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="comment">// Inputs</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclPreviousCellStateInInfo = BuildArmComputeTensorInfo(previousCellStateIn);</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclPreviousOutputInInfo = BuildArmComputeTensorInfo(previousOutputIn);</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="comment">// Outputs</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateOutInfo = BuildArmComputeTensorInfo(cellStateOut);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="comment">// Basic parameters</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToInputWeightsInfo</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToInputWeights());</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToForgetWeightsInfo</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToForgetWeights());</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToCellWeightsInfo</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToCellWeights());</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToOutputWeightsInfo</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToOutputWeights());</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToInputWeightsInfo</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToInputWeights());</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToForgetWeightsInfo</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToForgetWeights());</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToCellWeightsInfo</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToCellWeights());</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToOutputWeightsInfo</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToOutputWeights());</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputGateBias());</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclForgetGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetForgetGateBias());</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellBias());</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetOutputGateBias());</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordflow">return</span> arm_compute::CLLSTMLayerQuantized::validate(&amp;aclInputInfo, &amp;aclInputToInputWeightsInfo,</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; &amp;aclInputToForgetWeightsInfo, &amp;aclInputToCellWeightsInfo,</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; &amp;aclInputToOutputWeightsInfo, &amp;aclRecurrentToInputWeightsInfo,</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; &amp;aclRecurrentToForgetWeightsInfo, &amp;aclRecurrentToCellWeightsInfo,</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; &amp;aclRecurrentToOutputWeightsInfo, &amp;aclInputGateBiasInfo,</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; &amp;aclForgetGateBiasInfo, &amp;aclCellBiasInfo, &amp;aclOutputGateBiasInfo,</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; &amp;aclPreviousCellStateInInfo, &amp;aclPreviousOutputInInfo,</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; &amp;aclCellStateOutInfo, &amp;aclOutputInfo);</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a9c1b478e30a1e8a4ecac874cf15f13d4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9c1b478e30a1e8a4ecac874cf15f13d4">&#9670;&nbsp;</a></span>ClQuantizeWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClQuantizeWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_quantize_workload_8cpp_source.xhtml#l00022">22</a> of file <a class="el" href="_cl_quantize_workload_8cpp_source.xhtml">ClQuantizeWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01245">ClLayerSupport::IsQuantizeSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;{</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keywordflow">return</span> arm_compute::CLQuantizationLayer::validate(&amp;aclInputInfo,</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; &amp;aclOutputInfo);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a4c42dfd9db4a47e470b5800bb11a8374"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4c42dfd9db4a47e470b5800bb11a8374">&#9670;&nbsp;</a></span>ClReduceWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClReduceWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_reduce_descriptor.xhtml">ReduceDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_reduce_workload_8cpp_source.xhtml#l00018">18</a> of file <a class="el" href="_cl_reduce_workload_8cpp_source.xhtml">ClReduceWorkload.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_descriptors_8hpp_source.xhtml#l01501">ReduceDescriptor::m_vAxis</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01255">ClLayerSupport::IsReduceSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;{</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keywordflow">if</span> (descriptor.m_vAxis.size() == 1 || descriptor.m_vAxis.empty())</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; {</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <a class="code" href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> coords = BuildArmComputeReductionCoordinates(aclInputInfo.num_dimensions(),</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; input.GetNumDimensions(),</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; descriptor.m_vAxis);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keywordflow">return</span> arm_compute::CLReductionOperation::validate(&amp;aclInputInfo,</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; &amp;aclOutputInfo,</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; static_cast&lt;unsigned int&gt;(coords[0]),</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <a class="code" href="namespacearmnn.xhtml#a03ab984d93d0f240f31274499b72e6b0">ConvertReductionOperationToAcl</a>(descriptor),</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; descriptor.m_KeepDims);</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; }</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; {</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="comment">// Validate layer if there are multiple axes.</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> status;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <a class="code" href="_arm_compute_utils_8hpp.xhtml#a97d67174b2c48969547ba4bac79e5ea2">IS_MULTI_AXES_REDUCE_SUPPORTED</a>(<a class="code" href="namespacearmnn.xhtml#a4c42dfd9db4a47e470b5800bb11a8374">ClReduceWorkloadValidate</a>, input, descriptor, status);</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">return</span> status;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; }</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;}</div><div class="ttc" id="_arm_compute_utils_8hpp_xhtml_a97d67174b2c48969547ba4bac79e5ea2"><div class="ttname"><a href="_arm_compute_utils_8hpp.xhtml#a97d67174b2c48969547ba4bac79e5ea2">IS_MULTI_AXES_REDUCE_SUPPORTED</a></div><div class="ttdeci">#define IS_MULTI_AXES_REDUCE_SUPPORTED(func, input, desc, status)</div><div class="ttdoc">Macro function check if layer with multiple axes is supported on each backend. </div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.xhtml#l00381">ArmComputeUtils.hpp:381</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ac6e86c1def7f674d3c4cb7f577874aa6"><div class="ttname"><a href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">armnn::Coordinates</a></div><div class="ttdeci">std::array&lt; unsigned int, MaxNumOfTensorDimensions &gt; Coordinates</div><div class="ttdef"><b>Definition:</b> <a href="_internal_types_8hpp_source.xhtml#l00015">InternalTypes.hpp:15</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a03ab984d93d0f240f31274499b72e6b0"><div class="ttname"><a href="namespacearmnn.xhtml#a03ab984d93d0f240f31274499b72e6b0">armnn::ConvertReductionOperationToAcl</a></div><div class="ttdeci">arm_compute::ReductionOperation ConvertReductionOperationToAcl(const ReduceDescriptor &amp;descriptor)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.xhtml#l00314">ArmComputeUtils.hpp:314</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70b"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">armnn::Status</a></div><div class="ttdeci">Status</div><div class="ttdoc">enumeration </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00029">Types.hpp:29</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a4c42dfd9db4a47e470b5800bb11a8374"><div class="ttname"><a href="namespacearmnn.xhtml#a4c42dfd9db4a47e470b5800bb11a8374">armnn::ClReduceWorkloadValidate</a></div><div class="ttdeci">arm_compute::Status ClReduceWorkloadValidate(const TensorInfo &amp;input, const TensorInfo &amp;output, const ReduceDescriptor &amp;descriptor)</div><div class="ttdef"><b>Definition:</b> <a href="_cl_reduce_workload_8cpp_source.xhtml#l00018">ClReduceWorkload.cpp:18</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="af5bb7a834a74983cbbc249785d0c392b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af5bb7a834a74983cbbc249785d0c392b">&#9670;&nbsp;</a></span>ClReshapeWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClReshapeWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_reshape_workload_8cpp_source.xhtml#l00015">15</a> of file <a class="el" href="_cl_reshape_workload_8cpp_source.xhtml">ClReshapeWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01267">ClLayerSupport::IsReshapeSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;{</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keywordflow">return</span> arm_compute::CLReshapeLayer::validate(&amp;aclInputInfo, &amp;aclOutputInfo);</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a95b187d3c6b7b46f4fbdc60be69fc02c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a95b187d3c6b7b46f4fbdc60be69fc02c">&#9670;&nbsp;</a></span>ClResizeWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClResizeWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_resize_descriptor.xhtml">ResizeDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_resize_workload_8cpp_source.xhtml#l00022">22</a> of file <a class="el" href="_cl_resize_workload_8cpp_source.xhtml">ClResizeWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01276">ClLayerSupport::IsResizeSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;{</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">arm_compute::DataLayout</a> aclDataLayout = ConvertDataLayout(descriptor.m_DataLayout);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; aclInputInfo.set_data_layout(aclDataLayout);</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; aclOutputInfo.set_data_layout(aclDataLayout);</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; arm_compute::InterpolationPolicy aclInterpolationPolicy =</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <a class="code" href="namespacearmnn.xhtml#ae9bdcb8ac91731109dc423d6ed476204">ConvertResizeMethodToAclInterpolationPolicy</a>(descriptor.m_Method);</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; arm_compute::SamplingPolicy samplingPolicy = descriptor.m_HalfPixelCenters ? arm_compute::SamplingPolicy::CENTER :</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; arm_compute::SamplingPolicy::TOP_LEFT;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">return</span> arm_compute::CLScale::validate(&amp;aclInputInfo,</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; &amp;aclOutputInfo,</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; arm_compute::ScaleKernelInfo(aclInterpolationPolicy,</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; arm_compute::BorderMode::REPLICATE,</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; arm_compute::PixelValue(0.f),</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; samplingPolicy,</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keyword">true</span>,</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; descriptor.m_AlignCorners));</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ae9bdcb8ac91731109dc423d6ed476204"><div class="ttname"><a href="namespacearmnn.xhtml#ae9bdcb8ac91731109dc423d6ed476204">armnn::ConvertResizeMethodToAclInterpolationPolicy</a></div><div class="ttdeci">arm_compute::InterpolationPolicy ConvertResizeMethodToAclInterpolationPolicy(ResizeMethod resizeMethod)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.xhtml#l00187">ArmComputeUtils.hpp:187</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a></div><div class="ttdeci">DataLayout</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00049">Types.hpp:49</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a3f6f9f0d3567ae04b49ea88727845900"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3f6f9f0d3567ae04b49ea88727845900">&#9670;&nbsp;</a></span>ClRsqrtWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClRsqrtWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_rsqrt_workload_8cpp_source.xhtml#l00018">18</a> of file <a class="el" href="_cl_rsqrt_workload_8cpp_source.xhtml">ClRsqrtWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00900">ClLayerSupport::IsElementwiseUnarySupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;{</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordflow">return</span> arm_compute::CLRsqrtLayer::validate(&amp;aclInput, &amp;aclOutput);</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="ac5cd8464c73415025cb8c8f6ada74e15"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac5cd8464c73415025cb8c8f6ada74e15">&#9670;&nbsp;</a></span>ClSinWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClSinWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_sin_workload_8cpp_source.xhtml#l00018">18</a> of file <a class="el" href="_cl_sin_workload_8cpp_source.xhtml">ClSinWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00900">ClLayerSupport::IsElementwiseUnarySupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;{</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordflow">return</span> arm_compute::CLSinLayer::validate(&amp;aclInput, &amp;aclOutput);</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a6d85d2806d0a90140832ad8113c1d350"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6d85d2806d0a90140832ad8113c1d350">&#9670;&nbsp;</a></span>ClSliceWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClSliceWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_slice_descriptor.xhtml">SliceDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_slice_workload_8cpp_source.xhtml#l00018">18</a> of file <a class="el" href="_cl_slice_workload_8cpp_source.xhtml">ClSliceWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01284">ClLayerSupport::IsSliceSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;{</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <a class="code" href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> starts;</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <a class="code" href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> ends;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; std::tie(starts, ends) = <a class="code" href="namespacearmnn.xhtml#a460e01ad4cd0bfa6bde4eccaf0e77220">SetClSliceData</a>(descriptor.m_Begin, descriptor.m_Size);</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordflow">return</span> arm_compute::CLSlice::validate(&amp;aclInput, &amp;aclOutput, starts, ends);</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ac6e86c1def7f674d3c4cb7f577874aa6"><div class="ttname"><a href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">armnn::Coordinates</a></div><div class="ttdeci">std::array&lt; unsigned int, MaxNumOfTensorDimensions &gt; Coordinates</div><div class="ttdef"><b>Definition:</b> <a href="_internal_types_8hpp_source.xhtml#l00015">InternalTypes.hpp:15</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a460e01ad4cd0bfa6bde4eccaf0e77220"><div class="ttname"><a href="namespacearmnn.xhtml#a460e01ad4cd0bfa6bde4eccaf0e77220">armnn::SetClSliceData</a></div><div class="ttdeci">auto SetClSliceData(const std::vector&lt; unsigned int &gt; &amp;m_begin, const std::vector&lt; unsigned int &gt; &amp;m_size)</div><div class="ttdef"><b>Definition:</b> <a href="_cl_workload_utils_8hpp_source.xhtml#l00091">ClWorkloadUtils.hpp:91</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="abc6f7e5fe77e5aed3f7842755dd34073"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abc6f7e5fe77e5aed3f7842755dd34073">&#9670;&nbsp;</a></span>ClSoftmaxWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClSoftmaxWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_softmax_descriptor.xhtml">SoftmaxDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_softmax_workload_8cpp_source.xhtml#l00017">17</a> of file <a class="el" href="_cl_softmax_workload_8cpp_source.xhtml">ClSoftmaxWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01292">ClLayerSupport::IsSoftmaxSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;{</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keywordtype">int</span> aclAxis = <a class="code" href="namespacearmnn.xhtml#a44a3b98b37a25c995aa9e4dae7d7b456">ComputeAclAxis</a>(descriptor.m_Axis, input);</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keywordflow">return</span> arm_compute::CLSoftmaxLayer::validate(&amp;aclInputInfo, &amp;aclOutputInfo, descriptor.m_Beta, aclAxis);</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a44a3b98b37a25c995aa9e4dae7d7b456"><div class="ttname"><a href="namespacearmnn.xhtml#a44a3b98b37a25c995aa9e4dae7d7b456">armnn::ComputeAclAxis</a></div><div class="ttdeci">int ComputeAclAxis(const int &amp;armnnAxis, const armnn::TensorInfo &amp;tensor)</div><div class="ttdoc">Function to convert ArmNN axis (left to right) to ACL axis (right to left) ranging from [-rank...</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.xhtml#l00240">ArmComputeUtils.hpp:240</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a534b28fd4b345bbc938d055ff5b8970f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a534b28fd4b345bbc938d055ff5b8970f">&#9670;&nbsp;</a></span>ClSpaceToBatchNdWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClSpaceToBatchNdWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_space_to_batch_nd_descriptor.xhtml">SpaceToBatchNdDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_space_to_batch_nd_workload_8cpp_source.xhtml#l00023">23</a> of file <a class="el" href="_cl_space_to_batch_nd_workload_8cpp_source.xhtml">ClSpaceToBatchNdWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01300">ClLayerSupport::IsSpaceToBatchNdSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;{</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="comment">// ArmNN blockShape is [H, W] Cl asks for W, H</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; int32_t blockHeight = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;int32_t&gt;(descriptor.m_BlockShape[0]);</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; int32_t blockWidth = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;int32_t&gt;(descriptor.m_BlockShape[1]);</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; arm_compute::Size2D paddingLeftTop = BuildArmComputeSize2D(</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; descriptor.m_PadList[1].first, descriptor.m_PadList[0].first);</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; arm_compute::Size2D paddingRightBottom = BuildArmComputeSize2D(</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; descriptor.m_PadList[1].second, descriptor.m_PadList[0].second);</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">return</span> arm_compute::CLSpaceToBatchLayer::validate(&amp;aclInputInfo,</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; blockWidth,</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; blockHeight,</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; paddingLeftTop,</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; paddingRightBottom,</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; &amp;aclOutputInfo);</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a375ca3cff9f1b005d1412dc5f3cf5b6e"><div class="ttname"><a href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a></div><div class="ttdeci">std::enable_if_t&lt; std::is_unsigned&lt; Source &gt;::value &amp;&amp;std::is_unsigned&lt; Dest &gt;::value, Dest &gt; numeric_cast(Source source)</div><div class="ttdef"><b>Definition:</b> <a href="_numeric_cast_8hpp_source.xhtml#l00035">NumericCast.hpp:35</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a4fa3292a277dde3b46be6a44b2de9713"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4fa3292a277dde3b46be6a44b2de9713">&#9670;&nbsp;</a></span>ClSpaceToDepthWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClSpaceToDepthWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_space_to_depth_descriptor.xhtml">SpaceToDepthDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_space_to_depth_workload_8cpp_source.xhtml#l00054">54</a> of file <a class="el" href="_cl_space_to_depth_workload_8cpp_source.xhtml">ClSpaceToDepthWorkload.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_descriptors_8hpp_source.xhtml#l01071">SpaceToDepthDescriptor::m_DataLayout</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01312">ClLayerSupport::IsSpaceToDepthSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;{</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> dataLayout = descriptor.m_DataLayout;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, dataLayout);</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; int32_t blockSize = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;int32_t&gt;(descriptor.m_BlockSize);</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, dataLayout);</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::CLSpaceToDepthLayer::validate(&amp;aclInputInfo,</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; &amp;aclOutputInfo,</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; blockSize);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">return</span> aclStatus;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a></div><div class="ttdeci">DataLayout</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00049">Types.hpp:49</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70b"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">armnn::Status</a></div><div class="ttdeci">Status</div><div class="ttdoc">enumeration </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00029">Types.hpp:29</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a375ca3cff9f1b005d1412dc5f3cf5b6e"><div class="ttname"><a href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a></div><div class="ttdeci">std::enable_if_t&lt; std::is_unsigned&lt; Source &gt;::value &amp;&amp;std::is_unsigned&lt; Dest &gt;::value, Dest &gt; numeric_cast(Source source)</div><div class="ttdef"><b>Definition:</b> <a href="_numeric_cast_8hpp_source.xhtml#l00035">NumericCast.hpp:35</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a3ac8a60f837b19b20987e4fd238ce0cd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3ac8a60f837b19b20987e4fd238ce0cd">&#9670;&nbsp;</a></span>ClSplitterWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClSplitterWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::vector&lt; std::reference_wrapper&lt; <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &gt;&gt; &amp;&#160;</td>
+ <td class="paramname"><em>outputs</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>splitAxis</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_splitter_workload_8cpp_source.xhtml#l00031">31</a> of file <a class="el" href="_cl_splitter_workload_8cpp_source.xhtml">ClSplitterWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01324">ClLayerSupport::IsSplitterSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;{</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordtype">size_t</span> numOutputs = outputs.size();</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; std::vector&lt;arm_compute::TensorInfo&gt; aclOutputs;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; aclOutputs.reserve(numOutputs);</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; std::vector&lt;arm_compute::ITensorInfo*&gt; aclOutputPtr;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; aclOutputPtr.reserve(numOutputs);</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0u; i &lt; outputs.size(); ++i)</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; {</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; aclOutputs.emplace_back(BuildArmComputeTensorInfo(outputs[i]));</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; aclOutputPtr.emplace_back(&amp;aclOutputs.back());</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; }</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> aclAxis = CalcAclAxis(input.GetNumDimensions(), splitAxis);</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordflow">return</span> arm_compute::CLSplit::validate(&amp;aclInputInfo, aclOutputPtr, aclAxis);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a8c9fec997dbb5db4cdb433c36d075782"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8c9fec997dbb5db4cdb433c36d075782">&#9670;&nbsp;</a></span>ClStackWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClStackWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const std::vector&lt; const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> *&gt; &amp;&#160;</td>
+ <td class="paramname"><em>inputs</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_stack_descriptor.xhtml">StackDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_stack_workload_8cpp_source.xhtml#l00029">29</a> of file <a class="el" href="_cl_stack_workload_8cpp_source.xhtml">ClStackWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01357">ClLayerSupport::IsStackSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;{</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; std::vector&lt;arm_compute::ITensorInfo*&gt; aclInputPtrs;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; arm_compute::TensorInfo aclInputInfo;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> TensorInfo* input : inputs)</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; {</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; aclInputInfo = BuildArmComputeTensorInfo(*input);</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; aclInputPtrs.emplace_back(&amp;aclInputInfo);</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; }</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordtype">int</span> aclAxis = CalcAxis(descriptor.m_Axis, descriptor.m_InputShape.GetNumDimensions());</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordflow">return</span> arm_compute::CLStackLayer::validate(aclInputPtrs, aclAxis, &amp;aclOutputInfo);</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a157e0508f6d6d08e3ca4cf6c661242e6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a157e0508f6d6d08e3ca4cf6c661242e6">&#9670;&nbsp;</a></span>ClStridedSliceWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClStridedSliceWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_strided_slice_descriptor.xhtml">StridedSliceDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_strided_slice_workload_8cpp_source.xhtml#l00027">27</a> of file <a class="el" href="_cl_strided_slice_workload_8cpp_source.xhtml">ClStridedSliceWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01369">ClLayerSupport::IsStridedSliceSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;{</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <a class="code" href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> starts;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <a class="code" href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> ends;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <a class="code" href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> strides;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; std::tie(starts, ends, strides) = <a class="code" href="namespacearmnn.xhtml#a6d4bdf4368a1422943f8f2b1740ec491">SetClStridedSliceData</a>(descriptor.m_Begin, descriptor.m_End, descriptor.m_Stride);</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keyword">auto</span> numDimensions = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">int</span>&gt;(input.GetNumDimensions());</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; int32_t begin_mask = <a class="code" href="namespacearmnn.xhtml#ad69ffa576a596b9eb20ab6a41420c541">ConvertMaskToACLFormat</a>(descriptor.m_BeginMask, numDimensions);</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; int32_t end_mask = <a class="code" href="namespacearmnn.xhtml#ad69ffa576a596b9eb20ab6a41420c541">ConvertMaskToACLFormat</a>(descriptor.m_EndMask, numDimensions);</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; int32_t shrink_axis_mask = <a class="code" href="namespacearmnn.xhtml#ad69ffa576a596b9eb20ab6a41420c541">ConvertMaskToACLFormat</a>(descriptor.m_ShrinkAxisMask, numDimensions);</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">return</span> arm_compute::CLStridedSlice::validate(&amp;aclInputInfo,</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; &amp;aclOutputInfo,</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; starts,</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; ends,</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; strides,</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; begin_mask,</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; end_mask,</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; shrink_axis_mask);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ac6e86c1def7f674d3c4cb7f577874aa6"><div class="ttname"><a href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">armnn::Coordinates</a></div><div class="ttdeci">std::array&lt; unsigned int, MaxNumOfTensorDimensions &gt; Coordinates</div><div class="ttdef"><b>Definition:</b> <a href="_internal_types_8hpp_source.xhtml#l00015">InternalTypes.hpp:15</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad69ffa576a596b9eb20ab6a41420c541"><div class="ttname"><a href="namespacearmnn.xhtml#ad69ffa576a596b9eb20ab6a41420c541">armnn::ConvertMaskToACLFormat</a></div><div class="ttdeci">int32_t ConvertMaskToACLFormat(int32_t mask, int32_t numDim)</div><div class="ttdef"><b>Definition:</b> <a href="_workload_utils_8cpp_source.xhtml#l00283">WorkloadUtils.cpp:283</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a375ca3cff9f1b005d1412dc5f3cf5b6e"><div class="ttname"><a href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a></div><div class="ttdeci">std::enable_if_t&lt; std::is_unsigned&lt; Source &gt;::value &amp;&amp;std::is_unsigned&lt; Dest &gt;::value, Dest &gt; numeric_cast(Source source)</div><div class="ttdef"><b>Definition:</b> <a href="_numeric_cast_8hpp_source.xhtml#l00035">NumericCast.hpp:35</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a6d4bdf4368a1422943f8f2b1740ec491"><div class="ttname"><a href="namespacearmnn.xhtml#a6d4bdf4368a1422943f8f2b1740ec491">armnn::SetClStridedSliceData</a></div><div class="ttdeci">auto SetClStridedSliceData(const std::vector&lt; int &gt; &amp;m_begin, const std::vector&lt; int &gt; &amp;m_end, const std::vector&lt; int &gt; &amp;m_stride)</div><div class="ttdef"><b>Definition:</b> <a href="_cl_workload_utils_8hpp_source.xhtml#l00070">ClWorkloadUtils.hpp:70</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="afa9933f1d9de469ffba5ba0fcee769f8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afa9933f1d9de469ffba5ba0fcee769f8">&#9670;&nbsp;</a></span>ClSubtractionValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClSubtractionValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input0</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> *&#160;</td>
+ <td class="paramname"><em>activationDescriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_subtraction_workload_8cpp_source.xhtml#l00046">46</a> of file <a class="el" href="_cl_subtraction_workload_8cpp_source.xhtml">ClSubtractionWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01381">ClLayerSupport::IsSubtractionSupported()</a>, and <a class="el" href="_cl_backend_8cpp_source.xhtml#l00276">ClBackend::OptimizeSubgraphView()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;{</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput0Info = BuildArmComputeTensorInfo(input0);</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput1Info = BuildArmComputeTensorInfo(input1);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationInfo = <a class="code" href="namespacearmnn.xhtml#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; activationDescriptor);</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::CLArithmeticSubtraction::validate(&amp;aclInput0Info,</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; &amp;aclInput1Info,</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; &amp;aclOutputInfo,</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; g_AclConvertPolicy,</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; activationInfo);</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">return</span> aclStatus;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70b"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">armnn::Status</a></div><div class="ttdeci">Status</div><div class="ttdoc">enumeration </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00029">Types.hpp:29</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad701d0d29baa4266ab4d33b090aa661c"><div class="ttname"><a href="namespacearmnn.xhtml#ad701d0d29baa4266ab4d33b090aa661c">armnn::ConvertActivationDescriptorToAclActivationLayerInfo</a></div><div class="ttdeci">arm_compute::ActivationLayerInfo ConvertActivationDescriptorToAclActivationLayerInfo(const ActivationDescriptor &amp;actDesc)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.xhtml#l00085">ArmComputeUtils.hpp:85</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ac86fc56b9a27576bfe930a7012a402d5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac86fc56b9a27576bfe930a7012a402d5">&#9670;&nbsp;</a></span>ClTensorHandleFactoryId()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr const char* armnn::ClTensorHandleFactoryId </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_tensor_handle_factory_8hpp_source.xhtml#l00015">15</a> of file <a class="el" href="_cl_tensor_handle_factory_8hpp_source.xhtml">ClTensorHandleFactory.hpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_tensor_handle_factory_8cpp_source.xhtml#l00093">ClTensorHandleFactory::GetIdStatic()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;{</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Arm/Cl/TensorHandleFactory&quot;</span>;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a719ea81939d6a25f8636b52c59165d66"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a719ea81939d6a25f8636b52c59165d66">&#9670;&nbsp;</a></span>ClTransposeConvolution2dWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClTransposeConvolution2dWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_transpose_convolution2d_descriptor.xhtml">TransposeConvolution2dDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>weights</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &gt; &amp;&#160;</td>
+ <td class="paramname"><em>biases</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_transpose_convolution2d_workload_8cpp_source.xhtml#l00026">26</a> of file <a class="el" href="_cl_transpose_convolution2d_workload_8cpp_source.xhtml">ClTransposeConvolution2dWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01394">ClLayerSupport::IsTransposeConvolution2dSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;{</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; arm_compute::TensorInfo aclWeightsInfo = BuildArmComputeTensorInfo(weights, descriptor.m_DataLayout);</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; arm_compute::TensorInfo aclBiasesInfo;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; arm_compute::TensorInfo *optionalAclBiasesInfo = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">if</span> (descriptor.m_BiasEnabled)</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; {</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(biases.has_value());</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; aclBiasesInfo = BuildArmComputeTensorInfo(biases.value(), descriptor.m_DataLayout);</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; optionalAclBiasesInfo = &amp;aclBiasesInfo;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; }</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; arm_compute::PadStrideInfo padStrideInfo = BuildArmComputePadStrideInfo(descriptor);</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">return</span> arm_compute::CLDeconvolutionLayer::validate(&amp;aclInputInfo,</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; &amp;aclWeightsInfo,</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; optionalAclBiasesInfo,</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; &amp;aclOutputInfo,</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; padStrideInfo);</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;}</div><div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a1c3a39fbecb45be0bb15dd665c9be61d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1c3a39fbecb45be0bb15dd665c9be61d">&#9670;&nbsp;</a></span>ClTransposeWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status ClTransposeWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_transpose_descriptor.xhtml">TransposeDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_transpose_workload_8cpp_source.xhtml#l00017">17</a> of file <a class="el" href="_cl_transpose_workload_8cpp_source.xhtml">ClTransposeWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01410">ClLayerSupport::IsTransposeSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;{</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_permutation_vector.xhtml">armnn::PermutationVector</a>&amp; mappings = descriptor.m_DimMappings;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keywordflow">return</span> arm_compute::CLPermute::validate(&amp;aclInputInfo, &amp;aclOutputInfo,</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; armcomputetensorutils::BuildArmComputeTransposeVector(mappings));</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_permutation_vector_xhtml"><div class="ttname"><a href="classarmnn_1_1_permutation_vector.xhtml">armnn::PermutationVector</a></div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00282">Types.hpp:282</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a5d94c2125c725df5b619d16db9d4a8e9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5d94c2125c725df5b619d16db9d4a8e9">&#9670;&nbsp;</a></span>Combine() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn.xhtml#a5b05f3b7208ec7cea3338e30057c0bac">MemorySourceFlags</a> armnn::Combine </td>
+ <td>(</td>
+ <td class="paramtype">Arg&#160;</td>
+ <td class="paramname"><em>sourceA</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Arg&#160;</td>
+ <td class="paramname"><em>sourceB</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_memory_sources_8hpp_source.xhtml#l00030">30</a> of file <a class="el" href="_memory_sources_8hpp_source.xhtml">MemorySources.hpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_memory_sources_8hpp_source.xhtml#l00036">Combine()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;{</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><a class="code" href="namespacearmnn.xhtml#a5b05f3b7208ec7cea3338e30057c0bac">MemorySourceFlags</a><span class="keyword">&gt;</span>(sourceA) | static_cast&lt;MemorySourceFlags&gt;(sourceB);</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a5b05f3b7208ec7cea3338e30057c0bac"><div class="ttname"><a href="namespacearmnn.xhtml#a5b05f3b7208ec7cea3338e30057c0bac">armnn::MemorySourceFlags</a></div><div class="ttdeci">unsigned int MemorySourceFlags</div><div class="ttdef"><b>Definition:</b> <a href="_memory_sources_8hpp_source.xhtml#l00015">MemorySources.hpp:15</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ae91e1849e95350c8e50912a217999eac"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae91e1849e95350c8e50912a217999eac">&#9670;&nbsp;</a></span>Combine() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn.xhtml#a5b05f3b7208ec7cea3338e30057c0bac">MemorySourceFlags</a> armnn::Combine </td>
+ <td>(</td>
+ <td class="paramtype">Arg&#160;</td>
+ <td class="paramname"><em>source</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Args...&#160;</td>
+ <td class="paramname"><em>rest</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_memory_sources_8hpp_source.xhtml#l00036">36</a> of file <a class="el" href="_memory_sources_8hpp_source.xhtml">MemorySources.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_memory_sources_8hpp_source.xhtml#l00030">Combine()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;{</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><a class="code" href="namespacearmnn.xhtml#a5b05f3b7208ec7cea3338e30057c0bac">MemorySourceFlags</a><span class="keyword">&gt;</span>(source) | <a class="code" href="namespacearmnn.xhtml#ae91e1849e95350c8e50912a217999eac">Combine</a>(rest...);</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ae91e1849e95350c8e50912a217999eac"><div class="ttname"><a href="namespacearmnn.xhtml#ae91e1849e95350c8e50912a217999eac">armnn::Combine</a></div><div class="ttdeci">MemorySourceFlags Combine(Arg source, Args... rest)</div><div class="ttdef"><b>Definition:</b> <a href="_memory_sources_8hpp_source.xhtml#l00036">MemorySources.hpp:36</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a5b05f3b7208ec7cea3338e30057c0bac"><div class="ttname"><a href="namespacearmnn.xhtml#a5b05f3b7208ec7cea3338e30057c0bac">armnn::MemorySourceFlags</a></div><div class="ttdeci">unsigned int MemorySourceFlags</div><div class="ttdef"><b>Definition:</b> <a href="_memory_sources_8hpp_source.xhtml#l00015">MemorySources.hpp:15</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a44a3b98b37a25c995aa9e4dae7d7b456"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a44a3b98b37a25c995aa9e4dae7d7b456">&#9670;&nbsp;</a></span>ComputeAclAxis()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">int armnn::ComputeAclAxis </td>
+ <td>(</td>
+ <td class="paramtype">const int &amp;&#160;</td>
+ <td class="paramname"><em>armnnAxis</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>tensor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Function to convert ArmNN axis (left to right) to ACL axis (right to left) ranging from [-rank, rank) </p>
+
+<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00240">240</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.xhtml">ArmComputeUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>, and <a class="el" href="_tensor_8hpp_source.xhtml#l00195">TensorInfo::GetNumDimensions()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_gather_workload_8cpp_source.xhtml#l00029">ClGatherWorkload::ClGatherWorkload()</a>, <a class="el" href="_cl_log_softmax_workload_8cpp_source.xhtml#l00028">ClLogSoftmaxWorkload::ClLogSoftmaxWorkload()</a>, <a class="el" href="_cl_softmax_workload_8cpp_source.xhtml#l00028">ClSoftmaxWorkload::ClSoftmaxWorkload()</a>, <a class="el" href="_neon_gather_workload_8cpp_source.xhtml#l00027">NeonGatherWorkload::NeonGatherWorkload()</a>, <a class="el" href="_neon_log_softmax_workload_8cpp_source.xhtml#l00033">NeonLogSoftmaxWorkload::NeonLogSoftmaxWorkload()</a>, and <a class="el" href="_neon_softmax_workload_8cpp_source.xhtml#l00033">NeonSoftmaxWorkload::NeonSoftmaxWorkload()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;{</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="keywordtype">int</span> rank = <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(tensor.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>());</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160;</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(rank != 0);</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>((-1 * rank) &lt;= armnnAxis);</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(armnnAxis &lt; rank);</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160;</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="keywordtype">int</span> sign = (armnnAxis &lt; 0) ? -1 : 1;</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="keywordtype">int</span> aclAxis = sign * rank - 1 - armnnAxis;</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160;</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="keywordflow">return</span> aclAxis;</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160;}</div><div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a157e27d41e9f6b21f0d3c025fa47dc24"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">armnn::TensorInfo::GetNumDimensions</a></div><div class="ttdeci">unsigned int GetNumDimensions() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00195">Tensor.hpp:195</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a855760e957668804d33c0691a802496e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a855760e957668804d33c0691a802496e">&#9670;&nbsp;</a></span>ComputeConv3DInfo() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Conv3dInfo armnn::ComputeConv3DInfo </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_convolution3d_descriptor.xhtml">armnn::Convolution3dDescriptor</a>&#160;</td>
+ <td class="paramname"><em>descriptor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">bool&#160;</td>
+ <td class="paramname"><em>isFastMathEnabled</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> *&#160;</td>
+ <td class="paramname"><em>activationDescriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Utility function used to setup an arm_compute::Conv3dInfo object from convolution3d descriptor. </p>
+
+<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00269">269</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.xhtml">ArmComputeUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00085">ConvertActivationDescriptorToAclActivationLayerInfo()</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00610">Convolution3dDescriptor::m_DilationX</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00612">Convolution3dDescriptor::m_DilationY</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00614">Convolution3dDescriptor::m_DilationZ</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00602">Convolution3dDescriptor::m_PadBack</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00598">Convolution3dDescriptor::m_PadBottom</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00600">Convolution3dDescriptor::m_PadFront</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00592">Convolution3dDescriptor::m_PadLeft</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00594">Convolution3dDescriptor::m_PadRight</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00596">Convolution3dDescriptor::m_PadTop</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00604">Convolution3dDescriptor::m_StrideX</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00606">Convolution3dDescriptor::m_StrideY</a>, and <a class="el" href="_descriptors_8hpp_source.xhtml#l00608">Convolution3dDescriptor::m_StrideZ</a>.</p>
+<div class="fragment"><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;{</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keyword">const</span> arm_compute::Size3D stride{descriptor.<a class="code" href="structarmnn_1_1_convolution3d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">m_StrideX</a>, descriptor.<a class="code" href="structarmnn_1_1_convolution3d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a>, descriptor.<a class="code" href="structarmnn_1_1_convolution3d_descriptor.xhtml#a5164336f6a1b15be0d434a6bbf7289da">m_StrideZ</a>};</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="keyword">const</span> arm_compute::Padding3D padding{descriptor.<a class="code" href="structarmnn_1_1_convolution3d_descriptor.xhtml#ac18546ebbebbb32fe0a03baa9bf2c600">m_PadLeft</a>, descriptor.<a class="code" href="structarmnn_1_1_convolution3d_descriptor.xhtml#a002bc30e590d78cbb4f4d12171055ca7">m_PadRight</a>,</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; descriptor.<a class="code" href="structarmnn_1_1_convolution3d_descriptor.xhtml#a56b51f56cef50cdfa554258eecdab046">m_PadTop</a>, descriptor.<a class="code" href="structarmnn_1_1_convolution3d_descriptor.xhtml#aa9e49717ebdb741e8c767741647fc618">m_PadBottom</a>,</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; descriptor.<a class="code" href="structarmnn_1_1_convolution3d_descriptor.xhtml#a83ca447892f460dabaa2f87d3dc3db61">m_PadFront</a>, descriptor.<a class="code" href="structarmnn_1_1_convolution3d_descriptor.xhtml#a11d5c25face9b54e90f79ee8bdc1d0fb">m_PadBack</a>};</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="keyword">const</span> arm_compute::Size3D dilation{descriptor.<a class="code" href="structarmnn_1_1_convolution3d_descriptor.xhtml#aa3c6a77a963a98ccb8ea7b8fd008a8c1">m_DilationX</a>, descriptor.<a class="code" href="structarmnn_1_1_convolution3d_descriptor.xhtml#a302b688d88dd73cde0fb1faef6679907">m_DilationY</a>, descriptor.<a class="code" href="structarmnn_1_1_convolution3d_descriptor.xhtml#a16543bce17aa2e4d6e81c88f74227192">m_DilationZ</a>};</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160;</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationInfo =</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <a class="code" href="namespacearmnn.xhtml#af6d517245110f6b1ca702da0cbbf4518">ConvertActivationDescriptorToAclActivationLayerInfo</a>(activationDescriptor);</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> roundType = arm_compute::DimensionRoundingType::FLOOR;</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160;</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="keywordflow">return</span> arm_compute::Conv3dInfo{stride, padding, activationInfo, dilation, roundType, isFastMathEnabled};</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160;}</div><div class="ttc" id="structarmnn_1_1_convolution3d_descriptor_xhtml_a11d5c25face9b54e90f79ee8bdc1d0fb"><div class="ttname"><a href="structarmnn_1_1_convolution3d_descriptor.xhtml#a11d5c25face9b54e90f79ee8bdc1d0fb">armnn::Convolution3dDescriptor::m_PadBack</a></div><div class="ttdeci">uint32_t m_PadBack</div><div class="ttdoc">Padding back value in the depth dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00602">Descriptors.hpp:602</a></div></div>
+<div class="ttc" id="structarmnn_1_1_convolution3d_descriptor_xhtml_afe6a3377c4531315354def9023c8fdda"><div class="ttname"><a href="structarmnn_1_1_convolution3d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">armnn::Convolution3dDescriptor::m_StrideX</a></div><div class="ttdeci">uint32_t m_StrideX</div><div class="ttdoc">Stride value when proceeding through input for the width dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00604">Descriptors.hpp:604</a></div></div>
+<div class="ttc" id="structarmnn_1_1_convolution3d_descriptor_xhtml_aa9e49717ebdb741e8c767741647fc618"><div class="ttname"><a href="structarmnn_1_1_convolution3d_descriptor.xhtml#aa9e49717ebdb741e8c767741647fc618">armnn::Convolution3dDescriptor::m_PadBottom</a></div><div class="ttdeci">uint32_t m_PadBottom</div><div class="ttdoc">Padding bottom value in the height dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00598">Descriptors.hpp:598</a></div></div>
+<div class="ttc" id="structarmnn_1_1_convolution3d_descriptor_xhtml_aa3c6a77a963a98ccb8ea7b8fd008a8c1"><div class="ttname"><a href="structarmnn_1_1_convolution3d_descriptor.xhtml#aa3c6a77a963a98ccb8ea7b8fd008a8c1">armnn::Convolution3dDescriptor::m_DilationX</a></div><div class="ttdeci">uint32_t m_DilationX</div><div class="ttdoc">Dilation along x axis. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00610">Descriptors.hpp:610</a></div></div>
+<div class="ttc" id="structarmnn_1_1_convolution3d_descriptor_xhtml_ac1fe174bbadfb39a2b636940c2e647c8"><div class="ttname"><a href="structarmnn_1_1_convolution3d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">armnn::Convolution3dDescriptor::m_StrideY</a></div><div class="ttdeci">uint32_t m_StrideY</div><div class="ttdoc">Stride value when proceeding through input for the height dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00606">Descriptors.hpp:606</a></div></div>
+<div class="ttc" id="structarmnn_1_1_convolution3d_descriptor_xhtml_a83ca447892f460dabaa2f87d3dc3db61"><div class="ttname"><a href="structarmnn_1_1_convolution3d_descriptor.xhtml#a83ca447892f460dabaa2f87d3dc3db61">armnn::Convolution3dDescriptor::m_PadFront</a></div><div class="ttdeci">uint32_t m_PadFront</div><div class="ttdoc">Padding front value in the depth dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00600">Descriptors.hpp:600</a></div></div>
+<div class="ttc" id="structarmnn_1_1_convolution3d_descriptor_xhtml_ac18546ebbebbb32fe0a03baa9bf2c600"><div class="ttname"><a href="structarmnn_1_1_convolution3d_descriptor.xhtml#ac18546ebbebbb32fe0a03baa9bf2c600">armnn::Convolution3dDescriptor::m_PadLeft</a></div><div class="ttdeci">uint32_t m_PadLeft</div><div class="ttdoc">Padding left value in the width dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00592">Descriptors.hpp:592</a></div></div>
+<div class="ttc" id="structarmnn_1_1_convolution3d_descriptor_xhtml_a002bc30e590d78cbb4f4d12171055ca7"><div class="ttname"><a href="structarmnn_1_1_convolution3d_descriptor.xhtml#a002bc30e590d78cbb4f4d12171055ca7">armnn::Convolution3dDescriptor::m_PadRight</a></div><div class="ttdeci">uint32_t m_PadRight</div><div class="ttdoc">Padding right value in the width dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00594">Descriptors.hpp:594</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_af6d517245110f6b1ca702da0cbbf4518"><div class="ttname"><a href="namespacearmnn.xhtml#af6d517245110f6b1ca702da0cbbf4518">armnn::ConvertActivationDescriptorToAclActivationLayerInfo</a></div><div class="ttdeci">arm_compute::ActivationLayerInfo ConvertActivationDescriptorToAclActivationLayerInfo(const ActivationDescriptor *activationDescPtr)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.xhtml#l00092">ArmComputeUtils.hpp:92</a></div></div>
+<div class="ttc" id="structarmnn_1_1_convolution3d_descriptor_xhtml_a56b51f56cef50cdfa554258eecdab046"><div class="ttname"><a href="structarmnn_1_1_convolution3d_descriptor.xhtml#a56b51f56cef50cdfa554258eecdab046">armnn::Convolution3dDescriptor::m_PadTop</a></div><div class="ttdeci">uint32_t m_PadTop</div><div class="ttdoc">Padding top value in the height dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00596">Descriptors.hpp:596</a></div></div>
+<div class="ttc" id="structarmnn_1_1_convolution3d_descriptor_xhtml_a16543bce17aa2e4d6e81c88f74227192"><div class="ttname"><a href="structarmnn_1_1_convolution3d_descriptor.xhtml#a16543bce17aa2e4d6e81c88f74227192">armnn::Convolution3dDescriptor::m_DilationZ</a></div><div class="ttdeci">uint32_t m_DilationZ</div><div class="ttdoc">Dilation along z axis. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00614">Descriptors.hpp:614</a></div></div>
+<div class="ttc" id="structarmnn_1_1_convolution3d_descriptor_xhtml_a5164336f6a1b15be0d434a6bbf7289da"><div class="ttname"><a href="structarmnn_1_1_convolution3d_descriptor.xhtml#a5164336f6a1b15be0d434a6bbf7289da">armnn::Convolution3dDescriptor::m_StrideZ</a></div><div class="ttdeci">uint32_t m_StrideZ</div><div class="ttdoc">Stride value when proceeding through input for the depth dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00608">Descriptors.hpp:608</a></div></div>
+<div class="ttc" id="structarmnn_1_1_convolution3d_descriptor_xhtml_a302b688d88dd73cde0fb1faef6679907"><div class="ttname"><a href="structarmnn_1_1_convolution3d_descriptor.xhtml#a302b688d88dd73cde0fb1faef6679907">armnn::Convolution3dDescriptor::m_DilationY</a></div><div class="ttdeci">uint32_t m_DilationY</div><div class="ttdoc">Dilation along y axis. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00612">Descriptors.hpp:612</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a3f2c9ea2505a2cac1d05e17e989aff2b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3f2c9ea2505a2cac1d05e17e989aff2b">&#9670;&nbsp;</a></span>ComputeConv3DInfo() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Conv3dInfo armnn::ComputeConv3DInfo </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_convolution3d_queue_descriptor.xhtml">armnn::Convolution3dQueueDescriptor</a>&#160;</td>
+ <td class="paramname"><em>queueDescriptor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">bool&#160;</td>
+ <td class="paramname"><em>isFastMathEnabled</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00286">286</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.xhtml">ArmComputeUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00103">ConvertAdditionalInfoToAclActivationLayerInfo()</a>, <a class="el" href="include_2armnn_2backends_2_workload_data_8hpp_source.xhtml#l00054">QueueDescriptorWithParameters&lt; LayerDescriptor &gt;::m_Parameters</a>, and <a class="el" href="_descriptors_8hpp_source.xhtml#l00604">Convolution3dDescriptor::m_StrideX</a>.</p>
+<div class="fragment"><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160;{</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keyword">auto</span> descriptor = queueDescriptor.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>;</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="keyword">const</span> arm_compute::Size3D stride{descriptor.<a class="code" href="structarmnn_1_1_convolution3d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">m_StrideX</a>, descriptor.m_StrideY, descriptor.m_StrideZ};</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="keyword">const</span> arm_compute::Padding3D padding{descriptor.m_PadLeft, descriptor.m_PadRight,</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; descriptor.m_PadTop, descriptor.m_PadBottom,</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; descriptor.m_PadFront, descriptor.m_PadBack};</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keyword">const</span> arm_compute::Size3D dilation{descriptor.m_DilationX, descriptor.m_DilationY, descriptor.m_DilationZ};</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160;</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationInfo =</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <a class="code" href="namespacearmnn.xhtml#abfb0841058a8190d30851f07eca3991f">ConvertAdditionalInfoToAclActivationLayerInfo</a>(queueDescriptor);</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> roundType = arm_compute::DimensionRoundingType::FLOOR;</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160;</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keywordflow">return</span> arm_compute::Conv3dInfo{stride, padding, activationInfo, dilation, roundType, isFastMathEnabled};</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160;}</div><div class="ttc" id="structarmnn_1_1_convolution3d_descriptor_xhtml_afe6a3377c4531315354def9023c8fdda"><div class="ttname"><a href="structarmnn_1_1_convolution3d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">armnn::Convolution3dDescriptor::m_StrideX</a></div><div class="ttdeci">uint32_t m_StrideX</div><div class="ttdoc">Stride value when proceeding through input for the width dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00604">Descriptors.hpp:604</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_abfb0841058a8190d30851f07eca3991f"><div class="ttname"><a href="namespacearmnn.xhtml#abfb0841058a8190d30851f07eca3991f">armnn::ConvertAdditionalInfoToAclActivationLayerInfo</a></div><div class="ttdeci">arm_compute::ActivationLayerInfo ConvertAdditionalInfoToAclActivationLayerInfo(const QueueDescriptor &amp;queueDescriptor)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.xhtml#l00103">ArmComputeUtils.hpp:103</a></div></div>
+<div class="ttc" id="structarmnn_1_1_queue_descriptor_with_parameters_xhtml_aad91b9bbf7aa365d304febe79a3d1333"><div class="ttname"><a href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">armnn::QueueDescriptorWithParameters::m_Parameters</a></div><div class="ttdeci">LayerDescriptor m_Parameters</div><div class="ttdef"><b>Definition:</b> <a href="include_2armnn_2backends_2_workload_data_8hpp_source.xhtml#l00054">WorkloadData.hpp:54</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="aa1e65a4dea8c65b76423e121b880d059"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa1e65a4dea8c65b76423e121b880d059">&#9670;&nbsp;</a></span>ComputePositiveAxis()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">unsigned int armnn::ComputePositiveAxis </td>
+ <td>(</td>
+ <td class="paramtype">const int &amp;&#160;</td>
+ <td class="paramname"><em>axis</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>tensor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Function to convert axis to its positive equivalent value. </p>
+<p>[-rank, rank) &ndash;&gt; [0, rank) </p>
+
+<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00256">256</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.xhtml">ArmComputeUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>, and <a class="el" href="_tensor_8hpp_source.xhtml#l00195">TensorInfo::GetNumDimensions()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160;{</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keywordtype">int</span> rank = <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(tensor.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>());</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160;</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(rank != 0);</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>((-1 * rank) &lt;= axis);</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(axis &lt; rank);</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160;</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="keywordtype">int</span> positiveAxis = (axis &lt; 0) ? rank + axis : axis;</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(positiveAxis);</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;}</div><div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a157e27d41e9f6b21f0d3c025fa47dc24"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">armnn::TensorInfo::GetNumDimensions</a></div><div class="ttdeci">unsigned int GetNumDimensions() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00195">Tensor.hpp:195</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a9d43aa01b882d8776ab9403eea3cf779"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9d43aa01b882d8776ab9403eea3cf779">&#9670;&nbsp;</a></span>ComputeReductionTensorShape()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> armnn::ComputeReductionTensorShape </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::vector&lt; uint32_t &gt; &amp;&#160;</td>
+ <td class="paramname"><em>vAxis</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const bool&#160;</td>
+ <td class="paramname"><em>keepDims</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Function to compute the output tensor shape based on the axes and if keepDims is set. </p>
+
+<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00328">328</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.xhtml">ArmComputeUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_tensor_8hpp_source.xhtml#l00195">TensorInfo::GetNumDimensions()</a>, and <a class="el" href="_numeric_cast_8hpp_source.xhtml#l00035">numeric_cast()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00326">ChainReduceLayers()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160;{</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="keyword">auto</span> reducedTensorInfo = input;</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> rank = reducedTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>();</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputRank = 0;</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <span class="comment">// Calculate output dimension</span></div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keywordflow">if</span> (keepDims)</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; {</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; outputRank = rank;</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; }</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (vAxis.empty())</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; {</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; outputRank = 1;</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; }</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (vAxis.size() &gt; reducedTensorInfo.GetNumDimensions())</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; {</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <span class="keywordflow">throw</span> LayerValidationException(<span class="stringliteral">&quot;ReduceLayer: Dimensions to reduce can not be bigger than input dimensions&quot;</span>);</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; }</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; {</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; outputRank = reducedTensorInfo.GetNumDimensions() - <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(vAxis.size());</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="keywordflow">if</span> (outputRank == 0)</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; {</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; outputRank = 1;</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; }</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; }</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; std::vector&lt;unsigned int&gt; dimSizes(outputRank, 1);</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <span class="keywordflow">if</span> (!vAxis.empty())</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; {</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="comment">// Skip the dimension that has been reduced unless keepDims is true.</span></div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputIndex = 0;</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; reducedTensorInfo.GetNumDimensions(); ++i)</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; {</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <span class="keywordflow">if</span> (std::find(vAxis.begin(), vAxis.end(), i) == vAxis.end())</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; {</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; dimSizes[outputIndex] = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(reducedTensorInfo.GetShape()[i]);</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; ++outputIndex;</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; }</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (keepDims)</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; {</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; dimSizes[outputIndex] = 1;</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; ++outputIndex;</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; }</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; }</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; }</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <span class="keyword">const</span> TensorShape inferredShape = TensorShape(outputRank, dimSizes.data());</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; reducedTensorInfo.SetShape(inferredShape);</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="keywordflow">return</span> reducedTensorInfo;</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a375ca3cff9f1b005d1412dc5f3cf5b6e"><div class="ttname"><a href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a></div><div class="ttdeci">std::enable_if_t&lt; std::is_unsigned&lt; Source &gt;::value &amp;&amp;std::is_unsigned&lt; Dest &gt;::value, Dest &gt; numeric_cast(Source source)</div><div class="ttdef"><b>Definition:</b> <a href="_numeric_cast_8hpp_source.xhtml#l00035">NumericCast.hpp:35</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a157e27d41e9f6b21f0d3c025fa47dc24"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">armnn::TensorInfo::GetNumDimensions</a></div><div class="ttdeci">unsigned int GetNumDimensions() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00195">Tensor.hpp:195</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ae33fcc729c3eeda77a443a11f13da7ba"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae33fcc729c3eeda77a443a11f13da7ba">&#9670;&nbsp;</a></span>ComputeSoftmaxAclAxis()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">T armnn::ComputeSoftmaxAclAxis </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_softmax_descriptor.xhtml">SoftmaxDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>softmaxDesc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>tensor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00201">201</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.xhtml">ArmComputeUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00195">TensorInfo::GetNumDimensions()</a>, and <a class="el" href="_descriptors_8hpp_source.xhtml#l00165">SoftmaxDescriptor::m_Axis</a>.</p>
+<div class="fragment"><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;{</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="comment">// Detect the Android default value of -1 and return the ACL default value of 0.</span></div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keywordflow">if</span> (softmaxDesc.m_Axis == -1)</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; {</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; }</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dim = tensor.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>();</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160;</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(dim != 0);</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160;</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="comment">// Currently ArmNN support axis 1.</span></div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keyword">auto</span> aclAxis = (<span class="keyword">static_cast&lt;</span>T<span class="keyword">&gt;</span>(dim) - 1);</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; aclAxis = aclAxis &gt; 0 ? aclAxis -1 : aclAxis;</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160;</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="keywordflow">return</span> aclAxis;</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;}</div><div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a157e27d41e9f6b21f0d3c025fa47dc24"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">armnn::TensorInfo::GetNumDimensions</a></div><div class="ttdeci">unsigned int GetNumDimensions() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00195">Tensor.hpp:195</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a8cbabc875597b3bed0ccdc0adb289fde"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8cbabc875597b3bed0ccdc0adb289fde">&#9670;&nbsp;</a></span>ComputeSplitAxis()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::set&lt;unsigned int&gt; armnn::ComputeSplitAxis </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="namespacearmnn.xhtml#a60291543fe872b795e71e05bcd835fd1">armnn::SplitterDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>desc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00220">220</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.xhtml">ArmComputeUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_descriptors_8cpp_source.xhtml#l00300">ViewsDescriptor::GetNumDimensions()</a>, <a class="el" href="_descriptors_8cpp_source.xhtml#l00295">ViewsDescriptor::GetNumViews()</a>, and <a class="el" href="_descriptors_8cpp_source.xhtml#l00340">ViewsDescriptor::GetViewSizes()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_splitter_workload_8cpp_source.xhtml#l00055">ClSplitterWorkload::ClSplitterWorkload()</a>, <a class="el" href="_splitter_layer_8cpp_source.xhtml#l00021">SplitterLayer::CreateWorkload()</a>, <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01324">ClLayerSupport::IsSplitterSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01330">NeonLayerSupport::IsSplitterSupported()</a>, and <a class="el" href="_neon_splitter_workload_8cpp_source.xhtml#l00056">NeonSplitterWorkload::NeonSplitterWorkload()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160;{</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numSplit = desc.<a class="code" href="structarmnn_1_1_views_descriptor.xhtml#a35546e7b56e6e972a495b48748478ede">GetNumViews</a>();</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numDimensions = desc.<a class="code" href="structarmnn_1_1_views_descriptor.xhtml#a78e8266be865fdd92cadd04d6e25ae1f">GetNumDimensions</a>();</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; std::set&lt;unsigned int&gt; splitAxis;</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160;</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; numSplit; ++i)</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; {</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dimIdx = 0; dimIdx &lt; numDimensions; ++dimIdx)</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; {</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keywordflow">if</span> (desc.<a class="code" href="structarmnn_1_1_views_descriptor.xhtml#a3c1ab47a0a319413b3a4b5757ed5b80b">GetViewSizes</a>(i)[dimIdx] != input[dimIdx])</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; {</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; splitAxis.insert(dimIdx);</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; }</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; }</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; }</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="keywordflow">return</span> splitAxis;</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160;}</div><div class="ttc" id="structarmnn_1_1_views_descriptor_xhtml_a78e8266be865fdd92cadd04d6e25ae1f"><div class="ttname"><a href="structarmnn_1_1_views_descriptor.xhtml#a78e8266be865fdd92cadd04d6e25ae1f">armnn::ViewsDescriptor::GetNumDimensions</a></div><div class="ttdeci">uint32_t GetNumDimensions() const</div><div class="ttdoc">Get the number of dimensions. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8cpp_source.xhtml#l00300">Descriptors.cpp:300</a></div></div>
+<div class="ttc" id="structarmnn_1_1_views_descriptor_xhtml_a35546e7b56e6e972a495b48748478ede"><div class="ttname"><a href="structarmnn_1_1_views_descriptor.xhtml#a35546e7b56e6e972a495b48748478ede">armnn::ViewsDescriptor::GetNumViews</a></div><div class="ttdeci">uint32_t GetNumViews() const</div><div class="ttdoc">Get the number of views. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8cpp_source.xhtml#l00295">Descriptors.cpp:295</a></div></div>
+<div class="ttc" id="structarmnn_1_1_views_descriptor_xhtml_a3c1ab47a0a319413b3a4b5757ed5b80b"><div class="ttname"><a href="structarmnn_1_1_views_descriptor.xhtml#a3c1ab47a0a319413b3a4b5757ed5b80b">armnn::ViewsDescriptor::GetViewSizes</a></div><div class="ttdeci">const uint32_t * GetViewSizes(uint32_t idx) const</div><div class="ttdoc">Get the view sizes at the int value idx. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8cpp_source.xhtml#l00340">Descriptors.cpp:340</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="aa58cffc192978865f4fc8d3b39f62460"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa58cffc192978865f4fc8d3b39f62460">&#9670;&nbsp;</a></span>Concatenate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Concatenate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_concat_queue_descriptor.xhtml">ConcatQueueDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>data</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::vector&lt; <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> *&gt;&#160;</td>
+ <td class="paramname"><em>inputs</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::vector&lt; <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> *&gt;&#160;</td>
+ <td class="paramname"><em>outputs</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_concatenate_8cpp_source.xhtml#l00014">14</a> of file <a class="el" href="_concatenate_8cpp_source.xhtml">Concatenate.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00195">TensorInfo::GetNumDimensions()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</a>, <a class="el" href="_ref_workload_utils_8hpp_source.xhtml#l00026">GetTensorInfo()</a>, <a class="el" href="include_2armnn_2backends_2_workload_data_8hpp_source.xhtml#l00126">ConcatQueueDescriptor::ViewOrigin::m_Origin</a>, <a class="el" href="include_2armnn_2backends_2_workload_data_8hpp_source.xhtml#l00131">ConcatQueueDescriptor::m_ViewOrigins</a>, and <a class="el" href="_types_8hpp_source.xhtml#l00018">MaxNumOfTensorDimensions</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_ref_concat_workload_8cpp_source.xhtml#l00020">RefConcatWorkload::ExecuteAsync()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;{</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; <span class="keyword">const</span> TensorInfo&amp; outputInfo0 = <a class="code" href="namespacearmnn_utils.xhtml#acee63cd08da47910fc166a1990988fa8">GetTensorInfo</a>(outputs[0]);</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; std::unique_ptr&lt;Encoder&lt;float&gt;&gt; encoderPtr = MakeEncoder&lt;float&gt;(outputInfo0, outputs[0]-&gt;Map());</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; Encoder&lt;float&gt;&amp; encoder = *encoderPtr;</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index = 0 ; index &lt; outputInfo0.GetNumElements(); ++index)</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; {</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> indices[<a class="code" href="namespacearmnn.xhtml#abdcd184ed3bd648bb31d385040cafd5d">MaxNumOfTensorDimensions</a>] = { 0 };</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> indexRemainder = index;</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dimensionStride = outputInfo0.GetNumElements();</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; outputInfo0.GetNumDimensions(); i++)</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; {</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; dimensionStride /= outputInfo0.GetShape()[i];</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; indices[i] = indexRemainder / dimensionStride; <span class="comment">// Use integer division to round down.</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; indexRemainder -= indices[i] * dimensionStride;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; }</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> viewIdx = 0; viewIdx &lt; data.m_ViewOrigins.size(); ++viewIdx)</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; {</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; ConcatQueueDescriptor::ViewOrigin <span class="keyword">const</span>&amp; view = data.m_ViewOrigins[viewIdx];</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="comment">//Split view extents are defined by the size of (the corresponding) input tensor.</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keyword">const</span> TensorInfo&amp; inputInfo = <a class="code" href="namespacearmnn_utils.xhtml#acee63cd08da47910fc166a1990988fa8">GetTensorInfo</a>(inputs[viewIdx]);</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(inputInfo.GetNumDimensions() == outputInfo0.GetNumDimensions());</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="comment">// Check all dimensions to see if this element is inside the given input view.</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordtype">bool</span> insideView = <span class="keyword">true</span>;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; inputInfo.GetNumDimensions(); i++)</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; {</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">if</span> (indices[i] &lt; view.m_Origin[i])</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; {</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; insideView = <span class="keyword">false</span>;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; }</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordflow">if</span> (indices[i] &gt;= view.m_Origin[i] + inputInfo.GetShape()[i])</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; {</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; insideView = <span class="keyword">false</span>;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; }</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; }</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">if</span> (insideView)</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; {</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; std::unique_ptr&lt;Decoder&lt;float&gt;&gt; decoderPtr =</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; MakeDecoder&lt;float&gt;(inputInfo,inputs[viewIdx]-&gt;Map());</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; Decoder&lt;float&gt;&amp; decoder = *decoderPtr;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inIndex = 0;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dimensionStride = 1;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = inputInfo.GetNumDimensions(); i-- &gt; 0;)</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; {</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; inIndex += dimensionStride * (indices[i] - view.m_Origin[i]);</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; dimensionStride *= inputInfo.GetShape()[i];</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; }</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; decoder += inIndex;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; encoder.Set(decoder.Get());</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="comment">//What should we do if input views overlap on the output tensor?</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="comment">//We could error, take the average, or shm else...</span></div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="comment">//For now just stop after finding first view (input) that matches.</span></div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; }</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; }</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; ++encoder;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; }</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;}</div><div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
+<div class="ttc" id="namespacearmnn_utils_xhtml_acee63cd08da47910fc166a1990988fa8"><div class="ttname"><a href="namespacearmnn_utils.xhtml#acee63cd08da47910fc166a1990988fa8">armnnUtils::GetTensorInfo</a></div><div class="ttdeci">armnn::TensorInfo GetTensorInfo(unsigned int numberOfBatches, unsigned int numberOfChannels, unsigned int height, unsigned int width, const armnn::DataLayout dataLayout, const armnn::DataType dataType)</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_utils_8cpp_source.xhtml#l00038">TensorUtils.cpp:38</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_abdcd184ed3bd648bb31d385040cafd5d"><div class="ttname"><a href="namespacearmnn.xhtml#abdcd184ed3bd648bb31d385040cafd5d">armnn::MaxNumOfTensorDimensions</a></div><div class="ttdeci">constexpr unsigned int MaxNumOfTensorDimensions</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00018">Types.hpp:18</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ae4ab3bf0697ad13316a6bcba0a8fade5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae4ab3bf0697ad13316a6bcba0a8fade5">&#9670;&nbsp;</a></span>ConditionalThrow() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void armnn::ConditionalThrow </td>
+ <td>(</td>
+ <td class="paramtype">bool&#160;</td>
+ <td class="paramname"><em>condition</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>message</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_exceptions_8hpp_source.xhtml#l00171">171</a> of file <a class="el" href="_exceptions_8hpp_source.xhtml">Exceptions.hpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;{</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">if</span> (!condition)</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; {</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="keywordflow">throw</span> ExceptionType(message);</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; }</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a6ed414c05eb6d4c89e0e4a475a0479c0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6ed414c05eb6d4c89e0e4a475a0479c0">&#9670;&nbsp;</a></span>ConditionalThrow() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void armnn::ConditionalThrow </td>
+ <td>(</td>
+ <td class="paramtype">bool&#160;</td>
+ <td class="paramname"><em>condition</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_exceptions_8hpp_source.xhtml#l00180">180</a> of file <a class="el" href="_exceptions_8hpp_source.xhtml">Exceptions.hpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;{</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keywordflow">if</span> (!condition)</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; {</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="keywordflow">throw</span> ExceptionType();</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; }</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="ae57b7f9e2cb7080bf10b28d1f72b558e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae57b7f9e2cb7080bf10b28d1f72b558e">&#9670;&nbsp;</a></span>ConditionalThrowIfNotEqual()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void armnn::ConditionalThrowIfNotEqual </td>
+ <td>(</td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>message</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const ComparedType &amp;&#160;</td>
+ <td class="paramname"><em>leftHandSide</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const ComparedType &amp;&#160;</td>
+ <td class="paramname"><em>rightHandSide</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>ComparedType must support: operator==(const ComparedType&amp;) operator&lt;&lt;(ostream&amp;, const ComparedType&amp;) </p>
+
+<p class="definition">Definition at line <a class="el" href="_exceptions_8hpp_source.xhtml#l00195">195</a> of file <a class="el" href="_exceptions_8hpp_source.xhtml">Exceptions.hpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;{</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="keywordflow">if</span> (!(leftHandSide == rightHandSide))</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; {</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; std::stringstream ss;</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; ss &lt;&lt; message &lt;&lt; <span class="stringliteral">&quot; : &quot;</span> &lt;&lt; leftHandSide &lt;&lt; <span class="stringliteral">&quot; != &quot;</span> &lt;&lt; rightHandSide;</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="keywordflow">throw</span> ExceptionType(ss.str());</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; }</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="ae9034dd6e9c5bed6badf4f7513339f74"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae9034dd6e9c5bed6badf4f7513339f74">&#9670;&nbsp;</a></span>ConfigureDetailsObject()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void armnn::ConfigureDetailsObject </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structarmnn_1_1_json_child_object.xhtml">JsonChildObject</a> &amp;&#160;</td>
+ <td class="paramname"><em>detailsObject</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::string&#160;</td>
+ <td class="paramname"><em>layerDetailsStr</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_profiling_8cpp_source.xhtml#l00295">295</a> of file <a class="el" href="_profiling_8cpp_source.xhtml">Profiling.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#a4e2dd387ba6f0dc5164b4cdf8de3262aaf7a45ae663528701f33ee482ce67af62">ExecObjectDesc</a>, <a class="el" href="_json_printer_8hpp_source.xhtml#l00044">JsonChildObject::SetAndParseDetails()</a>, and <a class="el" href="_json_printer_8hpp_source.xhtml#l00079">JsonChildObject::SetType()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160;{</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; detailsObject.SetType(JsonObjectType::ExecObjectDesc);</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; detailsObject.SetAndParseDetails(layerDetailsStr);</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160;</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="aa59f7a819c3e29d10ffc41e5c0616872"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa59f7a819c3e29d10ffc41e5c0616872">&#9670;&nbsp;</a></span>ConfigureLogging()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void ConfigureLogging </td>
+ <td>(</td>
+ <td class="paramtype">bool&#160;</td>
+ <td class="paramname"><em>printToStandardOutput</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">bool&#160;</td>
+ <td class="paramname"><em>printToDebugOutput</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3d">LogSeverity</a>&#160;</td>
+ <td class="paramname"><em>severity</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Configures the logging behaviour of the ARMNN library. </p>
+<p>printToStandardOutput: Set to true if log messages should be printed to the standard output. printToDebugOutput: Set to true if log messages be printed to a platform-specific debug output (where supported). severity: All log messages that are at this severity level or higher will be printed, others will be ignored. </p>
+<dl><dt><b>Examples: </b></dt><dd><a class="el" href="_async_execution_sample_8cpp-example.xhtml#a1">AsyncExecutionSample.cpp</a>, <a class="el" href="_custom_memory_allocator_sample_8cpp-example.xhtml#a7">CustomMemoryAllocatorSample.cpp</a>, and <a class="el" href="_simple_sample_8cpp-example.xhtml#a1">SimpleSample.cpp</a>.</dd>
+</dl>
+<p class="definition">Definition at line <a class="el" href="_utils_8cpp_source.xhtml#l00018">18</a> of file <a class="el" href="_utils_8cpp_source.xhtml">Utils.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_logging_8cpp_source.xhtml#l00191">SetAllLoggingSinks()</a>, <a class="el" href="_logging_8cpp_source.xhtml#l00073">SetLogFilter()</a>, and <a class="el" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3dadd4ec0ac4e58f7c32a01244ae91150b1">Trace</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="est_utils_2_unit_tests_8hpp_source.xhtml#l00022">ConfigureLoggingTest()</a>, <a class="el" href="_inference_test_8inl_source.xhtml#l00311">armnn::test::InferenceTestMain()</a>, <a class="el" href="_profiling_tests_8hpp_source.xhtml#l00033">LogLevelSwapper::LogLevelSwapper()</a>, <a class="el" href="_armnn_converter_8cpp_source.xhtml#l00327">main()</a>, and <a class="el" href="_profiling_tests_8hpp_source.xhtml#l00038">LogLevelSwapper::~LogLevelSwapper()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;{</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <a class="code" href="namespacearmnn.xhtml#a7f8325a4bc02f2f687ba1968b595ec0a">SetAllLoggingSinks</a>(printToStandardOutput, printToDebugOutput, <span class="keyword">false</span>);</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <a class="code" href="namespacearmnn.xhtml#ac9aad76a34137b6359a867b282ea7cfb">SetLogFilter</a>(severity);</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a7f8325a4bc02f2f687ba1968b595ec0a"><div class="ttname"><a href="namespacearmnn.xhtml#a7f8325a4bc02f2f687ba1968b595ec0a">armnn::SetAllLoggingSinks</a></div><div class="ttdeci">void SetAllLoggingSinks(bool standardOut, bool debugOut, bool coloured)</div><div class="ttdef"><b>Definition:</b> <a href="_logging_8cpp_source.xhtml#l00191">Logging.cpp:191</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ac9aad76a34137b6359a867b282ea7cfb"><div class="ttname"><a href="namespacearmnn.xhtml#ac9aad76a34137b6359a867b282ea7cfb">armnn::SetLogFilter</a></div><div class="ttdeci">void SetLogFilter(LogSeverity level)</div><div class="ttdef"><b>Definition:</b> <a href="_logging_8cpp_source.xhtml#l00073">Logging.cpp:73</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ab562537b5c1ef1e6cde9db9f5fa322bd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab562537b5c1ef1e6cde9db9f5fa322bd">&#9670;&nbsp;</a></span>ConfigureTuner()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void armnn::ConfigureTuner </td>
+ <td>(</td>
+ <td class="paramtype">arm_compute::CLTuner &amp;&#160;</td>
+ <td class="paramname"><em>tuner</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#a707090747256af276c389e0cf1cb0a9a">TuningLevel</a>&#160;</td>
+ <td class="paramname"><em>level</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_backend_context_8cpp_source.xhtml#l00115">115</a> of file <a class="el" href="_cl_backend_context_8cpp_source.xhtml">ClBackendContext.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_logging_8hpp_source.xhtml#l00205">ARMNN_LOG</a>, <a class="el" href="namespacearmnn.xhtml#a707090747256af276c389e0cf1cb0a9aafaf34f09ea1e93bfbf591e19dc0dfb9f">Exhaustive</a>, <a class="el" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>, <a class="el" href="namespacearmnn.xhtml#a707090747256af276c389e0cf1cb0a9aa6adf97f83acf6453d4a6a4b1070f3754">None</a>, <a class="el" href="namespacearmnn.xhtml#a707090747256af276c389e0cf1cb0a9aa960b44c579bc2f6818d2daaf9e4c16f0">Normal</a>, and <a class="el" href="namespacearmnn.xhtml#a707090747256af276c389e0cf1cb0a9aab571ef5b2664270d25bea4f4b61ffe68">Rapid</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_backend_context_8cpp_source.xhtml#l00140">ClBackendContext::ClBackendContext()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;{</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; tuner.set_tune_new_kernels(<span class="keyword">true</span>); <span class="comment">// Turn on tuning initially.</span></div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordflow">switch</span> (level)</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; {</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keywordflow">case</span> TuningLevel::Rapid:</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(info) &lt;&lt; <span class="stringliteral">&quot;Gpu tuning is activated. TuningLevel: Rapid (1)&quot;</span>;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; tuner.set_tuner_mode(arm_compute::CLTunerMode::RAPID);</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordflow">case</span> TuningLevel::Normal:</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(info) &lt;&lt; <span class="stringliteral">&quot;Gpu tuning is activated. TuningLevel: Normal (2)&quot;</span>;</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; tuner.set_tuner_mode(arm_compute::CLTunerMode::NORMAL);</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keywordflow">case</span> TuningLevel::Exhaustive:</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(info) &lt;&lt; <span class="stringliteral">&quot;Gpu tuning is activated. TuningLevel: Exhaustive (3)&quot;</span>;</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; tuner.set_tuner_mode(arm_compute::CLTunerMode::EXHAUSTIVE);</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordflow">case</span> TuningLevel::None:</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; tuner.set_tune_new_kernels(<span class="keyword">false</span>); <span class="comment">// Turn off tuning. Set to &quot;use&quot; only mode.</span></div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; }</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;}</div><div class="ttc" id="_logging_8hpp_xhtml_a7b6ad073975f437ec38ca7d20154727f"><div class="ttname"><a href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a></div><div class="ttdeci">#define ARMNN_LOG(severity)</div><div class="ttdef"><b>Definition:</b> <a href="_logging_8hpp_source.xhtml#l00205">Logging.hpp:205</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ac4aa9e41515b354234645f115c49de32"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac4aa9e41515b354234645f115c49de32">&#9670;&nbsp;</a></span>Convert1HWOTensorInfoToAcl()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::tuple&lt; <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>, unsigned int &gt; Convert1HWOTensorInfoToAcl </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>weightInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>inputInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a>&#160;</td>
+ <td class="paramname"><em>dataLayout</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Weights for depthwise have a datalayout of [1,H,W,O] = [1,H,W,I*M] This function coverts a <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> from [1,H,W,I*M] to [1,I*M,H,W] (if NCHW) or keeps it at [1,H,W,I*M] (if NHWC) as required by the compute library Returns a tuple of converted weights tensor info and depth multiplier. </p>
+
+<p class="definition">Definition at line <a class="el" href="_workload_utils_8cpp_source.xhtml#l00169">169</a> of file <a class="el" href="_workload_utils_8cpp_source.xhtml">WorkloadUtils.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_types_utils_8hpp_source.xhtml#l00222">GetDataLayoutName()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</a>, <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">NCHW</a>, <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">NHWC</a>, and <a class="el" href="_permute_8cpp_source.xhtml#l00098">armnnUtils::Permuted()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_workload_utils_8hpp_source.xhtml#l00189">GatherTensorHandlePairs()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;{</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> aclDepthMultiplier = 1;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; TensorInfo weightsPermuted;</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="keywordflow">if</span> (dataLayout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a>)</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; {</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="comment">// No permutation required. Data layouts are the same.</span></div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; aclDepthMultiplier = weightInfo.GetShape()[3] / inputInfo.GetShape()[3];</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; weightsPermuted = weightInfo;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; }</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dataLayout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a>)</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; {</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="comment">// [ 1, H, W, I*M] --&gt; [ 1, I * M, H, W ]</span></div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; aclDepthMultiplier = weightInfo.GetShape()[3] / inputInfo.GetShape()[1];</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; PermutationVector permutationVector{ 0, 2, 3, 1 };</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; weightsPermuted = <a class="code" href="namespacearmnn_utils.xhtml#abeaf4f6785039866fd075f4569ba8e84">armnnUtils::Permuted</a>(weightInfo, permutationVector);</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; }</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; {</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(fmt::format(<span class="stringliteral">&quot;Unknown data layout for tensor info conversion: {}&quot;</span>,</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <a class="code" href="namespacearmnn.xhtml#aeef70b7611ae71e97ab55c75ef72b210">GetDataLayoutName</a>(dataLayout)));</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; }</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160;</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordflow">return</span> std::make_tuple(weightsPermuted, aclDepthMultiplier);</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_aeef70b7611ae71e97ab55c75ef72b210"><div class="ttname"><a href="namespacearmnn.xhtml#aeef70b7611ae71e97ab55c75ef72b210">armnn::GetDataLayoutName</a></div><div class="ttdeci">constexpr const char * GetDataLayoutName(DataLayout dataLayout)</div><div class="ttdef"><b>Definition:</b> <a href="_types_utils_8hpp_source.xhtml#l00222">TypesUtils.hpp:222</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a></div></div>
+<div class="ttc" id="namespacearmnn_utils_xhtml_abeaf4f6785039866fd075f4569ba8e84"><div class="ttname"><a href="namespacearmnn_utils.xhtml#abeaf4f6785039866fd075f4569ba8e84">armnnUtils::Permuted</a></div><div class="ttdeci">armnn::TensorShape Permuted(const armnn::TensorShape &amp;srcShape, const armnn::PermutationVector &amp;mappings)</div><div class="ttdef"><b>Definition:</b> <a href="_permute_8cpp_source.xhtml#l00098">Permute.cpp:98</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="af35f79341ec6c10a8bd4c8caf0585ffb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af35f79341ec6c10a8bd4c8caf0585ffb">&#9670;&nbsp;</a></span>Convert1HWOTensorToAcl()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::tuple&lt; <a class="el" href="classarmnn_1_1_const_tensor.xhtml">ConstTensor</a>, unsigned int &gt; Convert1HWOTensorToAcl </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_const_tensor_handle.xhtml">ConstTensorHandle</a> *&#160;</td>
+ <td class="paramname"><em>weightTensor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>inputInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a>&#160;</td>
+ <td class="paramname"><em>dataLayout</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void *&#160;</td>
+ <td class="paramname"><em>permuteBuffer</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Weights for depthwise have a datalayout of [1,H,W,O] = [1,H,W,I*M] This function coverts a ConstCpuTensorHandle from [1,H,W,I*M] to [1,I*M,H,W] (if NCHW) or keeps it at [1,H,W,I*M] (if NHWC) as required by the compute library. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">weightTensor</td><td>- <a class="el" href="classarmnn_1_1_const_tensor_handle.xhtml">ConstTensorHandle</a> of weights tensor </td></tr>
+ <tr><td class="paramname">inputInfo</td><td>- <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> of input tensor </td></tr>
+ <tr><td class="paramname">dataLayout</td><td>- DataLayout of the input tensor </td></tr>
+ <tr><td class="paramname">permuteBuffer</td><td>- Pointer to memory with the size of tensor. Used for the permutation </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>tuple of transformed weights-ConstTensor and depthwise multiplier </dd></dl>
+
+<p class="definition">Definition at line <a class="el" href="_workload_utils_8cpp_source.xhtml#l00138">138</a> of file <a class="el" href="_workload_utils_8cpp_source.xhtml">WorkloadUtils.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_types_utils_8hpp_source.xhtml#l00222">GetDataLayoutName()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</a>, <a class="el" href="include_2armnn_2backends_2_tensor_handle_8hpp_source.xhtml#l00040">ConstTensorHandle::GetTensorInfo()</a>, <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">NCHW</a>, <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">NHWC</a>, and <a class="el" href="_workload_utils_8cpp_source.xhtml#l00017">PermuteTensor()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_depthwise_convolution_workload_8cpp_source.xhtml#l00075">ClDepthwiseConvolutionWorkload::ClDepthwiseConvolutionWorkload()</a>, <a class="el" href="_workload_utils_8hpp_source.xhtml#l00189">GatherTensorHandlePairs()</a>, and <a class="el" href="_neon_depthwise_convolution_workload_8cpp_source.xhtml#l00076">NeonDepthwiseConvolutionWorkload::NeonDepthwiseConvolutionWorkload()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;{</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; TensorInfo weightsInfo = weightTensor-&gt;GetTensorInfo();</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> depthMultiplier = 1;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; PermutationVector permutationVector{};</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordflow">if</span> (dataLayout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a>)</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; {</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="comment">// No permutation required. Data layouts are the same.</span></div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; depthMultiplier = weightsInfo.GetShape()[3] / inputInfo.GetShape()[3];</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; }</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dataLayout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a>)</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; {</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="comment">// [ 1, H, W, I*M] --&gt; [ 1, I * M, H, W ]</span></div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; depthMultiplier = weightsInfo.GetShape()[3] / inputInfo.GetShape()[1];</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; permutationVector = { 0, 2, 3, 1 };</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; }</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; {</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(fmt::format(<span class="stringliteral">&quot;Unknown data layout for tensor conversion: {}&quot;</span>,</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <a class="code" href="namespacearmnn.xhtml#aeef70b7611ae71e97ab55c75ef72b210">GetDataLayoutName</a>(dataLayout)));</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; }</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; ConstTensor weightsPermuted = <a class="code" href="namespacearmnn.xhtml#aafe6180ef80d9f334f3a3ba9cc0db35d">PermuteTensor</a>(weightTensor, permutationVector, permuteBuffer);</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keywordflow">return</span> std::make_tuple(weightsPermuted, depthMultiplier);</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_aafe6180ef80d9f334f3a3ba9cc0db35d"><div class="ttname"><a href="namespacearmnn.xhtml#aafe6180ef80d9f334f3a3ba9cc0db35d">armnn::PermuteTensor</a></div><div class="ttdeci">armnn::ConstTensor PermuteTensor(const ConstTensorHandle *tensor, const PermutationVector &amp;permutationVector, void *permuteBuffer)</div><div class="ttdef"><b>Definition:</b> <a href="_workload_utils_8cpp_source.xhtml#l00017">WorkloadUtils.cpp:17</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_aeef70b7611ae71e97ab55c75ef72b210"><div class="ttname"><a href="namespacearmnn.xhtml#aeef70b7611ae71e97ab55c75ef72b210">armnn::GetDataLayoutName</a></div><div class="ttdeci">constexpr const char * GetDataLayoutName(DataLayout dataLayout)</div><div class="ttdef"><b>Definition:</b> <a href="_types_utils_8hpp_source.xhtml#l00222">TypesUtils.hpp:222</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="aa22a82f5240a0eb0d61135345080aa2d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa22a82f5240a0eb0d61135345080aa2d">&#9670;&nbsp;</a></span>Convert1HWOtoMIHW()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::tuple&lt; <a class="el" href="classarmnn_1_1_const_tensor.xhtml">ConstTensor</a>, unsigned int &gt; Convert1HWOtoMIHW </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_const_tensor_handle.xhtml">ConstTensorHandle</a> *&#160;</td>
+ <td class="paramname"><em>weightTensor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>inputInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> &amp;&#160;</td>
+ <td class="paramname"><em>dataLayout</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void *&#160;</td>
+ <td class="paramname"><em>permuteBuffer</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Converts a (weights) tensor from [1, H, W, I*M] = [1, H, W, O] to [M, I, H, W]. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">weightTensor</td><td>- <a class="el" href="classarmnn_1_1_const_tensor_handle.xhtml">ConstTensorHandle</a> of the weight tensor that should be converted </td></tr>
+ <tr><td class="paramname">inputInfo</td><td>- <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> of the corresponding input tensor </td></tr>
+ <tr><td class="paramname">dataLayout</td><td>- DataLayout of the input tensor e.g. NHWC or NCHW </td></tr>
+ <tr><td class="paramname">permuteBuffer</td><td>- Memory location with the same size as the weight tensor to write converted data to </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>- A tuple of <a class="el" href="classarmnn_1_1_const_tensor.xhtml" title="A tensor defined by a TensorInfo (shape and data type) and an immutable backing store. ">ConstTensor</a> and unsigned int which is the converted weightTensor and the depthMultiplier </dd></dl>
+
+<p class="definition">Definition at line <a class="el" href="_workload_utils_8cpp_source.xhtml#l00198">198</a> of file <a class="el" href="_workload_utils_8cpp_source.xhtml">WorkloadUtils.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00023">DataLayoutIndexed::GetChannelsIndex()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</a>, <a class="el" href="include_2armnn_2backends_2_tensor_handle_8hpp_source.xhtml#l00040">ConstTensorHandle::GetTensorInfo()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00448">TensorInfo::HasPerAxisQuantization()</a>, <a class="el" href="_workload_utils_8cpp_source.xhtml#l00017">PermuteTensor()</a>, and <a class="el" href="_tensor_8hpp_source.xhtml#l00193">TensorInfo::SetShape()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_workload_utils_8hpp_source.xhtml#l00189">GatherTensorHandlePairs()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;{</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; TensorInfo weightsInfo = weightTensor-&gt;GetTensorInfo();</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keywordflow">if</span> (weightsInfo.HasPerAxisQuantization())</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; {</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Can&#39;t convert tensor from [1,H,W,Cout] to [M,Cin,H,W] when per channel &quot;</span></div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="stringliteral">&quot;quantization is applied.&quot;</span>);</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; }</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160;</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="comment">// Reshape weights [ 1, H, W, I*M ] --&gt; [ H, W, I, M ]</span></div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keyword">auto</span> weightsShape = weightsInfo.GetShape();</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keyword">auto</span> channelIndex = <a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml">armnnUtils::DataLayoutIndexed</a>(dataLayout).<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a861b2621ee46e4b63379988b360b8cd9">GetChannelsIndex</a>();</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> depthMultiplier = weightsShape[3] / inputInfo.GetShape()[channelIndex];</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; weightsInfo.SetShape({ weightsShape[1],</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; weightsShape[2],</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; inputInfo.GetShape()[channelIndex],</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; depthMultiplier});</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160;</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="comment">// Permute [ H, W, I, M ] --&gt; [ M, I, H, W ]</span></div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; PermutationVector permutationVector = { 2, 3, 1, 0 };</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; ConstTensor weightsPermuted = <a class="code" href="namespacearmnn.xhtml#aafe6180ef80d9f334f3a3ba9cc0db35d">PermuteTensor</a>(weightTensor, permutationVector, permuteBuffer);</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keywordflow">return</span> std::make_tuple(weightsPermuted, depthMultiplier);</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_aafe6180ef80d9f334f3a3ba9cc0db35d"><div class="ttname"><a href="namespacearmnn.xhtml#aafe6180ef80d9f334f3a3ba9cc0db35d">armnn::PermuteTensor</a></div><div class="ttdeci">armnn::ConstTensor PermuteTensor(const ConstTensorHandle *tensor, const PermutationVector &amp;permutationVector, void *permuteBuffer)</div><div class="ttdef"><b>Definition:</b> <a href="_workload_utils_8cpp_source.xhtml#l00017">WorkloadUtils.cpp:17</a></div></div>
+<div class="ttc" id="classarmnn_utils_1_1_data_layout_indexed_xhtml"><div class="ttname"><a href="classarmnn_utils_1_1_data_layout_indexed.xhtml">armnnUtils::DataLayoutIndexed</a></div><div class="ttdoc">Provides access to the appropriate indexes for Channels, Height and Width based on DataLayout...</div><div class="ttdef"><b>Definition:</b> <a href="_data_layout_indexed_8hpp_source.xhtml#l00017">DataLayoutIndexed.hpp:17</a></div></div>
+<div class="ttc" id="classarmnn_utils_1_1_data_layout_indexed_xhtml_a861b2621ee46e4b63379988b360b8cd9"><div class="ttname"><a href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a861b2621ee46e4b63379988b360b8cd9">armnnUtils::DataLayoutIndexed::GetChannelsIndex</a></div><div class="ttdeci">unsigned int GetChannelsIndex() const</div><div class="ttdef"><b>Definition:</b> <a href="_data_layout_indexed_8hpp_source.xhtml#l00023">DataLayoutIndexed.hpp:23</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ad701d0d29baa4266ab4d33b090aa661c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad701d0d29baa4266ab4d33b090aa661c">&#9670;&nbsp;</a></span>ConvertActivationDescriptorToAclActivationLayerInfo() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::ActivationLayerInfo armnn::ConvertActivationDescriptorToAclActivationLayerInfo </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>actDesc</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00085">85</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.xhtml">ArmComputeUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00061">ConvertActivationFunctionToAclActivationFunction()</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00061">ActivationDescriptor::m_A</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00063">ActivationDescriptor::m_B</a>, and <a class="el" href="_descriptors_8hpp_source.xhtml#l00059">ActivationDescriptor::m_Function</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_activation_workload_8cpp_source.xhtml#l00032">ClActivationWorkload::ClActivationWorkload()</a>, <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00269">ComputeConv3DInfo()</a>, <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00092">ConvertActivationDescriptorToAclActivationLayerInfo()</a>, <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00103">ConvertAdditionalInfoToAclActivationLayerInfo()</a>, <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00168">ConvertFullyConnectedDescriptorToAclFullyConnectedLayerInfo()</a>, and <a class="el" href="_neon_activation_workload_8cpp_source.xhtml#l00032">NeonActivationWorkload::NeonActivationWorkload()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;{</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordflow">return</span> arm_compute::ActivationLayerInfo(<a class="code" href="namespacearmnn.xhtml#afdba36f125621d775d471f0daf613df2">ConvertActivationFunctionToAclActivationFunction</a>(actDesc.m_Function),</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; actDesc.m_A, actDesc.m_B);</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_afdba36f125621d775d471f0daf613df2"><div class="ttname"><a href="namespacearmnn.xhtml#afdba36f125621d775d471f0daf613df2">armnn::ConvertActivationFunctionToAclActivationFunction</a></div><div class="ttdeci">arm_compute::ActivationLayerInfo::ActivationFunction ConvertActivationFunctionToAclActivationFunction(ActivationFunction armnnFunction)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.xhtml#l00061">ArmComputeUtils.hpp:61</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="af6d517245110f6b1ca702da0cbbf4518"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af6d517245110f6b1ca702da0cbbf4518">&#9670;&nbsp;</a></span>ConvertActivationDescriptorToAclActivationLayerInfo() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::ActivationLayerInfo armnn::ConvertActivationDescriptorToAclActivationLayerInfo </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> *&#160;</td>
+ <td class="paramname"><em>activationDescPtr</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00092">92</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.xhtml">ArmComputeUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00085">ConvertActivationDescriptorToAclActivationLayerInfo()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;{</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordflow">if</span> (activationDescPtr != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; {</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#af6d517245110f6b1ca702da0cbbf4518">ConvertActivationDescriptorToAclActivationLayerInfo</a>(static_cast&lt;ActivationDescriptor&gt;(</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; *activationDescPtr));</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; }</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordflow">return</span> arm_compute::ActivationLayerInfo();</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_af6d517245110f6b1ca702da0cbbf4518"><div class="ttname"><a href="namespacearmnn.xhtml#af6d517245110f6b1ca702da0cbbf4518">armnn::ConvertActivationDescriptorToAclActivationLayerInfo</a></div><div class="ttdeci">arm_compute::ActivationLayerInfo ConvertActivationDescriptorToAclActivationLayerInfo(const ActivationDescriptor *activationDescPtr)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.xhtml#l00092">ArmComputeUtils.hpp:92</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="afdba36f125621d775d471f0daf613df2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afdba36f125621d775d471f0daf613df2">&#9670;&nbsp;</a></span>ConvertActivationFunctionToAclActivationFunction()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::ActivationLayerInfo::ActivationFunction armnn::ConvertActivationFunctionToAclActivationFunction </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9ea">ActivationFunction</a>&#160;</td>
+ <td class="paramname"><em>armnnFunction</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00061">61</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.xhtml">ArmComputeUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa1e34af023adeb7d5f484f8eb4b9826b6">Abs</a>, <a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaabc5a0f0d6e7cf7fca73299dcd46c0f0d">BoundedReLu</a>, <a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaaed67cf7d54c570e4c4891800f085f41d">Elu</a>, <a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa0877e5b3fbe9d7569df6399609ed0186">HardSwish</a>, <a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaacb7667f5ec2f6e8a5943b781ba6c2735">LeakyReLu</a>, <a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa32a843da6ea40ab3b17a3421ccdf671b">Linear</a>, <a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa3d90c0a5ab3fcf8e6f6608cb3d3a1559">ReLu</a>, <a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa21eebb164e4b8b9bcf64fdb4d8d5dff4">Sigmoid</a>, <a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa6bba7052636d1740303b1b2ef3b53fef">SoftReLu</a>, <a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaaae77f3ad25595e35b327334d89410054">Sqrt</a>, <a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaaceb46ca115d05c51aa5a16a8867c3304">Square</a>, and <a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa23b68da1de2b77d74da9da2635722a3e">TanH</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00085">ConvertActivationDescriptorToAclActivationLayerInfo()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;{</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keyword">using</span> AclActivationFunction = <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9ea">arm_compute::ActivationLayerInfo::ActivationFunction</a>;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordflow">switch</span> (armnnFunction)</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; {</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">case</span> ActivationFunction::Linear: <span class="keywordflow">return</span> AclActivationFunction::LINEAR;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="comment">// Arm compute&#39;s &#39;logistic&#39; function is non-parameterized, so it is exactly a sigmoid function.</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">case</span> ActivationFunction::Sigmoid: <span class="keywordflow">return</span> AclActivationFunction::LOGISTIC;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordflow">case</span> ActivationFunction::ReLu: <span class="keywordflow">return</span> AclActivationFunction::RELU;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordflow">case</span> ActivationFunction::BoundedReLu: <span class="keywordflow">return</span> AclActivationFunction::LU_BOUNDED_RELU;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordflow">case</span> ActivationFunction::SoftReLu: <span class="keywordflow">return</span> AclActivationFunction::SOFT_RELU;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">case</span> ActivationFunction::LeakyReLu: <span class="keywordflow">return</span> AclActivationFunction::LEAKY_RELU;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordflow">case</span> ActivationFunction::Abs: <span class="keywordflow">return</span> AclActivationFunction::ABS;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">case</span> ActivationFunction::Sqrt: <span class="keywordflow">return</span> AclActivationFunction::SQRT;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">case</span> ActivationFunction::Square: <span class="keywordflow">return</span> AclActivationFunction::SQUARE;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">case</span> ActivationFunction::TanH: <span class="keywordflow">return</span> AclActivationFunction::TANH;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">case</span> ActivationFunction::Elu: <span class="keywordflow">return</span> AclActivationFunction::ELU;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordflow">case</span> ActivationFunction::HardSwish: <span class="keywordflow">return</span> AclActivationFunction::HARD_SWISH;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Unsupported activation function&quot;</span>);</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; }</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a56297e0f7b215eea46c818cb7528d9ea"><div class="ttname"><a href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9ea">armnn::ActivationFunction</a></div><div class="ttdeci">ActivationFunction</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00073">Types.hpp:73</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="abfb0841058a8190d30851f07eca3991f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abfb0841058a8190d30851f07eca3991f">&#9670;&nbsp;</a></span>ConvertAdditionalInfoToAclActivationLayerInfo()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::ActivationLayerInfo armnn::ConvertAdditionalInfoToAclActivationLayerInfo </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_queue_descriptor.xhtml">QueueDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>queueDescriptor</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00103">103</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.xhtml">ArmComputeUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00085">ConvertActivationDescriptorToAclActivationLayerInfo()</a>, and <a class="el" href="include_2armnn_2backends_2_workload_data_8hpp_source.xhtml#l00037">QueueDescriptor::GetAdditionalInformation()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_addition_workload_8cpp_source.xhtml#l00021">ClAdditionWorkload::ClAdditionWorkload()</a>, <a class="el" href="_cl_division_workload_8cpp_source.xhtml#l00034">ClDivisionWorkload::ClDivisionWorkload()</a>, <a class="el" href="_cl_multiplication_workload_8cpp_source.xhtml#l00047">ClMultiplicationWorkload::ClMultiplicationWorkload()</a>, <a class="el" href="_cl_subtraction_workload_8cpp_source.xhtml#l00021">ClSubtractionWorkload::ClSubtractionWorkload()</a>, <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00286">ComputeConv3DInfo()</a>, <a class="el" href="_neon_addition_workload_8cpp_source.xhtml#l00040">NeonAdditionWorkload::NeonAdditionWorkload()</a>, <a class="el" href="_neon_division_workload_8cpp_source.xhtml#l00036">NeonDivisionWorkload::NeonDivisionWorkload()</a>, <a class="el" href="_neon_multiplication_workload_8cpp_source.xhtml#l00047">NeonMultiplicationWorkload::NeonMultiplicationWorkload()</a>, and <a class="el" href="_neon_subtraction_workload_8cpp_source.xhtml#l00041">NeonSubtractionWorkload::NeonSubtractionWorkload()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;{</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keyword">const</span> ActivationDescriptor* activationDescPtr = queueDescriptor.GetAdditionalInformation&lt;ActivationDescriptor&gt;();</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keywordflow">if</span> (activationDescPtr != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; {</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#af6d517245110f6b1ca702da0cbbf4518">ConvertActivationDescriptorToAclActivationLayerInfo</a>(static_cast&lt;ActivationDescriptor&gt;(</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; *activationDescPtr));</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; }</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordflow">return</span> arm_compute::ActivationLayerInfo();</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_af6d517245110f6b1ca702da0cbbf4518"><div class="ttname"><a href="namespacearmnn.xhtml#af6d517245110f6b1ca702da0cbbf4518">armnn::ConvertActivationDescriptorToAclActivationLayerInfo</a></div><div class="ttdeci">arm_compute::ActivationLayerInfo ConvertActivationDescriptorToAclActivationLayerInfo(const ActivationDescriptor *activationDescPtr)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.xhtml#l00092">ArmComputeUtils.hpp:92</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a33d586a0d9bbb1f12ac7a3ba8d03e21e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a33d586a0d9bbb1f12ac7a3ba8d03e21e">&#9670;&nbsp;</a></span>ConvertBf16ToFp32Weight()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">LayerT* armnn::ConvertBf16ToFp32Weight </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_layer.xhtml">Layer</a> *&#160;</td>
+ <td class="paramname"><em>l</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.xhtml#l00647">647</a> of file <a class="el" href="_network_8cpp_source.xhtml">Network.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">BFloat16</a>, <a class="el" href="_floating_point_converter_8cpp_source.xhtml#l00061">FloatingPointConverter::ConvertBFloat16ToFloat32()</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4adb033d2f81b68f9a17e8f62de69fed4a">Convolution2d</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">Float32</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4acab78faff25393e9defd1911cb58133e">FullyConnected</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00198">TensorInfo::GetDataType()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00196">TensorInfo::GetNumElements()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</a>, and <a class="el" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.</p>
+<div class="fragment"><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160;{</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; LayerT* layer = PolymorphicDowncast&lt;LayerT*&gt;(l);</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; <span class="keywordflow">if</span> ((layer-&gt;GetType() == LayerType::Convolution2d || layer-&gt;GetType() == <a class="code" href="namespacearmnn.xhtml#a435f9350a94adfbb0d5b9abb5f430914">LayerType::FullyConnected</a>)</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; &amp;&amp; layer-&gt;m_Weight)</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; {</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; <span class="keyword">const</span> TensorInfo&amp; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a> = layer-&gt;m_Weight-&gt;GetTensorInfo();</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160;</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; <span class="keywordflow">if</span> (info.GetDataType() == DataType::BFloat16)</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; {</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; std::vector&lt;float&gt; newValues(info.GetNumElements());</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160;</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; <a class="code" href="classarmnn_utils_1_1_floating_point_converter.xhtml#af9e9df90cb6319b0406acf9a3bc27667">armnnUtils::FloatingPointConverter::ConvertBFloat16ToFloat32</a>(</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; layer-&gt;m_Weight-&gt;template GetConstTensor&lt;armnn::BFloat16&gt;(), info.GetNumElements(), newValues.data());</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160;</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; TensorInfo newInfo(info.GetShape(), DataType::Float32);</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; ConstTensor newInput(newInfo, newValues);</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; layer-&gt;m_Weight.reset(<span class="keyword">new</span> ScopedTensorHandle(newInput));</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; }</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; }</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; <span class="keywordflow">return</span> layer;</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160;}</div><div class="ttc" id="classarmnn_utils_1_1_floating_point_converter_xhtml_af9e9df90cb6319b0406acf9a3bc27667"><div class="ttname"><a href="classarmnn_utils_1_1_floating_point_converter.xhtml#af9e9df90cb6319b0406acf9a3bc27667">armnnUtils::FloatingPointConverter::ConvertBFloat16ToFloat32</a></div><div class="ttdeci">static void ConvertBFloat16ToFloat32(const void *srcBFloat16Buffer, size_t numElements, float *dstFloat32Buffer)</div><div class="ttdef"><b>Definition:</b> <a href="_floating_point_converter_8cpp_source.xhtml#l00061">FloatingPointConverter.cpp:61</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c"><div class="ttname"><a href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">armnn::BoostLogSeverityMapping::info</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a435f9350a94adfbb0d5b9abb5f430914"><div class="ttname"><a href="namespacearmnn.xhtml#a435f9350a94adfbb0d5b9abb5f430914">armnn::FullyConnected</a></div><div class="ttdeci">void FullyConnected(const TensorShape &amp;rInputShape, Decoder&lt; float &gt; &amp;rInputDecoder, const TensorShape &amp;rOutputShape, Encoder&lt; float &gt; &amp;rOutputEncoder, const TensorShape &amp;rWeightsShape, Decoder&lt; float &gt; &amp;rWeightDecoder, Decoder&lt; float &gt; *pBiasDecoder, const bool biasEnabled, const unsigned int K, const bool transposeWeights)</div><div class="ttdoc">Performs a matrix multiplication and optionally adds a bias. </div><div class="ttdef"><b>Definition:</b> <a href="backends_2reference_2workloads_2_fully_connected_8cpp_source.xhtml#l00015">FullyConnected.cpp:15</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ac1438a97bbc2aee5cd8470d9d2a3aebc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac1438a97bbc2aee5cd8470d9d2a3aebc">&#9670;&nbsp;</a></span>ConvertComparisonOperationToAcl()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::ComparisonOperation armnn::ConvertComparisonOperationToAcl </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_comparison_descriptor.xhtml">ComparisonDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00115">115</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.xhtml">ArmComputeUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58caf5f286e73bda105e538310b3190f75c5">Equal</a>, <a class="el" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58ca8768a6821cd735aea4f5b0df88c1fc6a">Greater</a>, <a class="el" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58ca6f2f0aefb3d22da0f3839453add5f937">GreaterOrEqual</a>, <a class="el" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58ca1cfdf0e8d0c87a228c1f40d9bee7888b">Less</a>, <a class="el" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58caa4cbdbb6070a5abb35fc95ecf1e22c14">LessOrEqual</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00105">ComparisonDescriptor::m_Operation</a>, and <a class="el" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58ca19bb0af2c3c530538cb41aff7f235b96">NotEqual</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_comparison_workload_8cpp_source.xhtml#l00042">ClComparisonWorkload::ClComparisonWorkload()</a>, and <a class="el" href="_neon_comparison_workload_8cpp_source.xhtml#l00034">NeonComparisonWorkload::NeonComparisonWorkload()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;{</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordflow">switch</span> (descriptor.m_Operation)</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; {</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordflow">case</span> ComparisonOperation::Greater: <span class="keywordflow">return</span> arm_compute::ComparisonOperation::Greater;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keywordflow">case</span> ComparisonOperation::GreaterOrEqual: <span class="keywordflow">return</span> arm_compute::ComparisonOperation::GreaterEqual;</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keywordflow">case</span> ComparisonOperation::Less: <span class="keywordflow">return</span> arm_compute::ComparisonOperation::Less;</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordflow">case</span> ComparisonOperation::LessOrEqual: <span class="keywordflow">return</span> arm_compute::ComparisonOperation::LessEqual;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keywordflow">case</span> ComparisonOperation::Equal: <span class="keywordflow">return</span> arm_compute::ComparisonOperation::Equal;</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keywordflow">case</span> ComparisonOperation::NotEqual: <span class="keywordflow">return</span> arm_compute::ComparisonOperation::NotEqual;</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Unsupported comparison function&quot;</span>);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; }</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="ae2e0c1d8160fadce44d479379790718e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae2e0c1d8160fadce44d479379790718e">&#9670;&nbsp;</a></span>ConvertFullyConnectedDescriptorToAclFullyConnectedLayerInfo() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::FullyConnectedLayerInfo armnn::ConvertFullyConnectedDescriptorToAclFullyConnectedLayerInfo </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_fully_connected_descriptor.xhtml">FullyConnectedDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>fullyConnectedDesc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> *&#160;</td>
+ <td class="paramname"><em>activationDesc</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00168">168</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.xhtml">ArmComputeUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00085">ConvertActivationDescriptorToAclActivationLayerInfo()</a>, and <a class="el" href="_descriptors_8hpp_source.xhtml#l00493">FullyConnectedDescriptor::m_TransposeWeightMatrix</a>.</p>
+<div class="fragment"><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;{</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; arm_compute::FullyConnectedLayerInfo fc_info;</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; fc_info.transpose_weights = fullyConnectedDesc.m_TransposeWeightMatrix;</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; fc_info.activation_info = <a class="code" href="namespacearmnn.xhtml#af6d517245110f6b1ca702da0cbbf4518">ConvertActivationDescriptorToAclActivationLayerInfo</a>(activationDesc);</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keywordflow">return</span> fc_info;</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_af6d517245110f6b1ca702da0cbbf4518"><div class="ttname"><a href="namespacearmnn.xhtml#af6d517245110f6b1ca702da0cbbf4518">armnn::ConvertActivationDescriptorToAclActivationLayerInfo</a></div><div class="ttdeci">arm_compute::ActivationLayerInfo ConvertActivationDescriptorToAclActivationLayerInfo(const ActivationDescriptor *activationDescPtr)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.xhtml#l00092">ArmComputeUtils.hpp:92</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a2f12c1f572fb15978e51cf646d42d4dc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2f12c1f572fb15978e51cf646d42d4dc">&#9670;&nbsp;</a></span>ConvertFullyConnectedDescriptorToAclFullyConnectedLayerInfo() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::FullyConnectedLayerInfo armnn::ConvertFullyConnectedDescriptorToAclFullyConnectedLayerInfo </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_fully_connected_descriptor.xhtml">FullyConnectedDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>fullyConnectedDesc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">arm_compute::ActivationLayerInfo&#160;</td>
+ <td class="paramname"><em>activationLayerInfo</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00178">178</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.xhtml">ArmComputeUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_descriptors_8hpp_source.xhtml#l00493">FullyConnectedDescriptor::m_TransposeWeightMatrix</a>.</p>
+<div class="fragment"><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;{</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; arm_compute::FullyConnectedLayerInfo fc_info;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; fc_info.transpose_weights = fullyConnectedDesc.m_TransposeWeightMatrix;</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; fc_info.activation_info = activationLayerInfo;</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="keywordflow">return</span> fc_info;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a9cdee30c21f3dd630b4e460527105b74"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9cdee30c21f3dd630b4e460527105b74">&#9670;&nbsp;</a></span>ConvertLogSeverity()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3d">LogSeverity</a> armnn::ConvertLogSeverity </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407">BoostLogSeverityMapping</a>&#160;</td>
+ <td class="paramname"><em>severity</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_logging_8hpp_source.xhtml#l00199">199</a> of file <a class="el" href="_logging_8hpp_source.xhtml">Logging.hpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;{</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><a class="code" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3d">LogSeverity</a><span class="keyword">&gt;</span>(severity);</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a93a3ba385cad27c4774e5fe64c025d3d"><div class="ttname"><a href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3d">armnn::LogSeverity</a></div><div class="ttdeci">LogSeverity</div><div class="ttdef"><b>Definition:</b> <a href="_utils_8hpp_source.xhtml#l00014">Utils.hpp:14</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ad69ffa576a596b9eb20ab6a41420c541"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad69ffa576a596b9eb20ab6a41420c541">&#9670;&nbsp;</a></span>ConvertMaskToACLFormat()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int32_t ConvertMaskToACLFormat </td>
+ <td>(</td>
+ <td class="paramtype">int32_t&#160;</td>
+ <td class="paramname"><em>mask</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int32_t&#160;</td>
+ <td class="paramname"><em>numDim</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_workload_utils_8cpp_source.xhtml#l00283">283</a> of file <a class="el" href="_workload_utils_8cpp_source.xhtml">WorkloadUtils.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_strided_slice_workload_8cpp_source.xhtml#l00055">ClStridedSliceWorkload::ClStridedSliceWorkload()</a>, <a class="el" href="_workload_utils_8hpp_source.xhtml#l00189">GatherTensorHandlePairs()</a>, and <a class="el" href="_neon_strided_slice_workload_8cpp_source.xhtml#l00049">NeonStridedSliceWorkload::NeonStridedSliceWorkload()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160;{</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; int32_t reversedMask = 0;</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; armnn::numeric_cast&lt;unsigned int&gt;(numDim); ++i)</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; {</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="comment">// Check if bit set in mask for each dimension</span></div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; int32_t bit = (mask &amp; 1 &lt;&lt; i) != 0;</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="comment">// Increment the new mask with the bits reversed</span></div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; reversedMask += (bit &lt;&lt; std::max(numDim-(armnn::numeric_cast&lt;int&gt;(i)+1), 0));</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; }</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keywordflow">return</span> reversedMask;</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="aa5baabb8e3a4aa6cbdcab419d743e747"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa5baabb8e3a4aa6cbdcab419d743e747">&#9670;&nbsp;</a></span>ConvertNormalizationAlgorithmChannelToAclNormType()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::NormType armnn::ConvertNormalizationAlgorithmChannelToAclNormType </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#abe18a5033f2ab9c0de82c676b48f5437">NormalizationAlgorithmChannel</a>&#160;</td>
+ <td class="paramname"><em>channelType</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00156">156</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.xhtml">ArmComputeUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#abe18a5033f2ab9c0de82c676b48f5437a810f43f3996922151c39b76143faeecc">Across</a>, and <a class="el" href="namespacearmnn.xhtml#abe18a5033f2ab9c0de82c676b48f5437a37bac6dce4f46277d89bfa3003e2e39b">Within</a>.</p>
+<div class="fragment"><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;{</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="keyword">using</span> arm_compute::NormType;</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keywordflow">switch</span> (channelType)</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; {</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="keywordflow">case</span> NormalizationAlgorithmChannel::Across: <span class="keywordflow">return</span> NormType::CROSS_MAP;</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keywordflow">case</span> NormalizationAlgorithmChannel::Within: <span class="keywordflow">return</span> NormType::IN_MAP_2D;</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Unsupported normalization algorithm channel type&quot;</span>);</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; }</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a8f3bfacadfd6d2146d6ccd299dabc7aa"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8f3bfacadfd6d2146d6ccd299dabc7aa">&#9670;&nbsp;</a></span>ConvertOutputShapeRoundingToAclDimensionRoundingType()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::DimensionRoundingType armnn::ConvertOutputShapeRoundingToAclDimensionRoundingType </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#adf2e5515c4c36a3e7e46bb8b83c6754e">OutputShapeRounding</a>&#160;</td>
+ <td class="paramname"><em>rounding</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00142">142</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.xhtml">ArmComputeUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#adf2e5515c4c36a3e7e46bb8b83c6754ea3237fbc8204064c106cb9080088a17cb">Ceiling</a>, and <a class="el" href="namespacearmnn.xhtml#adf2e5515c4c36a3e7e46bb8b83c6754eaf3f6d0343d56ce88ce7958170ed05cb3">Floor</a>.</p>
+<div class="fragment"><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;{</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keyword">using</span> arm_compute::DimensionRoundingType;</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keywordflow">switch</span> (rounding)</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; {</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keywordflow">case</span> OutputShapeRounding::Ceiling: <span class="keywordflow">return</span> DimensionRoundingType::CEIL;</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordflow">case</span> OutputShapeRounding::Floor: <span class="keywordflow">return</span> DimensionRoundingType::FLOOR;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Unsupported Output Shape Rounding type&quot;</span>);</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; }</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="adf5a024ace0dbe2af2d5b1a1b9623771"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adf5a024ace0dbe2af2d5b1a1b9623771">&#9670;&nbsp;</a></span>ConvertPaddingModeToAcl()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::PaddingMode armnn::ConvertPaddingModeToAcl </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="namespacearmnn.xhtml#a14d24d90ab4ba2956e92e27890ba4c91">PaddingMode</a> &amp;&#160;</td>
+ <td class="paramname"><em>paddingMode</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00303">303</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.xhtml">ArmComputeUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#a14d24d90ab4ba2956e92e27890ba4c91acb17869fe51048b5a5c4c6106551a255">Constant</a>, <a class="el" href="namespacearmnn.xhtml#a14d24d90ab4ba2956e92e27890ba4c91a74de3e45e4491e956e8dc18d841d9b00">Reflect</a>, and <a class="el" href="namespacearmnn.xhtml#a14d24d90ab4ba2956e92e27890ba4c91af334649ef5e5d0ffe200751d07012626">Symmetric</a>.</p>
+<div class="fragment"><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160;{</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keywordflow">switch</span> (paddingMode)</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; {</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <span class="keywordflow">case</span> PaddingMode::Constant: <span class="keywordflow">return</span> arm_compute::PaddingMode::CONSTANT;</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <span class="keywordflow">case</span> PaddingMode::Reflect: <span class="keywordflow">return</span> arm_compute::PaddingMode::REFLECT;</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keywordflow">case</span> PaddingMode::Symmetric: <span class="keywordflow">return</span> arm_compute::PaddingMode::SYMMETRIC;</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Unsupported Padding Mode&quot;</span>);</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; }</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="ad256fcf8c7f4d5a240fa47f0b56d50af"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad256fcf8c7f4d5a240fa47f0b56d50af">&#9670;&nbsp;</a></span>ConvertPoolingAlgorithmToAclPoolingType()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::PoolingType armnn::ConvertPoolingAlgorithmToAclPoolingType </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#a961bbfe1db71a848eff5a1f0ab775718">PoolingAlgorithm</a>&#160;</td>
+ <td class="paramname"><em>poolingAlgorithm</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00129">129</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.xhtml">ArmComputeUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#a961bbfe1db71a848eff5a1f0ab775718ab1897515d548a960afe49ecf66a29021">Average</a>, <a class="el" href="namespacearmnn.xhtml#a961bbfe1db71a848eff5a1f0ab775718a7e6aa2d53f6ee2b1a34b017fa403cb76">L2</a>, and <a class="el" href="namespacearmnn.xhtml#a961bbfe1db71a848eff5a1f0ab775718a6a061313d22e51e0f25b7cd4dc065233">Max</a>.</p>
+<div class="fragment"><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;{</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keyword">using</span> arm_compute::PoolingType;</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordflow">switch</span> (poolingAlgorithm)</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; {</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">case</span> PoolingAlgorithm::Max: <span class="keywordflow">return</span> PoolingType::MAX;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">case</span> PoolingAlgorithm::Average: <span class="keywordflow">return</span> PoolingType::AVG;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordflow">case</span> PoolingAlgorithm::L2: <span class="keywordflow">return</span> PoolingType::L2;</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Unsupported pooling algorithm&quot;</span>);</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; }</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a03ab984d93d0f240f31274499b72e6b0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a03ab984d93d0f240f31274499b72e6b0">&#9670;&nbsp;</a></span>ConvertReductionOperationToAcl()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::ReductionOperation armnn::ConvertReductionOperationToAcl </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_reduce_descriptor.xhtml">ReduceDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00314">314</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.xhtml">ArmComputeUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_descriptors_8hpp_source.xhtml#l01503">ReduceDescriptor::m_ReduceOperation</a>, <a class="el" href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0a6a061313d22e51e0f25b7cd4dc065233">Max</a>, <a class="el" href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0a3d6c9ac08ada31c184094bbc67afe00d">Mean</a>, <a class="el" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea78d811e98514cd165dda532286610fd2">Min</a>, <a class="el" href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0a362a33c23b08e4a32a4ec53fbb82cccd">Prod</a>, and <a class="el" href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0aa0ec87054b5e5b7847d0d8780a01a3d5">Sum</a>.</p>
+<div class="fragment"><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160;{</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keywordflow">switch</span> (descriptor.m_ReduceOperation)</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; {</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="keywordflow">case</span> ReduceOperation::Sum: <span class="keywordflow">return</span> arm_compute::ReductionOperation::SUM;</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <span class="keywordflow">case</span> ReduceOperation::Mean: <span class="keywordflow">return</span> arm_compute::ReductionOperation::MEAN_SUM;</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="keywordflow">case</span> ReduceOperation::Max: <span class="keywordflow">return</span> arm_compute::ReductionOperation::MAX;</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="keywordflow">case</span> ReduceOperation::Min: <span class="keywordflow">return</span> arm_compute::ReductionOperation::MIN;</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="keywordflow">case</span> ReduceOperation::Prod: <span class="keywordflow">return</span> arm_compute::ReductionOperation::PROD;</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Unsupported Reduction operation&quot;</span>);</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; }</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="ae9bdcb8ac91731109dc423d6ed476204"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae9bdcb8ac91731109dc423d6ed476204">&#9670;&nbsp;</a></span>ConvertResizeMethodToAclInterpolationPolicy()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::InterpolationPolicy armnn::ConvertResizeMethodToAclInterpolationPolicy </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#a9a2af2f8c4af4f9efa8e79417d505ac4">ResizeMethod</a>&#160;</td>
+ <td class="paramname"><em>resizeMethod</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00187">187</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.xhtml">ArmComputeUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#a9a2af2f8c4af4f9efa8e79417d505ac4aaf17c98bbd83c27d6426d2ff3fa81d7f">Bilinear</a>, and <a class="el" href="namespacearmnn.xhtml#a9a2af2f8c4af4f9efa8e79417d505ac4aaa020331bb30d2fa2ecf7c3a0777823f">NearestNeighbor</a>.</p>
+<div class="fragment"><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;{</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="keywordflow">switch</span> (resizeMethod)</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; {</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keywordflow">case</span> ResizeMethod::Bilinear:</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="keywordflow">return</span> arm_compute::InterpolationPolicy::BILINEAR;</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keywordflow">case</span> ResizeMethod::NearestNeighbor:</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordflow">return</span> arm_compute::InterpolationPolicy::NEAREST_NEIGHBOR;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Unsupported resize method&quot;</span>);</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; }</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a8ca9f249dc67c111b8234b2c78d672cd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8ca9f249dc67c111b8234b2c78d672cd">&#9670;&nbsp;</a></span>ConvertWeightTensorFromArmnnToAcl()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classarmnn_1_1_const_tensor.xhtml">armnn::ConstTensor</a> ConvertWeightTensorFromArmnnToAcl </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_const_tensor_handle.xhtml">ConstTensorHandle</a> *&#160;</td>
+ <td class="paramname"><em>weightTensor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a>&#160;</td>
+ <td class="paramname"><em>dataLayout</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void *&#160;</td>
+ <td class="paramname"><em>permuteBuffer</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_workload_utils_8cpp_source.xhtml#l00227">227</a> of file <a class="el" href="_workload_utils_8cpp_source.xhtml">WorkloadUtils.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00015">ARMNN_ASSERT_MSG</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">Float16</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">Float32</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00300">BaseTensor&lt; MemoryType &gt;::GetDataType()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00295">BaseTensor&lt; MemoryType &gt;::GetInfo()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</a>, <a class="el" href="include_2armnn_2backends_2_tensor_handle_8hpp_source.xhtml#l00040">ConstTensorHandle::GetTensorInfo()</a>, <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">NCHW</a>, <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">NHWC</a>, <a class="el" href="_workload_utils_8cpp_source.xhtml#l00017">PermuteTensor()</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">QAsymmS8</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">QAsymmU8</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">QSymmS8</a>, and <a class="el" href="_workload_utils_8cpp_source.xhtml#l00040">ReshapeWeightsForAcl()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_workload_utils_8hpp_source.xhtml#l00189">GatherTensorHandlePairs()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160;{</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(weightTensor, <span class="stringliteral">&quot;Invalid input tensor&quot;</span>);</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(permuteBuffer, <span class="stringliteral">&quot;Invalid permute buffer&quot;</span>);</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160;</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keyword">auto</span> multiplier = weightTensor-&gt;GetTensorInfo().GetShape()[0];</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="keyword">auto</span> inputChannels = weightTensor-&gt;GetTensorInfo().GetShape()[1];</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160;</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="comment">// Convert the weight format from ArmNN&#39;s [ M, I, H, W ] (does NOT depend on the data layout) to either</span></div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="comment">// [ 1, H, W, I * M ] (if NHWC) or [ 1, I * M, H, W ] (if NCHW), as required by the compute library</span></div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160;</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="comment">// 1. Permute the weights if necessary</span></div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="comment">// If the data layout is NCHW no permutation is necessary, as a reshape to [ 1, I * M, H, W ] can be better done</span></div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="comment">// starting from the current shape of [ M, I, H, W ]</span></div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="comment">// If no permutation is necessary, leave the permutation vector empty</span></div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; PermutationVector permutationVector{};</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordflow">if</span> (dataLayout == DataLayout::NHWC)</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; {</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="comment">// The data layout is NHWC, then permute the weights from [ M, I, H, W ] to [ H, W, I, M ]</span></div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; permutationVector = { 3, 2, 0, 1 };</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; }</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; ConstTensor weightPermuted = <a class="code" href="namespacearmnn.xhtml#aafe6180ef80d9f334f3a3ba9cc0db35d">PermuteTensor</a>(weightTensor, permutationVector, permuteBuffer);</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160;</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="comment">// Shuffle the weights data to obtain the channel order needed used by Acl</span></div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="keywordflow">if</span> (multiplier &gt; 1 &amp;&amp; inputChannels &gt; 1 &amp;&amp; dataLayout == DataLayout::NCHW)</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; {</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="keywordflow">switch</span> (weightPermuted.GetDataType())</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; {</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="keywordflow">case</span> DataType::Float32:</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; weightPermuted = ReorderWeightChannelsForAcl&lt;float&gt;(weightPermuted, dataLayout, permuteBuffer);</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="keywordflow">case</span> DataType::Float16:</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; weightPermuted =</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; ReorderWeightChannelsForAcl&lt;half_float::half&gt;(weightPermuted, dataLayout, permuteBuffer);</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmS8:</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmU8:</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; weightPermuted = ReorderWeightChannelsForAcl&lt;uint8_t&gt;(weightPermuted, dataLayout, permuteBuffer);</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS8:</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; weightPermuted = ReorderWeightChannelsForAcl&lt;int8_t&gt;(weightPermuted, dataLayout, permuteBuffer);</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; }</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; }</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160;</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="comment">// 2. Reshape the weights</span></div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <a class="code" href="namespacearmnn.xhtml#a3170fdd696155a247ecd81d445c0e2e1">ReshapeWeightsForAcl</a>(weightPermuted.GetInfo(), dataLayout);</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160;</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="comment">// 3. Return both the tensor and the allocated storage to ensure that the data stays alive</span></div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keywordflow">return</span> weightPermuted;</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_aafe6180ef80d9f334f3a3ba9cc0db35d"><div class="ttname"><a href="namespacearmnn.xhtml#aafe6180ef80d9f334f3a3ba9cc0db35d">armnn::PermuteTensor</a></div><div class="ttdeci">armnn::ConstTensor PermuteTensor(const ConstTensorHandle *tensor, const PermutationVector &amp;permutationVector, void *permuteBuffer)</div><div class="ttdef"><b>Definition:</b> <a href="_workload_utils_8cpp_source.xhtml#l00017">WorkloadUtils.cpp:17</a></div></div>
+<div class="ttc" id="_assert_8hpp_xhtml_a91c4dfde57907d7698c7531785690a7f"><div class="ttname"><a href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a></div><div class="ttdeci">#define ARMNN_ASSERT_MSG(COND, MSG)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00015">Assert.hpp:15</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a3170fdd696155a247ecd81d445c0e2e1"><div class="ttname"><a href="namespacearmnn.xhtml#a3170fdd696155a247ecd81d445c0e2e1">armnn::ReshapeWeightsForAcl</a></div><div class="ttdeci">void ReshapeWeightsForAcl(TensorInfo &amp;weightInfo, DataLayout dataLayout)</div><div class="ttdef"><b>Definition:</b> <a href="_workload_utils_8cpp_source.xhtml#l00040">WorkloadUtils.cpp:40</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a1e8288eac7e909fdb58b6113d816763a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1e8288eac7e909fdb58b6113d816763a">&#9670;&nbsp;</a></span>ConvertWeightTensorInfoFromArmnnToAcl()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> ConvertWeightTensorInfoFromArmnnToAcl </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>weightInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a>&#160;</td>
+ <td class="paramname"><em>dataLayout</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_workload_utils_8cpp_source.xhtml#l00114">114</a> of file <a class="el" href="_workload_utils_8cpp_source.xhtml">WorkloadUtils.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">NHWC</a>, <a class="el" href="_permute_8cpp_source.xhtml#l00098">armnnUtils::Permuted()</a>, and <a class="el" href="_workload_utils_8cpp_source.xhtml#l00040">ReshapeWeightsForAcl()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_workload_utils_8hpp_source.xhtml#l00189">GatherTensorHandlePairs()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;{</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="comment">// Convert the weight format from ArmNN&#39;s [ M, I, H, W ] (does NOT depend on the data layout) to either</span></div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="comment">// [ 1, H, W, I * M ] (if NHWC) or [ 1, I * M, H, W ] (if NCHW), as required by the compute library</span></div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="comment">// 1. Permute the weights if necessary</span></div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="comment">// If the data layout is NCHW no permutation is necessary, as a reshape to [ 1, I * M, H, W ] can be better done</span></div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="comment">// starting from the current shape of [ M, I, H, W ]</span></div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; TensorInfo weightPermutedInfo(weightInfo);</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keywordflow">if</span> (dataLayout == DataLayout::NHWC)</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; {</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="comment">// The data layout is NHWC, then permute the weights from [ M, I, H, W ] to [ H, W, I, M ]</span></div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; PermutationVector permutationVector{ 3, 2, 0, 1 };</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; weightPermutedInfo = <a class="code" href="namespacearmnn_utils.xhtml#abeaf4f6785039866fd075f4569ba8e84">armnnUtils::Permuted</a>(weightInfo, permutationVector);</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; }</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="comment">// 2. Reshape the weights</span></div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <a class="code" href="namespacearmnn.xhtml#a3170fdd696155a247ecd81d445c0e2e1">ReshapeWeightsForAcl</a>(weightPermutedInfo, dataLayout);</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="comment">// 3. Return the permuted weight info</span></div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordflow">return</span> weightPermutedInfo;</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a3170fdd696155a247ecd81d445c0e2e1"><div class="ttname"><a href="namespacearmnn.xhtml#a3170fdd696155a247ecd81d445c0e2e1">armnn::ReshapeWeightsForAcl</a></div><div class="ttdeci">void ReshapeWeightsForAcl(TensorInfo &amp;weightInfo, DataLayout dataLayout)</div><div class="ttdef"><b>Definition:</b> <a href="_workload_utils_8cpp_source.xhtml#l00040">WorkloadUtils.cpp:40</a></div></div>
+<div class="ttc" id="namespacearmnn_utils_xhtml_abeaf4f6785039866fd075f4569ba8e84"><div class="ttname"><a href="namespacearmnn_utils.xhtml#abeaf4f6785039866fd075f4569ba8e84">armnnUtils::Permuted</a></div><div class="ttdeci">armnn::TensorShape Permuted(const armnn::TensorShape &amp;srcShape, const armnn::PermutationVector &amp;mappings)</div><div class="ttdef"><b>Definition:</b> <a href="_permute_8cpp_source.xhtml#l00098">Permute.cpp:98</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="af98115cd07776d3fa8424434d2a7a897"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af98115cd07776d3fa8424434d2a7a897">&#9670;&nbsp;</a></span>Convolve()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Convolve </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> &amp;&#160;</td>
+ <td class="paramname"><em>rInputShape</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>rInputDecoder</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> &amp;&#160;</td>
+ <td class="paramname"><em>rOutputShape</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>rOutputEncoder</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> &amp;&#160;</td>
+ <td class="paramname"><em>rFilterShape</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>rFilterDecoder</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">bool&#160;</td>
+ <td class="paramname"><em>biasEnabled</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; *&#160;</td>
+ <td class="paramname"><em>pBiasDecoder</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a>&#160;</td>
+ <td class="paramname"><em>dataLayout</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>paddingTop</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>paddingLeft</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>xStride</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>yStride</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>xDilation</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>yDilation</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">bool&#160;</td>
+ <td class="paramname"><em>depthwise</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_conv_impl_8cpp_source.xhtml#l00071">71</a> of file <a class="el" href="_conv_impl_8cpp_source.xhtml">ConvImpl.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="classarmnn_1_1_decoder.xhtml#aafe0168dd5ece89e7c62e8d83a4e57cd">Decoder&lt; IType &gt;::DecodeTensor()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00023">DataLayoutIndexed::GetChannelsIndex()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00022">DataLayoutIndexed::GetDataLayout()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00024">DataLayoutIndexed::GetHeightIndex()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00025">DataLayoutIndexed::GetWidthIndex()</a>, <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">NHWC</a>, and <a class="el" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_ref_depthwise_convolution2d_workload_8cpp_source.xhtml#l00040">RefDepthwiseConvolution2dWorkload::ExecuteAsync()</a>, and <a class="el" href="_ref_convolution2d_workload_8cpp_source.xhtml#l00053">RefConvolution2dWorkload::ExecuteAsync()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;{</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordflow">if</span> (biasEnabled &amp;&amp; !pBiasDecoder)</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; {</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Bias is enabled but the bias data is invalid&quot;</span>);</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; }</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml">armnnUtils::DataLayoutIndexed</a> dataLayoutIndexed(dataLayout);</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channelsIndex = dataLayoutIndexed.GetChannelsIndex();</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> heightIndex = dataLayoutIndexed.GetHeightIndex();</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> widthIndex = dataLayoutIndexed.GetWidthIndex();</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="comment">// Weights layout:</span></div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="comment">// Conv2d: [O,H,W,I]</span></div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="comment">// Depthwise: [1,H,W,O]</span></div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputChannels = rInputShape[channelsIndex];</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputChannels = rOutputShape[channelsIndex];</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> depthMultiplier = depthwise ? outputChannels/inputChannels : 1;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> batchSize = rOutputShape[0];</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputHeight = rOutputShape[heightIndex];</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputWidth = rOutputShape[widthIndex];</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputHeight = rInputShape[heightIndex];</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputWidth = rInputShape[widthIndex];</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> filterHeight = depthwise ? rFilterShape[1] : rFilterShape[heightIndex];</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> filterWidth = depthwise ? rFilterShape[2] : rFilterShape[widthIndex];</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keyword">const</span> std::vector&lt;float&gt; inputVec = rInputDecoder.<a class="code" href="classarmnn_1_1_decoder.xhtml#aafe0168dd5ece89e7c62e8d83a4e57cd">DecodeTensor</a>(rInputShape);</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keyword">const</span> std::vector&lt;float&gt; filterVec = rFilterDecoder.<a class="code" href="classarmnn_1_1_decoder.xhtml#aafe0168dd5ece89e7c62e8d83a4e57cd">DecodeTensor</a>(rFilterShape, depthwise);</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keyword">const</span> TensorShape biasShape{outputChannels};</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keyword">const</span> std::vector&lt;float&gt; biasVec = biasEnabled ? pBiasDecoder-&gt;<a class="code" href="classarmnn_1_1_decoder.xhtml#aafe0168dd5ece89e7c62e8d83a4e57cd">DecodeTensor</a>(biasShape) : std::vector&lt;float&gt;();</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> batchIdx = 0; batchIdx &lt; batchSize; batchIdx++)</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; {</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> cOutput = 0; cOutput &lt; outputChannels; cOutput++)</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; {</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> yOutput = 0; yOutput &lt; outputHeight; yOutput++)</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; {</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> xOutput = 0; xOutput &lt; outputWidth; xOutput++)</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; {</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="comment">// This loop goes over each output element.</span></div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keywordtype">float</span> sum = 0.0f;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="comment">// For depthwise, each output channel corresponds to exactly one input channel.</span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="comment">// For normal, must loop over each input channel.</span></div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> cInput = 0; cInput &lt; (depthwise ? 1 : inputChannels); cInput++)</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; {</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> yFilter = 0; yFilter &lt; filterHeight; yFilter++)</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; {</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> xFilter = 0; xFilter &lt; filterWidth; xFilter++)</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; {</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="comment">// This loop goes over each input element for each output element.</span></div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> filterIndex = 0;</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="comment">// Since dimensionality of kernel depends on depthwiseness, so does index.</span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keywordflow">if</span> (depthwise)</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; {</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; cInput = cOutput / depthMultiplier;</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="comment">// filterDepth = outputChannels;</span></div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; filterIndex = xFilter * outputChannels + cOutput +</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; yFilter * filterWidth * outputChannels;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; }</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; {</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="comment">// Keep this implementation, as using DataLayoutIndexed::GetIndex causes great</span></div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="comment">// performance regression.</span></div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordflow">if</span> (dataLayoutIndexed.GetDataLayout() == DataLayout::NHWC)</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; {</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; filterIndex = cOutput * filterHeight * filterWidth * inputChannels +</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; yFilter * filterWidth * inputChannels +</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; xFilter * inputChannels +</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; cInput;</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; }</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; {</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; filterIndex = cOutput * filterWidth * filterHeight * inputChannels +</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; cInput * filterWidth * filterHeight +</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; yFilter * filterWidth +</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; xFilter;</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; }</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; }</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> yInput = yOutput * yStride + yFilter * yDilation;</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> xInput = xOutput * xStride + xFilter * xDilation;</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordtype">float</span> inputValue;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="comment">// Check if we&#39;re in the padding.</span></div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="keywordflow">if</span> (yInput &lt; paddingTop || yInput &gt;= inputHeight + paddingTop ||</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; xInput &lt; paddingLeft || xInput &gt;= inputWidth + paddingLeft)</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; {</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; inputValue = 0.0f;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; }</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; {</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputIndex = 0;</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="comment">// Keep this implementation, as using DataLayoutIndexed::GetIndex causes great</span></div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <span class="comment">// performance regression.</span></div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="keywordflow">if</span> (dataLayoutIndexed.GetDataLayout() == DataLayout::NHWC)</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; {</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; inputIndex = batchIdx * inputHeight * inputWidth * inputChannels +</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; (yInput - paddingTop) * inputWidth * inputChannels +</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; (xInput - paddingLeft) * inputChannels +</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; cInput;</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; }</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; {</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; inputIndex = batchIdx * inputWidth * inputHeight * inputChannels +</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; inputWidth * inputHeight * cInput +</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; inputWidth * (yInput - paddingTop) +</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; xInput - paddingLeft;</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; }</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; inputValue = inputVec[inputIndex];</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; }</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; sum += filterVec[filterIndex] * inputValue;</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; }</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; }</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; }</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keywordflow">if</span> (biasEnabled)</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; {</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; sum += biasVec[cOutput];</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; }</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160;</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outIdx;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="keywordflow">if</span> (dataLayoutIndexed.GetDataLayout() == DataLayout::NHWC)</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; {</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; outIdx = batchIdx * outputHeight * outputWidth * outputChannels +</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; yOutput * outputWidth * outputChannels +</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; xOutput * outputChannels +</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; cOutput;</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; }</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; {</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; outIdx = batchIdx * outputHeight * outputWidth * outputChannels +</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; cOutput * outputHeight * outputWidth +</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; yOutput * outputWidth +</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; xOutput;</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; }</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160;</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; rOutputEncoder[outIdx];</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; rOutputEncoder.<a class="code" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Set</a>(sum);</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; }</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; }</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; }</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; }</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_decoder_xhtml_aafe0168dd5ece89e7c62e8d83a4e57cd"><div class="ttname"><a href="classarmnn_1_1_decoder.xhtml#aafe0168dd5ece89e7c62e8d83a4e57cd">armnn::Decoder::DecodeTensor</a></div><div class="ttdeci">virtual std::vector&lt; float &gt; DecodeTensor(const TensorShape &amp;tensorShape, bool isDepthwise=false)=0</div></div>
+<div class="ttc" id="classarmnn_1_1_encoder_xhtml_ae3b62b846a9c239f332830b9e36030eb"><div class="ttname"><a href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">armnn::Encoder::Set</a></div><div class="ttdeci">virtual void Set(IType right)=0</div></div>
+<div class="ttc" id="classarmnn_utils_1_1_data_layout_indexed_xhtml"><div class="ttname"><a href="classarmnn_utils_1_1_data_layout_indexed.xhtml">armnnUtils::DataLayoutIndexed</a></div><div class="ttdoc">Provides access to the appropriate indexes for Channels, Height and Width based on DataLayout...</div><div class="ttdef"><b>Definition:</b> <a href="_data_layout_indexed_8hpp_source.xhtml#l00017">DataLayoutIndexed.hpp:17</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a9750dc088a62ed91b79f636dfaa2d9a1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9750dc088a62ed91b79f636dfaa2d9a1">&#9670;&nbsp;</a></span>Convolve3d()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Convolve3d </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> &amp;&#160;</td>
+ <td class="paramname"><em>rInputShape</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>rInputDecoder</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> &amp;&#160;</td>
+ <td class="paramname"><em>rOutputShape</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>rOutputEncoder</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> &amp;&#160;</td>
+ <td class="paramname"><em>rFilterShape</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>rFilterDecoder</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">bool&#160;</td>
+ <td class="paramname"><em>biasEnabled</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; *&#160;</td>
+ <td class="paramname"><em>pBiasDecoder</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a>&#160;</td>
+ <td class="paramname"><em>dataLayout</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>paddingTop</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>paddingLeft</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>paddingFront</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>xStride</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>yStride</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>zStride</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>xDilation</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>yDilation</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>zDilation</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_conv3d_impl_8cpp_source.xhtml#l00011">11</a> of file <a class="el" href="_conv3d_impl_8cpp_source.xhtml">Conv3dImpl.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="classarmnn_1_1_decoder.xhtml#aafe0168dd5ece89e7c62e8d83a4e57cd">Decoder&lt; IType &gt;::DecodeTensor()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00023">DataLayoutIndexed::GetChannelsIndex()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00022">DataLayoutIndexed::GetDataLayout()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00026">DataLayoutIndexed::GetDepthIndex()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00024">DataLayoutIndexed::GetHeightIndex()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00025">DataLayoutIndexed::GetWidthIndex()</a>, <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a4dd0194b114cbf51da5b3a72569863ef">NDHWC</a>, and <a class="el" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_ref_convolution3d_workload_8cpp_source.xhtml#l00060">RefConvolution3dWorkload::ExecuteAsync()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;{</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordflow">if</span> (biasEnabled &amp;&amp; !pBiasDecoder)</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; {</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Bias is enabled but the bias data is invalid&quot;</span>);</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; }</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml">armnnUtils::DataLayoutIndexed</a> dataLayoutIndexed(dataLayout);</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channelsIndex = dataLayoutIndexed.GetChannelsIndex();</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> heightIndex = dataLayoutIndexed.GetHeightIndex();</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> widthIndex = dataLayoutIndexed.GetWidthIndex();</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> depthIndex = dataLayoutIndexed.GetDepthIndex();</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inChannels = rInputShape[channelsIndex];</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outChannels = rOutputShape[channelsIndex];</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> batchSize = rOutputShape[0];</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputHeight = rOutputShape[heightIndex];</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputWidth = rOutputShape[widthIndex];</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputDepth = rOutputShape[depthIndex];</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputHeight = rInputShape[heightIndex];</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputWidth = rInputShape[widthIndex];</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputDepth = rInputShape[depthIndex];</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="comment">// Conv3d weights layout: [D,H,W,I,O]</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> filterDepth = rFilterShape[0];</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> filterHeight = rFilterShape[1];</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> filterWidth = rFilterShape[2];</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keyword">const</span> std::vector&lt;float&gt; inputVec = rInputDecoder.<a class="code" href="classarmnn_1_1_decoder.xhtml#aafe0168dd5ece89e7c62e8d83a4e57cd">DecodeTensor</a>(rInputShape);</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keyword">const</span> std::vector&lt;float&gt; filterVec = rFilterDecoder.<a class="code" href="classarmnn_1_1_decoder.xhtml#aafe0168dd5ece89e7c62e8d83a4e57cd">DecodeTensor</a>(rFilterShape);</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keyword">const</span> TensorShape biasShape{outChannels};</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keyword">const</span> std::vector&lt;float&gt; biasVec = biasEnabled ? pBiasDecoder-&gt;<a class="code" href="classarmnn_1_1_decoder.xhtml#aafe0168dd5ece89e7c62e8d83a4e57cd">DecodeTensor</a>(biasShape) : std::vector&lt;float&gt;();</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> batchIdx = 0; batchIdx &lt; batchSize; batchIdx++)</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; {</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> zOutput = 0; zOutput &lt; outputDepth; zOutput++)</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; {</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> xOutput = 0; xOutput &lt; outputWidth; xOutput++)</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; {</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> yOutput = 0; yOutput &lt; outputHeight; yOutput++)</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; {</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> cOutput = 0; cOutput &lt; outChannels; cOutput++)</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; {</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="comment">// This loop goes over each output element.</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordtype">float</span> sum = 0.0f;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="comment">// Loop over each input channel.</span></div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> zFilter = 0; zFilter &lt; filterDepth; zFilter++)</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; {</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> yFilter = 0; yFilter &lt; filterHeight; yFilter++)</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; {</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> xFilter = 0; xFilter &lt; filterWidth; xFilter++)</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; {</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> cInput = 0; cInput &lt; inChannels; cInput++)</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; {</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="comment">// This loop goes over each input element for each output element.</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> filterIndex = 0;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="comment">// Conv3d weights layout: [D,H,W,I,O]</span></div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="comment">// Keep this implementation, as using DataLayoutIndexed::GetIndex</span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="comment">// causes large performance regression.</span></div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; filterIndex = zFilter * filterHeight * filterWidth * inChannels * outChannels +</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; yFilter * filterWidth * inChannels * outChannels +</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; xFilter * inChannels * outChannels +</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; cInput * outChannels +</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; cOutput;</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> yInput = yOutput * yStride + yFilter * yDilation;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> xInput = xOutput * xStride + xFilter * xDilation;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> zInput = zOutput * zStride + zFilter * zDilation;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordtype">float</span> inputValue;</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="comment">// Check if we&#39;re in the padding.</span></div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordflow">if</span> (yInput &lt; paddingTop || yInput &gt;= inputHeight + paddingTop ||</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; xInput &lt; paddingLeft || xInput &gt;= inputWidth + paddingLeft ||</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; zInput &lt; paddingFront || zInput &gt;= inputDepth + paddingFront)</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; {</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; inputValue = 0.0f;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; }</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; {</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputIndex = 0;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="comment">// Keep this implementation, as using DataLayoutIndexed::GetIndex</span></div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="comment">// causes large performance regression.</span></div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordflow">if</span> (dataLayoutIndexed.GetDataLayout() == DataLayout::NDHWC)</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; {</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; inputIndex =</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; batchIdx * inputDepth * inputHeight * inputWidth * inChannels +</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; (zInput-paddingFront) * inputHeight * inputWidth * inChannels +</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; (yInput-paddingTop) * inputWidth * inChannels +</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; (xInput-paddingLeft) * inChannels +</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; cInput;</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; }</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; {</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="comment">// NCDHW DataLayout</span></div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; inputIndex =</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; batchIdx * inputDepth * inputHeight * inputWidth * inChannels +</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; inputDepth * inputHeight * inputWidth * cInput +</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; (zInput-paddingFront) * inputHeight * inputWidth +</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; (yInput-paddingTop) * inputWidth +</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; xInput-paddingLeft;</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; }</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; inputValue = inputVec[inputIndex];</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; }</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; sum += filterVec[filterIndex] * inputValue;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; }</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; }</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; }</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; }</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keywordflow">if</span> (biasEnabled)</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; {</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; sum += biasVec[cOutput];</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; }</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outIdx;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keywordflow">if</span> (dataLayoutIndexed.GetDataLayout() == DataLayout::NDHWC)</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; {</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; outIdx = batchIdx * outputDepth * outputHeight * outputWidth * outChannels +</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; zOutput * outputHeight * outputWidth * outChannels +</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; yOutput * outputWidth * outChannels +</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; xOutput * outChannels +</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; cOutput;</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; }</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; {</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="comment">// NCDHW DataLayout</span></div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; outIdx = batchIdx * outputDepth * outputHeight * outputWidth * outChannels +</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; cOutput * outputDepth * outputHeight * outputWidth +</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; zOutput * outputHeight * outputWidth +</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; yOutput * outputWidth +</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; xOutput;</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; }</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; rOutputEncoder[outIdx];</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; rOutputEncoder.<a class="code" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Set</a>(sum);</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; }</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; }</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; }</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; }</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; }</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_decoder_xhtml_aafe0168dd5ece89e7c62e8d83a4e57cd"><div class="ttname"><a href="classarmnn_1_1_decoder.xhtml#aafe0168dd5ece89e7c62e8d83a4e57cd">armnn::Decoder::DecodeTensor</a></div><div class="ttdeci">virtual std::vector&lt; float &gt; DecodeTensor(const TensorShape &amp;tensorShape, bool isDepthwise=false)=0</div></div>
+<div class="ttc" id="classarmnn_1_1_encoder_xhtml_ae3b62b846a9c239f332830b9e36030eb"><div class="ttname"><a href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">armnn::Encoder::Set</a></div><div class="ttdeci">virtual void Set(IType right)=0</div></div>
+<div class="ttc" id="classarmnn_utils_1_1_data_layout_indexed_xhtml"><div class="ttname"><a href="classarmnn_utils_1_1_data_layout_indexed.xhtml">armnnUtils::DataLayoutIndexed</a></div><div class="ttdoc">Provides access to the appropriate indexes for Channels, Height and Width based on DataLayout...</div><div class="ttdef"><b>Definition:</b> <a href="_data_layout_indexed_8hpp_source.xhtml#l00017">DataLayoutIndexed.hpp:17</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a73447f827b995cf90d4029151514b4ba"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a73447f827b995cf90d4029151514b4ba">&#9670;&nbsp;</a></span>CopyArmComputeClTensorData()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void armnn::CopyArmComputeClTensorData </td>
+ <td>(</td>
+ <td class="paramtype">arm_compute::CLTensor &amp;&#160;</td>
+ <td class="paramname"><em>dstTensor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const T *&#160;</td>
+ <td class="paramname"><em>srcData</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_workload_utils_8hpp_source.xhtml#l00055">55</a> of file <a class="el" href="_cl_workload_utils_8hpp_source.xhtml">ClWorkloadUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_cl_workload_utils_8hpp_source.xhtml#l00020">ARMNN_SCOPED_PROFILING_EVENT_CL</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_constant_workload_8cpp_source.xhtml#l00052">ClConstantWorkload::Execute()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;{</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; {</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <a class="code" href="_cl_workload_utils_8hpp.xhtml#a9166fc90a3ea47a2c9499a810b204daf">ARMNN_SCOPED_PROFILING_EVENT_CL</a>(<span class="stringliteral">&quot;MapClTensorForWriting&quot;</span>);</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; dstTensor.map(<span class="keyword">true</span>);</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; }</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; {</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <a class="code" href="_cl_workload_utils_8hpp.xhtml#a9166fc90a3ea47a2c9499a810b204daf">ARMNN_SCOPED_PROFILING_EVENT_CL</a>(<span class="stringliteral">&quot;CopyToClTensor&quot;</span>);</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; armcomputetensorutils::CopyArmComputeITensorData&lt;T&gt;(srcData, dstTensor);</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; }</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; dstTensor.unmap();</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;}</div><div class="ttc" id="_cl_workload_utils_8hpp_xhtml_a9166fc90a3ea47a2c9499a810b204daf"><div class="ttname"><a href="_cl_workload_utils_8hpp.xhtml#a9166fc90a3ea47a2c9499a810b204daf">ARMNN_SCOPED_PROFILING_EVENT_CL</a></div><div class="ttdeci">#define ARMNN_SCOPED_PROFILING_EVENT_CL(name)</div><div class="ttdef"><b>Definition:</b> <a href="_cl_workload_utils_8hpp_source.xhtml#l00020">ClWorkloadUtils.hpp:20</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a1351e01f9fb983937caf79e353142b41"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1351e01f9fb983937caf79e353142b41">&#9670;&nbsp;</a></span>CopyArmComputeTensorData()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void armnn::CopyArmComputeTensorData </td>
+ <td>(</td>
+ <td class="paramtype">arm_compute::Tensor &amp;&#160;</td>
+ <td class="paramname"><em>dstTensor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const T *&#160;</td>
+ <td class="paramname"><em>srcData</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_workload_utils_8hpp_source.xhtml#l00054">54</a> of file <a class="el" href="_neon_workload_utils_8hpp_source.xhtml">NeonWorkloadUtils.hpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_workload_utils_8hpp_source.xhtml#l00060">InitializeArmComputeTensorData()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;{</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; InitialiseArmComputeTensorEmpty(dstTensor);</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; CopyArmComputeITensorData(srcData, dstTensor);</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a92c91193007aa49f4732d6dba5397f8d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a92c91193007aa49f4732d6dba5397f8d">&#9670;&nbsp;</a></span>CopyTensorContentsGeneric()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void armnn::CopyTensorContentsGeneric </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> *&#160;</td>
+ <td class="paramname"><em>srcTensor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> *&#160;</td>
+ <td class="paramname"><em>dstTensor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">CopyFunc&#160;</td>
+ <td class="paramname"><em>copy</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_workload_utils_8hpp_source.xhtml#l00046">46</a> of file <a class="el" href="_workload_utils_8hpp_source.xhtml">WorkloadUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>, <a class="el" href="_profiling_8hpp_source.xhtml#l00220">ARMNN_SCOPED_PROFILING_EVENT</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00174">TensorShape::GetNumDimensions()</a>, <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml#affd5aae75cad90f472f96cfd25a13f29">ITensorHandle::GetShape()</a>, <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml#a30c3e09ce55369b66469443a4ca5ef03">ITensorHandle::GetStrides()</a>, <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused()</a>, <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml#a9afbc055a017adf1bc38ee137bca6e90">ITensorHandle::Map()</a>, <a class="el" href="_types_8hpp_source.xhtml#l00018">MaxNumOfTensorDimensions</a>, <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a>, and <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml#a563609828050f1b3a7868c23f3365923">ITensorHandle::Unmap()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_loaded_network_8cpp_source.xhtml#l01265">CopyToOutputTensor()</a>, <a class="el" href="_neon_convert_bf16_to_fp32_workload_8cpp_source.xhtml#l00025">NeonConvertBf16ToFp32Workload::Execute()</a>, <a class="el" href="_neon_convert_fp32_to_bf16_workload_8cpp_source.xhtml#l00026">NeonConvertFp32ToBf16Workload::Execute()</a>, <a class="el" href="_neon_convert_fp16_to_fp32_workload_8cpp_source.xhtml#l00025">NeonConvertFp16ToFp32Workload::Execute()</a>, <a class="el" href="_neon_convert_fp32_to_fp16_workload_8cpp_source.xhtml#l00026">NeonConvertFp32ToFp16Workload::Execute()</a>, <a class="el" href="_mem_copy_workload_8cpp_source.xhtml#l00051">CopyMemGenericWorkload::Execute()</a>, <a class="el" href="_mem_copy_workload_8cpp_source.xhtml#l00066">CopyMemGenericWorkload::ExecuteAsync()</a>, and <a class="el" href="_loaded_network_8cpp_source.xhtml#l01118">LoadedNetwork::FreeWorkingMemory()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;{</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="comment">// For ease of understanding, names are assigned to the dimensions</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="comment">// of the tensor as if NHWC, however this routine works with any 5D tensor</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; static_assert(<a class="code" href="namespacearmnn.xhtml#abdcd184ed3bd648bb31d385040cafd5d">MaxNumOfTensorDimensions</a> == 5, <span class="stringliteral">&quot;Please update CopyTensorContents&quot;</span>);</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; TensorShape srcStrides = srcTensor-&gt;GetStrides();</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keyword">const</span> TensorShape&amp; srcShape = srcTensor-&gt;GetShape();</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> srcSize = srcTensor-&gt;GetStrides()[0] * srcShape[0];</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(srcSize); <span class="comment">// Only used for asserts</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; TensorShape dstStrides = dstTensor-&gt;GetStrides();</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keyword">const</span> TensorShape&amp; dstShape = dstTensor-&gt;GetShape();</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> dstSize = dstTensor-&gt;GetStrides()[0] * dstShape[0];</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(dstSize); <span class="comment">// Only used for asserts</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordtype">size_t</span> srcDepth = 1;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordtype">size_t</span> srcBatches = 1;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordtype">size_t</span> srcHeight = 1;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordtype">size_t</span> srcWidth = 1;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordtype">size_t</span> srcChannels = 1;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; AssignValues(srcShape.GetNumDimensions(),</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; 0,</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; srcShape,</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; srcChannels,</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; srcWidth,</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; srcHeight,</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; srcBatches,</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; srcDepth);</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordtype">size_t</span> srcDepthStride = 0;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordtype">size_t</span> srcBatchStride = 0;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordtype">size_t</span> srcHeightStride = 0;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordtype">size_t</span> srcWidthStride = 0;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordtype">size_t</span> srcChannelStride = 0;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; AssignValues(srcStrides.GetNumDimensions(),</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; 0,</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; srcStrides,</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; srcChannelStride,</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; srcWidthStride,</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; srcHeightStride,</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; srcBatchStride,</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; srcDepthStride);</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordtype">size_t</span> dstDepth = 1;</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordtype">size_t</span> dstBatches = 1;</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordtype">size_t</span> dstHeight = 1;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordtype">size_t</span> dstWidth = 1;</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordtype">size_t</span> dstChannels = 1;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; AssignValues(dstShape.GetNumDimensions(),</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; 0,</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; dstShape,</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; dstChannels,</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; dstWidth,</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; dstHeight,</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; dstBatches,</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; dstDepth);</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordtype">size_t</span> dstDepthStride = 0;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordtype">size_t</span> dstBatchStride = 0;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keywordtype">size_t</span> dstHeightStride = 0;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordtype">size_t</span> dstWidthStride = 0;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keywordtype">size_t</span> dstChannelStride = 0;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; AssignValues(dstStrides.GetNumDimensions(),</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; 0,</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; dstStrides,</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; dstChannelStride,</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; dstWidthStride,</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; dstHeightStride,</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; dstBatchStride,</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; dstDepthStride);</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* srcDataStart;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* dstDataStart;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; {</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <a class="code" href="_profiling_8hpp.xhtml#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(Compute::Undefined, <span class="stringliteral">&quot;Synchronize buffers&quot;</span>);</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; srcDataStart = <span class="keyword">static_cast&lt;</span><span class="keyword">const </span>uint8_t*<span class="keyword">&gt;</span>(srcTensor-&gt;Map());</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; dstDataStart = <span class="keyword">static_cast&lt;</span>uint8_t*<span class="keyword">&gt;</span>(dstTensor-&gt;Map());</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; }</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordtype">size_t</span> copyLength = std::min(srcChannels * srcChannelStride, dstChannels * dstChannelStride);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keywordtype">size_t</span> copyWidth = std::min(srcWidth, dstWidth);</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordtype">size_t</span> copyHeight = std::min(srcHeight, dstHeight);</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keywordtype">size_t</span> copyBatches = std::min(srcBatches, dstBatches);</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keywordtype">size_t</span> copyDepth = std::min(srcDepth, dstDepth);</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="comment">// Coalesce inner dimensions where possible</span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="comment">// to reduce overheard calling copy() and to</span></div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="comment">// allow for memory bandwidth optimisations</span></div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordflow">if</span> (copyLength == srcWidthStride &amp;&amp;</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; copyLength == dstWidthStride)</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; {</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="comment">// There is no special padding between rows,</span></div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="comment">// and sizes are compatible, so copy whole rows</span></div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; copyLength *= copyWidth;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; copyWidth = 1;</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keywordflow">if</span> (copyLength == srcHeightStride &amp;&amp;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; copyLength == dstHeightStride)</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; {</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="comment">// There is no special padding between batches</span></div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="comment">// and sizes are compatible so copy whole batches</span></div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; copyLength *= copyHeight;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; copyHeight = 1;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; }</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; }</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* srcData = srcDataStart;</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* dstData = dstDataStart;</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> d = 0; d &lt; copyDepth; ++d)</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; {</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keyword">auto</span> srcPtrDepth = srcData;</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="keyword">auto</span> dstPtrDepth = dstData;</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> b = 0; b &lt; copyBatches; ++b)</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; {</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keyword">auto</span> srcPtrBatch = srcData;</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="keyword">auto</span> dstPtrBatch = dstData;</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> h = 0; h &lt; copyHeight; ++h)</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; {</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keyword">auto</span> srcPtrChannel = srcData;</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="keyword">auto</span> dstPtrChannel = dstData;</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> w = 0; w &lt; copyWidth; ++w)</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; {</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(srcData &gt;= srcDataStart &amp;&amp; srcData + copyLength &lt;= srcDataStart + srcSize);</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(dstData &gt;= dstDataStart &amp;&amp; dstData + copyLength &lt;= dstDataStart + dstSize);</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; copy(dstData, srcData, copyLength);</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; dstData += dstWidthStride;</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; srcData += srcWidthStride;</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; }</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; dstData += (<span class="keyword">static_cast&lt;</span><span class="keywordtype">long</span><span class="keyword">&gt;</span>(dstHeightStride) - (dstData - dstPtrChannel));</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; srcData += (<span class="keyword">static_cast&lt;</span><span class="keywordtype">long</span><span class="keyword">&gt;</span>(srcHeightStride) - (srcData - srcPtrChannel));</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; }</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; dstData += (<span class="keyword">static_cast&lt;</span><span class="keywordtype">long</span><span class="keyword">&gt;</span>(dstBatchStride) - (dstData - dstPtrBatch));</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; srcData += (<span class="keyword">static_cast&lt;</span><span class="keywordtype">long</span><span class="keyword">&gt;</span>(srcBatchStride) - (srcData - srcPtrBatch));</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; }</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; dstData += (<span class="keyword">static_cast&lt;</span><span class="keywordtype">long</span><span class="keyword">&gt;</span>(dstDepthStride) - (dstData - dstPtrDepth));</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; srcData += (<span class="keyword">static_cast&lt;</span><span class="keywordtype">long</span><span class="keyword">&gt;</span>(srcDepthStride) - (srcData - srcPtrDepth));</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; }</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; srcTensor-&gt;Unmap();</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; dstTensor-&gt;Unmap();</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="_profiling_8hpp_xhtml_a5ccc65e2c464ac05ce311fdae7ede03a"><div class="ttname"><a href="_profiling_8hpp.xhtml#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a></div><div class="ttdeci">#define ARMNN_SCOPED_PROFILING_EVENT(backendId, name)</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_8hpp_source.xhtml#l00220">Profiling.hpp:220</a></div></div>
+<div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_abdcd184ed3bd648bb31d385040cafd5d"><div class="ttname"><a href="namespacearmnn.xhtml#abdcd184ed3bd648bb31d385040cafd5d">armnn::MaxNumOfTensorDimensions</a></div><div class="ttdeci">constexpr unsigned int MaxNumOfTensorDimensions</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00018">Types.hpp:18</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a5acae80f1d8fd03cdb3878bd356683d7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5acae80f1d8fd03cdb3878bd356683d7">&#9670;&nbsp;</a></span>CopyToOutputTensor()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void armnn::CopyToOutputTensor </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor.xhtml">Tensor</a> &amp;&#160;</td>
+ <td class="paramname"><em>outputTensor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> *&#160;</td>
+ <td class="paramname"><em>outputTensorHandle</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_loaded_network_8cpp_source.xhtml#l01265">1265</a> of file <a class="el" href="_loaded_network_8cpp_source.xhtml">LoadedNetwork.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_workload_utils_8hpp_source.xhtml#l00046">CopyTensorContentsGeneric()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00295">BaseTensor&lt; MemoryType &gt;::GetInfo()</a>, and <a class="el" href="_tensor_8hpp_source.xhtml#l00305">BaseTensor&lt; MemoryType &gt;::GetMemoryArea()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_loaded_network_8cpp_source.xhtml#l01599">LoadedNetwork::Execute()</a>.</p>
+<div class="fragment"><div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160;{</div><div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160; <span class="keyword">auto</span> copyFunc = [](<span class="keywordtype">void</span>* dst, <span class="keyword">const</span> <span class="keywordtype">void</span>* src, <span class="keywordtype">size_t</span> size)</div><div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160; {</div><div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160; memcpy(dst, src, size);</div><div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160; };</div><div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160;</div><div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160; std::unique_ptr&lt;ITensorHandle&gt; tensorHandle =</div><div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160; std::make_unique&lt;PassthroughTensorHandle&gt;(outputTensor.GetInfo(),</div><div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160; outputTensor.GetMemoryArea());</div><div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160;</div><div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160; <a class="code" href="namespacearmnn.xhtml#a92c91193007aa49f4732d6dba5397f8d">CopyTensorContentsGeneric</a>(outputTensorHandle, tensorHandle.get(), copyFunc);</div><div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a92c91193007aa49f4732d6dba5397f8d"><div class="ttname"><a href="namespacearmnn.xhtml#a92c91193007aa49f4732d6dba5397f8d">armnn::CopyTensorContentsGeneric</a></div><div class="ttdeci">void CopyTensorContentsGeneric(const ITensorHandle *srcTensor, ITensorHandle *dstTensor, CopyFunc copy)</div><div class="ttdef"><b>Definition:</b> <a href="_workload_utils_8hpp_source.xhtml#l00046">WorkloadUtils.hpp:46</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a5e783a951642781b9e7b55db06a514b7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5e783a951642781b9e7b55db06a514b7">&#9670;&nbsp;</a></span>CreateAclNormalizationLayerInfoForL2Normalization()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::NormalizationLayerInfo armnn::CreateAclNormalizationLayerInfoForL2Normalization </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>tensorInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a>&#160;</td>
+ <td class="paramname"><em>dataLayout</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00028">28</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.xhtml">ArmComputeUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</a>, and <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">NCHW</a>.</p>
+<div class="fragment"><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;{</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> depthDimension = dataLayout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a> ? 1 : 3;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> depth = tensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[depthDimension];</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="comment">// At the time of writing, {CL|Neon}L2Normalization performs the reduction only along dimension 0. This version of</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="comment">// L2 Normalization always performs the reduction along the depth axis, though. Thus, we repurpose</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="comment">// {CL|Neon}NormalizationLayers to act as depthwise L2 normalizations by carefully chosing the normalization</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="comment">// parameters.</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="comment">// Please refer to both the reference implementation of the normalization layer and the implementation of</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="comment">// {CL|Neon}NormalizationLayer when checking the derivations for the parameter values below.</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="comment">// Make sure normalization covers the entire depth range. ACL requires the normalization size to be odd.</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="comment">// CL: This does not result in extra kernel threads not doing any work: See usage of the RADIUS parameter in</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="comment">// ACL&#39;s normalization_layer_cross_map() CL function.</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keyword">const</span> uint32_t normSize = depth * 2u + 1u;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="comment">// See ACL&#39;s NormalizationLayerInfo::scale_coeff() definition.</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="comment">// For the reference implementation, to make alpha_ become 1, we&#39;d have to use alpha = normSize instead.</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keyword">const</span> <span class="keywordtype">float</span> alpha = 1.0f;</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="comment">// Don&#39;t offset the reduction.</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keyword">const</span> <span class="keywordtype">float</span> kappa = 0.0f;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="comment">// pow(reduction, -0.5) = 1 / sqrt(reduction)</span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keyword">const</span> <span class="keywordtype">float</span> beta = 0.5f;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">return</span> arm_compute::NormalizationLayerInfo(arm_compute::NormType::CROSS_MAP, normSize, alpha, beta, kappa, <span class="keyword">false</span>);</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a8b5d0f8a24e9d9238f412260a552acf8"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">armnn::TensorInfo::GetShape</a></div><div class="ttdeci">const TensorShape &amp; GetShape() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00191">Tensor.hpp:191</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ac845f99ae84c2fcf016b676769da7c51"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac845f99ae84c2fcf016b676769da7c51">&#9670;&nbsp;</a></span>CreateClContext()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">flatbuffers::Offset&lt;ClContext&gt; armnn::CreateClContext </td>
+ <td>(</td>
+ <td class="paramtype">flatbuffers::FlatBufferBuilder &amp;&#160;</td>
+ <td class="paramname"><em>_fbb</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">flatbuffers::Offset&lt; flatbuffers::Vector&lt; flatbuffers::Offset&lt; armnn::Program &gt;&gt;&gt;&#160;</td>
+ <td class="paramname"><em>programs</em> = <code>0</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_context_schema__generated_8h_source.xhtml#l00057">57</a> of file <a class="el" href="_cl_context_schema__generated_8h_source.xhtml">ClContextSchema_generated.h</a>.</p>
+
+<p class="reference">References <a class="el" href="_cl_context_schema__generated_8h_source.xhtml#l00042">ClContextBuilder::add_programs()</a>, and <a class="el" href="_cl_context_schema__generated_8h_source.xhtml#l00050">ClContextBuilder::Finish()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_context_schema__generated_8h_source.xhtml#l00065">CreateClContextDirect()</a>, and <a class="el" href="_cl_context_serializer_8cpp_source.xhtml#l00023">ClContextSerializer::Serialize()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; {</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; ClContextBuilder builder_(_fbb);</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; builder_.add_programs(programs);</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">return</span> builder_.Finish();</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a8e0f170f651bf2e8d101b923b33efe5e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8e0f170f651bf2e8d101b923b33efe5e">&#9670;&nbsp;</a></span>CreateClContextDirect()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">flatbuffers::Offset&lt;ClContext&gt; armnn::CreateClContextDirect </td>
+ <td>(</td>
+ <td class="paramtype">flatbuffers::FlatBufferBuilder &amp;&#160;</td>
+ <td class="paramname"><em>_fbb</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::vector&lt; flatbuffers::Offset&lt; armnn::Program &gt;&gt; *&#160;</td>
+ <td class="paramname"><em>programs</em> = <code>nullptr</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_context_schema__generated_8h_source.xhtml#l00065">65</a> of file <a class="el" href="_cl_context_schema__generated_8h_source.xhtml">ClContextSchema_generated.h</a>.</p>
+
+<p class="reference">References <a class="el" href="_cl_context_schema__generated_8h_source.xhtml#l00057">CreateClContext()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; {</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keyword">auto</span> programs__ = programs ? _fbb.CreateVector&lt;flatbuffers::Offset&lt;armnn::Program&gt;&gt;(*programs) : 0;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#ac845f99ae84c2fcf016b676769da7c51">armnn::CreateClContext</a>(</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; _fbb,</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; programs__);</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ac845f99ae84c2fcf016b676769da7c51"><div class="ttname"><a href="namespacearmnn.xhtml#ac845f99ae84c2fcf016b676769da7c51">armnn::CreateClContext</a></div><div class="ttdeci">flatbuffers::Offset&lt; ClContext &gt; CreateClContext(flatbuffers::FlatBufferBuilder &amp;_fbb, flatbuffers::Offset&lt; flatbuffers::Vector&lt; flatbuffers::Offset&lt; armnn::Program &gt;&gt;&gt; programs=0)</div><div class="ttdef"><b>Definition:</b> <a href="_cl_context_schema__generated_8h_source.xhtml#l00057">ClContextSchema_generated.h:57</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a733ae6b70d0bfa43433c3e7606992328"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a733ae6b70d0bfa43433c3e7606992328">&#9670;&nbsp;</a></span>CreateDescriptorForConcatenation()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structarmnn_1_1_origins_descriptor.xhtml">OriginsDescriptor</a> armnn::CreateDescriptorForConcatenation </td>
+ <td>(</td>
+ <td class="paramtype">TensorShapeIt&#160;</td>
+ <td class="paramname"><em>first</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">TensorShapeIt&#160;</td>
+ <td class="paramname"><em>last</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>concatenationDimension</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Convenience template to create an <a class="el" href="structarmnn_1_1_origins_descriptor.xhtml" title="An OriginsDescriptor for the ConcatLayer. ">OriginsDescriptor</a> to use when creating a <a class="el" href="classarmnn_1_1_concat_layer.xhtml" title="This layer represents a merge operation. ">ConcatLayer</a> for performing concatenation of a number of input tensors. </p>
+
+<p class="definition">Definition at line <a class="el" href="_descriptors_8hpp_source.xhtml#l00261">261</a> of file <a class="el" href="_descriptors_8hpp_source.xhtml">Descriptors.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_descriptors_8cpp_source.xhtml#l00158">OriginsDescriptor::SetConcatAxis()</a>, and <a class="el" href="_descriptors_8cpp_source.xhtml#l00167">OriginsDescriptor::SetViewOriginCoord()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_concat_test_impl_8cpp_source.xhtml#l01955">ConcatDifferentInputOutputQParamTest()</a>, <a class="el" href="_concat_test_impl_8cpp_source.xhtml#l00026">CreateDescriptorForConcat()</a>, and <a class="el" href="_serializer_tests_8cpp_source.xhtml#l00024">TEST_SUITE()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160;{</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="keyword">auto</span> numInputs = std::distance(first, last);</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <span class="keywordflow">if</span> (numInputs &lt; 2)</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; {</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Concatenation requires at least 2 inputs&quot;</span>);</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; }</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160;</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span>&amp; firstInputShape = *first;</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160;</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numDimensions = firstInputShape.GetNumDimensions();</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = first + 1; it != last; ++it)</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; {</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="keywordflow">if</span> (it-&gt;GetNumDimensions() != numDimensions)</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; {</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;All inputs to concatenation must have the same number of dimensions&quot;</span>);</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; }</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; }</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160;</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="keywordflow">if</span> (concatenationDimension &gt;= numDimensions)</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; {</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;concatenationDimension must be between 0 and the number of dimensions.&quot;</span>);</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; }</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160;</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = first; it != last; ++it)</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; {</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> d = 0; d &lt; numDimensions; ++d)</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; {</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="keyword">const</span> <span class="keywordtype">bool</span> dimSizeOk = (d == concatenationDimension) || (firstInputShape[d] == (*it)[d]);</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="keywordflow">if</span> (!dimSizeOk)</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; {</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;All inputs to concatenation must be the same size along all dimensions &quot;</span></div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="stringliteral">&quot; except the concatenation dimension&quot;</span>);</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; }</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; }</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; }</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160;</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; OriginsDescriptor viewsDescriptor(static_cast&lt;uint32_t&gt;(numInputs), numDimensions);</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; viewsDescriptor.SetConcatAxis(concatenationDimension);</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160;</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; uint32_t viewIndex = 0u;</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; uint32_t coordAlongConcatDim = 0u;</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = first; it != last; ++it)</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; {</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span>&amp; inputShape = *it;</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; concatenationDimension; ++i)</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; {</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; viewsDescriptor.SetViewOriginCoord(viewIndex, i, 0);</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; }</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160;</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; viewsDescriptor.SetViewOriginCoord(viewIndex, concatenationDimension, coordAlongConcatDim);</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dimSize = inputShape[concatenationDimension];</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; coordAlongConcatDim += dimSize;</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160;</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160;</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = concatenationDimension + 1; i &lt; numDimensions; ++i)</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; {</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; viewsDescriptor.SetViewOriginCoord(viewIndex, i, 0);</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; }</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160;</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; ++viewIndex;</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; }</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160;</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <span class="keywordflow">return</span> viewsDescriptor;</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a0f37510801ba4f2500e4e9558c81f93c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0f37510801ba4f2500e4e9558c81f93c">&#9670;&nbsp;</a></span>CreateProgram()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">flatbuffers::Offset&lt;Program&gt; armnn::CreateProgram </td>
+ <td>(</td>
+ <td class="paramtype">flatbuffers::FlatBufferBuilder &amp;&#160;</td>
+ <td class="paramname"><em>_fbb</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">flatbuffers::Offset&lt; flatbuffers::String &gt;&#160;</td>
+ <td class="paramname"><em>name</em> = <code>0</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">flatbuffers::Offset&lt; flatbuffers::Vector&lt; uint8_t &gt;&gt;&#160;</td>
+ <td class="paramname"><em>binary</em> = <code>0</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_context_schema__generated_8h_source.xhtml#l00118">118</a> of file <a class="el" href="_cl_context_schema__generated_8h_source.xhtml">ClContextSchema_generated.h</a>.</p>
+
+<p class="reference">References <a class="el" href="_cl_context_schema__generated_8h_source.xhtml#l00103">ProgramBuilder::add_binary()</a>, <a class="el" href="_cl_context_schema__generated_8h_source.xhtml#l00100">ProgramBuilder::add_name()</a>, and <a class="el" href="_cl_context_schema__generated_8h_source.xhtml#l00111">ProgramBuilder::Finish()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_context_schema__generated_8h_source.xhtml#l00128">CreateProgramDirect()</a>, and <a class="el" href="_cl_context_serializer_8cpp_source.xhtml#l00023">ClContextSerializer::Serialize()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; {</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; ProgramBuilder builder_(_fbb);</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; builder_.add_binary(binary);</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; builder_.add_name(name);</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordflow">return</span> builder_.Finish();</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a6c31acdf17825e7ec0ec0da7e129cb69"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6c31acdf17825e7ec0ec0da7e129cb69">&#9670;&nbsp;</a></span>CreateProgramDirect()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">flatbuffers::Offset&lt;Program&gt; armnn::CreateProgramDirect </td>
+ <td>(</td>
+ <td class="paramtype">flatbuffers::FlatBufferBuilder &amp;&#160;</td>
+ <td class="paramname"><em>_fbb</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>name</em> = <code>nullptr</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::vector&lt; uint8_t &gt; *&#160;</td>
+ <td class="paramname"><em>binary</em> = <code>nullptr</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_context_schema__generated_8h_source.xhtml#l00128">128</a> of file <a class="el" href="_cl_context_schema__generated_8h_source.xhtml">ClContextSchema_generated.h</a>.</p>
+
+<p class="reference">References <a class="el" href="_cl_context_schema__generated_8h_source.xhtml#l00118">CreateProgram()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; {</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keyword">auto</span> name__ = name ? _fbb.CreateString(name) : 0;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keyword">auto</span> binary__ = binary ? _fbb.CreateVector&lt;uint8_t&gt;(*binary) : 0;</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a0f37510801ba4f2500e4e9558c81f93c">armnn::CreateProgram</a>(</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; _fbb,</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; name__,</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; binary__);</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a0f37510801ba4f2500e4e9558c81f93c"><div class="ttname"><a href="namespacearmnn.xhtml#a0f37510801ba4f2500e4e9558c81f93c">armnn::CreateProgram</a></div><div class="ttdeci">flatbuffers::Offset&lt; Program &gt; CreateProgram(flatbuffers::FlatBufferBuilder &amp;_fbb, flatbuffers::Offset&lt; flatbuffers::String &gt; name=0, flatbuffers::Offset&lt; flatbuffers::Vector&lt; uint8_t &gt;&gt; binary=0)</div><div class="ttdef"><b>Definition:</b> <a href="_cl_context_schema__generated_8h_source.xhtml#l00118">ClContextSchema_generated.h:118</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a1ec6b4c20ed294a96cf94c33c24caaf5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1ec6b4c20ed294a96cf94c33c24caaf5">&#9670;&nbsp;</a></span>CreateSupportedBackends()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn.xhtml#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a> CreateSupportedBackends </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_tensor_handle_factory_registry.xhtml">TensorHandleFactoryRegistry</a> &amp;&#160;</td>
+ <td class="paramname"><em>handleFactoryRegistry</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structarmnn_1_1_backend_settings.xhtml">BackendSettings</a> &amp;&#160;</td>
+ <td class="paramname"><em>backendSettings</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.xhtml#l01136">1136</a> of file <a class="el" href="_network_8cpp_source.xhtml">Network.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>, <a class="el" href="_backend_registry_8cpp_source.xhtml#l00013">BackendRegistryInstance()</a>, and <a class="el" href="_backend_settings_8hpp_source.xhtml#l00021">BackendSettings::m_SupportedBackends</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.xhtml#l01680">Optimize()</a>.</p>
+<div class="fragment"><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160;{</div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160; <a class="code" href="namespacearmnn.xhtml#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a> backends;</div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span>&amp; backendRegistry = <a class="code" href="namespacearmnn.xhtml#ac2807505b850738bc8a1991ce669dd47">BackendRegistryInstance</a>();</div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; selectedBackend : backendSettings.m_SupportedBackends)</div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160; {</div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160; <span class="keyword">auto</span> backendFactory = backendRegistry.GetFactory(selectedBackend);</div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160; <span class="keyword">auto</span> backendObjPtr = backendFactory();</div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(backendObjPtr);</div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160;</div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160; backendObjPtr-&gt;RegisterTensorHandleFactories(handleFactoryRegistry);</div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160;</div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160; backends[backendObjPtr-&gt;GetId()] = std::move(backendObjPtr);</div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160; }</div><div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160;</div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160; <span class="keywordflow">return</span> backends;</div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ac2807505b850738bc8a1991ce669dd47"><div class="ttname"><a href="namespacearmnn.xhtml#ac2807505b850738bc8a1991ce669dd47">armnn::BackendRegistryInstance</a></div><div class="ttdeci">BackendRegistry &amp; BackendRegistryInstance()</div><div class="ttdef"><b>Definition:</b> <a href="_backend_registry_8cpp_source.xhtml#l00013">BackendRegistry.cpp:13</a></div></div>
+<div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a9173495a61a0092b5f38b855f02c3585"><div class="ttname"><a href="namespacearmnn.xhtml#a9173495a61a0092b5f38b855f02c3585">armnn::BackendsMap</a></div><div class="ttdeci">std::map&lt; BackendId, std::unique_ptr&lt; class IBackendInternal &gt; &gt; BackendsMap</div><div class="ttdef"><b>Definition:</b> <a href="_network_8hpp_source.xhtml#l00287">Network.hpp:287</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a5aae369ef847a00062925cea8e9be9c4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5aae369ef847a00062925cea8e9be9c4">&#9670;&nbsp;</a></span>Debug()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Debug </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>inputInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const T *&#160;</td>
+ <td class="paramname"><em>inputData</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#afad4088a9a058114ee5f87246f87bf49">LayerGuid</a>&#160;</td>
+ <td class="paramname"><em>guid</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>layerName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>slotIndex</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_debug_8cpp_source.xhtml#l00019">19</a> of file <a class="el" href="_debug_8cpp_source.xhtml">Debug.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#a43791bdad23b9c3dd62711c03f793881">Debug&lt; BFloat16 &gt;()</a>, <a class="el" href="namespacearmnn.xhtml#a26abbe393a88835dd569523bec69719b">Debug&lt; float &gt;()</a>, <a class="el" href="namespacearmnn.xhtml#a3b0ab9518e3fd6a0447c174df57a313c">Debug&lt; Half &gt;()</a>, <a class="el" href="namespacearmnn.xhtml#acc771f233bb7884932260ba353118b46">Debug&lt; int16_t &gt;()</a>, <a class="el" href="namespacearmnn.xhtml#a7c1cb9cf0678f74b1dcfff310d1475fd">Debug&lt; int32_t &gt;()</a>, <a class="el" href="namespacearmnn.xhtml#ac2167b3a09fab7c9b58af461bd990c3b">Debug&lt; int8_t &gt;()</a>, <a class="el" href="namespacearmnn.xhtml#a1121718a486db835afa99328650e7e89">Debug&lt; uint8_t &gt;()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00195">TensorInfo::GetNumDimensions()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00196">TensorInfo::GetNumElements()</a>, and <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_ref_debug_workload_8cpp_source.xhtml#l00024">RefDebugWorkload&lt; DataType &gt;::ExecuteAsync()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;{</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numDims = inputInfo.GetNumDimensions();</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numElements = inputInfo.GetNumElements();</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keyword">const</span> TensorShape&amp; inputShape = inputInfo.GetShape();</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; std::vector&lt;unsigned int&gt; strides(numDims, 0);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; strides[numDims - 1] = inputShape[numDims - 1];</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 2; i &lt;= numDims; i++)</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; {</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; strides[numDims - i] = strides[numDims - i + 1] * inputShape[numDims - i];</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; }</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; std::cout &lt;&lt; <span class="stringliteral">&quot;{ &quot;</span>;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; std::cout &lt;&lt; <span class="stringliteral">&quot;\&quot;layerGuid\&quot;: &quot;</span> &lt;&lt; guid &lt;&lt; <span class="stringliteral">&quot;, &quot;</span>;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; std::cout &lt;&lt; <span class="stringliteral">&quot;\&quot;layerName\&quot;: \&quot;&quot;</span> &lt;&lt; layerName &lt;&lt; <span class="stringliteral">&quot;\&quot;, &quot;</span>;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; std::cout &lt;&lt; <span class="stringliteral">&quot;\&quot;outputSlot\&quot;: &quot;</span> &lt;&lt; slotIndex &lt;&lt; <span class="stringliteral">&quot;, &quot;</span>;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; std::cout &lt;&lt; <span class="stringliteral">&quot;\&quot;shape\&quot;: &quot;</span>;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; std::cout &lt;&lt; <span class="stringliteral">&quot;[&quot;</span>;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; numDims; i++)</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; {</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; std::cout &lt;&lt; inputShape[i];</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordflow">if</span> (i != numDims - 1)</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; {</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; std::cout &lt;&lt; <span class="stringliteral">&quot;, &quot;</span>;</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; }</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; }</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; std::cout &lt;&lt; <span class="stringliteral">&quot;], &quot;</span>;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; std::cout &lt;&lt; <span class="stringliteral">&quot;\&quot;min\&quot;: &quot;</span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; &lt;&lt; <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span>(*std::min_element(inputData, inputData + numElements)) &lt;&lt; <span class="stringliteral">&quot;, &quot;</span>;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; std::cout &lt;&lt; <span class="stringliteral">&quot;\&quot;max\&quot;: &quot;</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; &lt;&lt; <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span>(*std::max_element(inputData, inputData + numElements)) &lt;&lt; <span class="stringliteral">&quot;, &quot;</span>;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; std::cout &lt;&lt; <span class="stringliteral">&quot;\&quot;data\&quot;: &quot;</span>;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; numElements; i++)</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; {</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j = 0; j &lt; numDims; j++)</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; {</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordflow">if</span> (i % strides[j] == 0)</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; {</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; std::cout &lt;&lt; <span class="stringliteral">&quot;[&quot;</span> ;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; }</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; }</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; std::cout &lt;&lt; static_cast&lt;float&gt;(inputData[i]);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j = 0; j &lt; numDims; j++)</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; {</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">if</span> ((i+1) % strides[j] == 0)</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; {</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; std::cout &lt;&lt; <span class="stringliteral">&quot;]&quot;</span> ;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; }</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; }</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">if</span> (i != numElements - 1)</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; {</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; std::cout &lt;&lt; <span class="stringliteral">&quot;, &quot;</span>;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; }</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; }</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; std::cout &lt;&lt; <span class="stringliteral">&quot; }&quot;</span> &lt;&lt; std::endl;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a43791bdad23b9c3dd62711c03f793881"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a43791bdad23b9c3dd62711c03f793881">&#9670;&nbsp;</a></span>Debug< BFloat16 >()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">template void <a class="el" href="namespacearmnn.xhtml#a5aae369ef847a00062925cea8e9be9c4">armnn::Debug</a>&lt; <a class="el" href="classarmnn_1_1_b_float16.xhtml">BFloat16</a> &gt; </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>inputInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_b_float16.xhtml">BFloat16</a> *&#160;</td>
+ <td class="paramname"><em>inputData</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#afad4088a9a058114ee5f87246f87bf49">LayerGuid</a>&#160;</td>
+ <td class="paramname"><em>guid</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>layerName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>slotIndex</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="reference">Referenced by <a class="el" href="_debug_8cpp_source.xhtml#l00019">Debug()</a>.</p>
+
+</div>
+</div>
+<a id="a26abbe393a88835dd569523bec69719b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a26abbe393a88835dd569523bec69719b">&#9670;&nbsp;</a></span>Debug< float >()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">template void <a class="el" href="namespacearmnn.xhtml#a5aae369ef847a00062925cea8e9be9c4">armnn::Debug</a>&lt; float &gt; </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>inputInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const float *&#160;</td>
+ <td class="paramname"><em>inputData</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#afad4088a9a058114ee5f87246f87bf49">LayerGuid</a>&#160;</td>
+ <td class="paramname"><em>guid</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>layerName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>slotIndex</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="reference">Referenced by <a class="el" href="_debug_8cpp_source.xhtml#l00019">Debug()</a>.</p>
+
+</div>
+</div>
+<a id="a3b0ab9518e3fd6a0447c174df57a313c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3b0ab9518e3fd6a0447c174df57a313c">&#9670;&nbsp;</a></span>Debug< Half >()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">template void <a class="el" href="namespacearmnn.xhtml#a5aae369ef847a00062925cea8e9be9c4">armnn::Debug</a>&lt; <a class="el" href="namespacearmnn.xhtml#a0f38fa92b2468d5378258a2b074c1a31">Half</a> &gt; </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>inputInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="namespacearmnn.xhtml#a0f38fa92b2468d5378258a2b074c1a31">Half</a> *&#160;</td>
+ <td class="paramname"><em>inputData</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#afad4088a9a058114ee5f87246f87bf49">LayerGuid</a>&#160;</td>
+ <td class="paramname"><em>guid</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>layerName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>slotIndex</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="reference">Referenced by <a class="el" href="_debug_8cpp_source.xhtml#l00019">Debug()</a>.</p>
+
+</div>
+</div>
+<a id="acc771f233bb7884932260ba353118b46"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acc771f233bb7884932260ba353118b46">&#9670;&nbsp;</a></span>Debug< int16_t >()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">template void <a class="el" href="namespacearmnn.xhtml#a5aae369ef847a00062925cea8e9be9c4">armnn::Debug</a>&lt; int16_t &gt; </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>inputInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const int16_t *&#160;</td>
+ <td class="paramname"><em>inputData</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#afad4088a9a058114ee5f87246f87bf49">LayerGuid</a>&#160;</td>
+ <td class="paramname"><em>guid</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>layerName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>slotIndex</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="reference">Referenced by <a class="el" href="_debug_8cpp_source.xhtml#l00019">Debug()</a>.</p>
+
+</div>
+</div>
+<a id="a7c1cb9cf0678f74b1dcfff310d1475fd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7c1cb9cf0678f74b1dcfff310d1475fd">&#9670;&nbsp;</a></span>Debug< int32_t >()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">template void <a class="el" href="namespacearmnn.xhtml#a5aae369ef847a00062925cea8e9be9c4">armnn::Debug</a>&lt; int32_t &gt; </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>inputInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const int32_t *&#160;</td>
+ <td class="paramname"><em>inputData</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#afad4088a9a058114ee5f87246f87bf49">LayerGuid</a>&#160;</td>
+ <td class="paramname"><em>guid</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>layerName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>slotIndex</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="reference">Referenced by <a class="el" href="_debug_8cpp_source.xhtml#l00019">Debug()</a>.</p>
+
+</div>
+</div>
+<a id="ac2167b3a09fab7c9b58af461bd990c3b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac2167b3a09fab7c9b58af461bd990c3b">&#9670;&nbsp;</a></span>Debug< int8_t >()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">template void <a class="el" href="namespacearmnn.xhtml#a5aae369ef847a00062925cea8e9be9c4">armnn::Debug</a>&lt; int8_t &gt; </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>inputInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const int8_t *&#160;</td>
+ <td class="paramname"><em>inputData</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#afad4088a9a058114ee5f87246f87bf49">LayerGuid</a>&#160;</td>
+ <td class="paramname"><em>guid</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>layerName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>slotIndex</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="reference">Referenced by <a class="el" href="_debug_8cpp_source.xhtml#l00019">Debug()</a>.</p>
+
+</div>
+</div>
+<a id="a1121718a486db835afa99328650e7e89"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1121718a486db835afa99328650e7e89">&#9670;&nbsp;</a></span>Debug< uint8_t >()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">template void <a class="el" href="namespacearmnn.xhtml#a5aae369ef847a00062925cea8e9be9c4">armnn::Debug</a>&lt; uint8_t &gt; </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>inputInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const uint8_t *&#160;</td>
+ <td class="paramname"><em>inputData</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#afad4088a9a058114ee5f87246f87bf49">LayerGuid</a>&#160;</td>
+ <td class="paramname"><em>guid</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>layerName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>slotIndex</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="reference">Referenced by <a class="el" href="_debug_8cpp_source.xhtml#l00019">Debug()</a>.</p>
+
+</div>
+</div>
+<a id="ab023d9a7687e35c0f108458a094c1f56"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab023d9a7687e35c0f108458a094c1f56">&#9670;&nbsp;</a></span>DepthToSpace()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void DepthToSpace </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>inputInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="namespacearmnn.xhtml#a3647f60510bc8ddaced01c51b0ee8714">DepthToSpaceDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const void *&#160;</td>
+ <td class="paramname"><em>inputData</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void *&#160;</td>
+ <td class="paramname"><em>outputData</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>dataTypeSize</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="backends_2reference_2workloads_2_depth_to_space_8cpp_source.xhtml#l00018">18</a> of file <a class="el" href="backends_2reference_2workloads_2_depth_to_space_8cpp_source.xhtml">DepthToSpace.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>, <a class="el" href="backends_2reference_2workloads_2_depth_to_space_8cpp_source.xhtml#l00018">DepthToSpace()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00023">DataLayoutIndexed::GetChannelsIndex()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00024">DataLayoutIndexed::GetHeightIndex()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00181">TensorShape::GetNumElements()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00025">DataLayoutIndexed::GetWidthIndex()</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01068">SpaceToDepthDescriptor::m_BlockSize</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01071">SpaceToDepthDescriptor::m_DataLayout</a>, <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">NCHW</a>, and <a class="el" href="_permute_8cpp_source.xhtml#l00131">armnnUtils::Permute()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="backends_2reference_2workloads_2_depth_to_space_8cpp_source.xhtml#l00018">DepthToSpace()</a>, and <a class="el" href="_test_name_and_descriptor_layer_visitor_8cpp_source.xhtml#l00274">TEST_SUITE()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;{</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> blockSize = descriptor.<a class="code" href="structarmnn_1_1_space_to_depth_descriptor.xhtml#a6c6b8957f1e176867e5fb05b1a1a1486">m_BlockSize</a>;</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(blockSize != 0u);</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>&amp; inputShape = inputInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>();</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> batches = inputShape[0];</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml">armnnUtils::DataLayoutIndexed</a> dataLayoutIndexed(descriptor.<a class="code" href="structarmnn_1_1_space_to_depth_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a>);</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inDepth = inputShape[dataLayoutIndexed.GetChannelsIndex()];</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inHeight = inputShape[dataLayoutIndexed.GetHeightIndex()];</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inWidth = inputShape[dataLayoutIndexed.GetWidthIndex()];</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outDepth = inDepth / (blockSize * blockSize);</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="comment">// The 4D input data can be interpreted as 6D (implicitly reshaped) as follows:</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="comment">// [batch, block size, block size, inDepth, inHeight, inWidth] for NCHW and</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="comment">// [batch, inHeight, inWidth, blockSize, blockSize, outDepth] for NHWC.</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="comment">// DepthToSpace can then be implemented as a permutation in 6D resulting in</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="comment">// the following shapes:</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="comment">// [batch, outDepth, inHeight, blockSize, inWidth, blockSize] for NCHW and</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="comment">// [batch, inHeight, blockSize, inWidth, blockSize, outDepth] for NHWC.</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="comment">// NOTE:</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="comment">// Since 6D tensors are not currently supported, in practice we need to handle each</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="comment">// batch separately and execute 5D permutations</span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> permDestShape;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <a class="code" href="classarmnn_1_1_permutation_vector.xhtml">PermutationVector</a> permVector{};</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordflow">if</span> (descriptor.<a class="code" href="structarmnn_1_1_space_to_depth_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a> == DataLayout::NCHW)</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; {</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; permDestShape = <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>({ outDepth, inHeight, blockSize, inWidth, blockSize });</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; permVector = { 2, 4, 0, 1, 3 };</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; }</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; {</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; permDestShape = <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>({ inHeight, blockSize, inWidth, blockSize, outDepth });</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; permVector = { 0, 2, 1, 3, 4 };</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; }</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numElementsPerBatch = inputShape.<a class="code" href="classarmnn_1_1_tensor_shape.xhtml#a8846406ac37fbd2204f0be16ee05d5b7">GetNumElements</a>() / batches;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> batchIndex = 0u; batchIndex &lt; batches; ++batchIndex)</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; {</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keyword">const</span> uintptr_t batchDataOffset = batchIndex * (numElementsPerBatch * dataTypeSize);</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <a class="code" href="namespacearmnn_utils.xhtml#af3c74017185773dd61d8ca6662d65d43">armnnUtils::Permute</a>(permDestShape,</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; permVector,</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; static_cast&lt;const void*&gt;(reinterpret_cast&lt;const uint8_t*&gt;(inputData) + batchDataOffset),</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; static_cast&lt;void*&gt;(reinterpret_cast&lt;uint8_t*&gt;(outputData) + batchDataOffset),</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; dataTypeSize);</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; }</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_tensor_shape_xhtml_a8846406ac37fbd2204f0be16ee05d5b7"><div class="ttname"><a href="classarmnn_1_1_tensor_shape.xhtml#a8846406ac37fbd2204f0be16ee05d5b7">armnn::TensorShape::GetNumElements</a></div><div class="ttdeci">unsigned int GetNumElements() const</div><div class="ttdoc">Function that calculates the tensor elements by multiplying all dimension size which are Specified...</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8cpp_source.xhtml#l00181">Tensor.cpp:181</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a8b5d0f8a24e9d9238f412260a552acf8"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">armnn::TensorInfo::GetShape</a></div><div class="ttdeci">const TensorShape &amp; GetShape() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00191">Tensor.hpp:191</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_shape_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00020">Tensor.hpp:20</a></div></div>
+<div class="ttc" id="namespacearmnn_utils_xhtml_af3c74017185773dd61d8ca6662d65d43"><div class="ttname"><a href="namespacearmnn_utils.xhtml#af3c74017185773dd61d8ca6662d65d43">armnnUtils::Permute</a></div><div class="ttdeci">void Permute(const armnn::TensorShape &amp;dstShape, const armnn::PermutationVector &amp;mappings, const void *src, void *dst, size_t dataTypeSize)</div><div class="ttdef"><b>Definition:</b> <a href="_permute_8cpp_source.xhtml#l00131">Permute.cpp:131</a></div></div>
+<div class="ttc" id="classarmnn_utils_1_1_data_layout_indexed_xhtml"><div class="ttname"><a href="classarmnn_utils_1_1_data_layout_indexed.xhtml">armnnUtils::DataLayoutIndexed</a></div><div class="ttdoc">Provides access to the appropriate indexes for Channels, Height and Width based on DataLayout...</div><div class="ttdef"><b>Definition:</b> <a href="_data_layout_indexed_8hpp_source.xhtml#l00017">DataLayoutIndexed.hpp:17</a></div></div>
+<div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
+<div class="ttc" id="classarmnn_1_1_permutation_vector_xhtml"><div class="ttname"><a href="classarmnn_1_1_permutation_vector.xhtml">armnn::PermutationVector</a></div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00282">Types.hpp:282</a></div></div>
+<div class="ttc" id="structarmnn_1_1_space_to_depth_descriptor_xhtml_a6c6b8957f1e176867e5fb05b1a1a1486"><div class="ttname"><a href="structarmnn_1_1_space_to_depth_descriptor.xhtml#a6c6b8957f1e176867e5fb05b1a1a1486">armnn::SpaceToDepthDescriptor::m_BlockSize</a></div><div class="ttdeci">unsigned int m_BlockSize</div><div class="ttdoc">Scalar specifying the input block size. It must be &gt;= 1. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01068">Descriptors.hpp:1068</a></div></div>
+<div class="ttc" id="structarmnn_1_1_space_to_depth_descriptor_xhtml_a6089e1ca91914015777ea780a513131a"><div class="ttname"><a href="structarmnn_1_1_space_to_depth_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">armnn::SpaceToDepthDescriptor::m_DataLayout</a></div><div class="ttdeci">DataLayout m_DataLayout</div><div class="ttdoc">The data layout to be used (NCHW, NHWC). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01071">Descriptors.hpp:1071</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="acae7e910f899ae67340c9ce29e406a86"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acae7e910f899ae67340c9ce29e406a86">&#9670;&nbsp;</a></span>Dequantize() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Dequantize </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>inputDecoder</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>outputEncoder</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>inputInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>outputInfo</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="backends_2reference_2workloads_2_dequantize_8cpp_source.xhtml#l00013">13</a> of file <a class="el" href="backends_2reference_2workloads_2_dequantize_8cpp_source.xhtml">Dequantize.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>, <a class="el" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Decoder&lt; IType &gt;::Get()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00196">TensorInfo::GetNumElements()</a>, <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused()</a>, and <a class="el" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;{</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(outputInfo);</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(inputInfo.GetNumElements() == outputInfo.GetNumElements());</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; inputInfo.GetNumElements(); i++)</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; {</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="comment">// inputDecoder.Get() dequantizes the data element from whatever</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="comment">// type is given by inputInfo to fp32 (If MakeDecoder supports that dequantization)</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="comment">// outputEncoder.Set() transforms the data element to whatever type is</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="comment">// given by outputInfo (if MakeEncoder supports that transformation)</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; outputEncoder.<a class="code" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Set</a>(inputDecoder.<a class="code" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Get</a>());</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; ++outputEncoder;</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; ++inputDecoder;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; }</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_encoder_xhtml_ae3b62b846a9c239f332830b9e36030eb"><div class="ttname"><a href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">armnn::Encoder::Set</a></div><div class="ttdeci">virtual void Set(IType right)=0</div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="classarmnn_1_1_decoder_xhtml_ac729108381e2340bea12877971713ecb"><div class="ttname"><a href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">armnn::Decoder::Get</a></div><div class="ttdeci">virtual IType Get() const =0</div></div>
+<div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a4144d7535639c617fca0d095379493f0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4144d7535639c617fca0d095379493f0">&#9670;&nbsp;</a></span>Dequantize() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::vector&lt;float&gt; armnn::Dequantize </td>
+ <td>(</td>
+ <td class="paramtype">const T *&#160;</td>
+ <td class="paramname"><em>quant</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>info</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>u8 helpers </p>
+
+<p class="definition">Definition at line <a class="el" href="_ref_workload_utils_8hpp_source.xhtml#l00095">95</a> of file <a class="el" href="_ref_workload_utils_8hpp_source.xhtml">RefWorkloadUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_types_utils_8cpp_source.xhtml#l00046">Dequantize()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00196">TensorInfo::GetNumElements()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00480">TensorInfo::GetQuantizationOffset()</a>, and <a class="el" href="_tensor_8cpp_source.xhtml#l00463">TensorInfo::GetQuantizationScale()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;{</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; std::vector&lt;float&gt; ret(<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetNumElements());</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetNumElements(); i++)</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; {</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; ret[i] = <a class="code" href="namespacearmnn.xhtml#a855293b1be0581fb61ef6a1c5b027d0f">armnn::Dequantize</a>(quant[i], <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(), <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; }</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a855293b1be0581fb61ef6a1c5b027d0f"><div class="ttname"><a href="namespacearmnn.xhtml#a855293b1be0581fb61ef6a1c5b027d0f">armnn::Dequantize</a></div><div class="ttdeci">float Dequantize(QuantizedType value, float scale, int32_t offset)</div><div class="ttdoc">Dequantize an 8-bit data type into a floating point data type. </div><div class="ttdef"><b>Definition:</b> <a href="_types_utils_8cpp_source.xhtml#l00046">TypesUtils.cpp:46</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c"><div class="ttname"><a href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">armnn::BoostLogSeverityMapping::info</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a1204727d8ce3ee1e60daf08079eb892e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1204727d8ce3ee1e60daf08079eb892e">&#9670;&nbsp;</a></span>Dequantize() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void armnn::Dequantize </td>
+ <td>(</td>
+ <td class="paramtype">const T *&#160;</td>
+ <td class="paramname"><em>inputData</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float *&#160;</td>
+ <td class="paramname"><em>outputData</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>info</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ref_workload_utils_8hpp_source.xhtml#l00106">106</a> of file <a class="el" href="_ref_workload_utils_8hpp_source.xhtml">RefWorkloadUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_tensor_8hpp_source.xhtml#l00196">TensorInfo::GetNumElements()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00480">TensorInfo::GetQuantizationOffset()</a>, and <a class="el" href="_tensor_8cpp_source.xhtml#l00463">TensorInfo::GetQuantizationScale()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;{</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetNumElements(); i++)</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; {</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; outputData[i] = Dequantize&lt;T&gt;(inputData[i], <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(), <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; }</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c"><div class="ttname"><a href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">armnn::BoostLogSeverityMapping::info</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a855293b1be0581fb61ef6a1c5b027d0f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a855293b1be0581fb61ef6a1c5b027d0f">&#9670;&nbsp;</a></span>Dequantize() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float Dequantize </td>
+ <td>(</td>
+ <td class="paramtype">QuantizedType&#160;</td>
+ <td class="paramname"><em>value</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float&#160;</td>
+ <td class="paramname"><em>scale</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int32_t&#160;</td>
+ <td class="paramname"><em>offset</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Dequantize an 8-bit data type into a floating point data type. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">value</td><td>- The value to dequantize. </td></tr>
+ <tr><td class="paramname">scale</td><td>- The scale (must be non-zero). </td></tr>
+ <tr><td class="paramname">offset</td><td>- The offset. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>- The dequantized value calculated as (value-offset)*scale. </dd></dl>
+
+<p class="definition">Definition at line <a class="el" href="_types_utils_8cpp_source.xhtml#l00046">46</a> of file <a class="el" href="_types_utils_8cpp_source.xhtml">TypesUtils.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_quantize_helper_8hpp_source.xhtml#l00030">SelectiveQuantizer&lt; T, DoQuantize &gt;::Dequantize()</a>, <a class="el" href="_ref_workload_utils_8hpp_source.xhtml#l00095">Dequantize()</a>, <a class="el" href="_network_execution_utils_8cpp_source.xhtml#l00142">TensorPrinter::operator()()</a>, and <a class="el" href="_test_name_only_layer_visitor_8cpp_source.xhtml#l00035">TEST_SUITE()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;{</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; static_assert(IsQuantizedType&lt;QuantizedType&gt;(), <span class="stringliteral">&quot;Not an integer type.&quot;</span>);</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(scale != 0.f);</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(!IsNan(value));</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">return</span> (armnn::numeric_cast&lt;float&gt;(value - offset)) * scale;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;}</div><div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ae76ce23fa9fc18e56448d52b37dd3f32"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae76ce23fa9fc18e56448d52b37dd3f32">&#9670;&nbsp;</a></span>DetectionPostProcess()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void DetectionPostProcess </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>boxEncodingsInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>scoresInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>anchorsInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>detectionBoxesInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>detectionClassesInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>detectionScoresInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>numDetectionsInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_detection_post_process_descriptor.xhtml">DetectionPostProcessDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>desc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>boxEncodings</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>scores</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>anchors</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float *&#160;</td>
+ <td class="paramname"><em>detectionBoxes</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float *&#160;</td>
+ <td class="paramname"><em>detectionClasses</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float *&#160;</td>
+ <td class="paramname"><em>detectionScores</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float *&#160;</td>
+ <td class="paramname"><em>numDetections</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="backends_2reference_2workloads_2_detection_post_process_8cpp_source.xhtml#l00140">140</a> of file <a class="el" href="backends_2reference_2workloads_2_detection_post_process_8cpp_source.xhtml">DetectionPostProcess.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="backends_2reference_2workloads_2_detection_post_process_8cpp_source.xhtml#l00102">AllocateOutputData()</a>, <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>, <a class="el" href="backends_2reference_2workloads_2_detection_post_process_8cpp_source.xhtml#l00017">GenerateRangeK()</a>, <a class="el" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Decoder&lt; IType &gt;::Get()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00196">TensorInfo::GetNumElements()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</a>, <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused()</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00709">DetectionPostProcessDescriptor::m_DetectionsPerClass</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00707">DetectionPostProcessDescriptor::m_MaxClassesPerDetection</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00705">DetectionPostProcessDescriptor::m_MaxDetections</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00713">DetectionPostProcessDescriptor::m_NmsIouThreshold</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00711">DetectionPostProcessDescriptor::m_NmsScoreThreshold</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00715">DetectionPostProcessDescriptor::m_NumClasses</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00725">DetectionPostProcessDescriptor::m_ScaleH</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00723">DetectionPostProcessDescriptor::m_ScaleW</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00719">DetectionPostProcessDescriptor::m_ScaleX</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00721">DetectionPostProcessDescriptor::m_ScaleY</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00717">DetectionPostProcessDescriptor::m_UseRegularNms</a>, <a class="el" href="backends_2reference_2workloads_2_detection_post_process_8cpp_source.xhtml#l00049">NonMaxSuppression()</a>, <a class="el" href="_numeric_cast_8hpp_source.xhtml#l00035">numeric_cast()</a>, and <a class="el" href="backends_2reference_2workloads_2_detection_post_process_8cpp_source.xhtml#l00024">TopKSort()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_ref_detection_post_process_tests_8cpp_source.xhtml#l00013">TEST_SUITE()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;{</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(anchorsInfo, detectionClassesInfo, detectionScoresInfo, numDetectionsInfo);</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="comment">// Transform center-size format which is (ycenter, xcenter, height, width) to box-corner format,</span></div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="comment">// which represents the lower left corner and the upper right corner (ymin, xmin, ymax, xmax)</span></div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; std::vector&lt;float&gt; boxCorners(boxEncodingsInfo.GetNumElements());</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numBoxes = boxEncodingsInfo.GetShape()[1];</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numScores = scoresInfo.GetNumElements();</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; numBoxes; ++i)</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; {</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="comment">// Y</span></div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordtype">float</span> boxEncodingY = boxEncodings.<a class="code" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Get</a>();</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keywordtype">float</span> anchorY = anchors.<a class="code" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Get</a>();</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; ++boxEncodings;</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; ++anchors;</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="comment">// X</span></div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="keywordtype">float</span> boxEncodingX = boxEncodings.<a class="code" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Get</a>();</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="keywordtype">float</span> anchorX = anchors.<a class="code" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Get</a>();</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160;</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; ++boxEncodings;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; ++anchors;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="comment">// H</span></div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keywordtype">float</span> boxEncodingH = boxEncodings.<a class="code" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Get</a>();</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keywordtype">float</span> anchorH = anchors.<a class="code" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Get</a>();</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; ++boxEncodings;</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; ++anchors;</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160;</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="comment">// W</span></div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="keywordtype">float</span> boxEncodingW = boxEncodings.<a class="code" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Get</a>();</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keywordtype">float</span> anchorW = anchors.<a class="code" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Get</a>();</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; ++boxEncodings;</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; ++anchors;</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="keywordtype">float</span> yCentre = boxEncodingY / desc.m_ScaleY * anchorH + anchorY;</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keywordtype">float</span> xCentre = boxEncodingX / desc.m_ScaleX * anchorW + anchorX;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keywordtype">float</span> halfH = 0.5f * expf(boxEncodingH / desc.m_ScaleH) * anchorH;</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="keywordtype">float</span> halfW = 0.5f * expf(boxEncodingW / desc.m_ScaleW) * anchorW;</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> indexY = i * 4;</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> indexX = indexY + 1;</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> indexH = indexX + 1;</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> indexW = indexH + 1;</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="comment">// ymin</span></div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; boxCorners[indexY] = yCentre - halfH;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="comment">// xmin</span></div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; boxCorners[indexX] = xCentre - halfW;</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="comment">// ymax</span></div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; boxCorners[indexH] = yCentre + halfH;</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="comment">// xmax</span></div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; boxCorners[indexW] = xCentre + halfW;</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(boxCorners[indexY] &lt; boxCorners[indexH]);</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(boxCorners[indexX] &lt; boxCorners[indexW]);</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; }</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numClassesWithBg = desc.m_NumClasses + 1;</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160;</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="comment">// Decode scores</span></div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; std::vector&lt;float&gt; decodedScores;</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; decodedScores.reserve(numScores);</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160;</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0u; i &lt; numScores; ++i)</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; {</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; decodedScores.emplace_back(scores.<a class="code" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Get</a>());</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; ++scores;</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; }</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160;</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="comment">// Perform Non Max Suppression.</span></div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="keywordflow">if</span> (desc.m_UseRegularNms)</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; {</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="comment">// Perform Regular NMS.</span></div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="comment">// For each class, perform NMS and select max detection numbers of the highest score across all classes.</span></div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; std::vector&lt;float&gt; classScores(numBoxes);</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160;</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; std::vector&lt;unsigned int&gt; selectedBoxesAfterNms;</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; selectedBoxesAfterNms.reserve(numBoxes);</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160;</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; std::vector&lt;float&gt; selectedScoresAfterNms;</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; selectedBoxesAfterNms.reserve(numScores);</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160;</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; std::vector&lt;unsigned int&gt; selectedClasses;</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160;</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> c = 0; c &lt; desc.m_NumClasses; ++c)</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; {</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="comment">// For each boxes, get scores of the boxes for the class c.</span></div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; numBoxes; ++i)</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; {</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; classScores[i] = decodedScores[i * numClassesWithBg + c + 1];</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; }</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; std::vector&lt;unsigned int&gt; selectedIndices = <a class="code" href="namespacearmnn.xhtml#ac8c641d4a69c9a85c487cfbc7ea4d73c">NonMaxSuppression</a>(numBoxes,</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; boxCorners,</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; classScores,</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; desc.m_NmsScoreThreshold,</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; desc.m_DetectionsPerClass,</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; desc.m_NmsIouThreshold);</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160;</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; selectedIndices.size(); ++i)</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; {</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; selectedBoxesAfterNms.push_back(selectedIndices[i]);</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; selectedScoresAfterNms.push_back(classScores[selectedIndices[i]]);</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; selectedClasses.push_back(c);</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; }</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; }</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="comment">// Select max detection numbers of the highest score across all classes</span></div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numSelected = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(selectedBoxesAfterNms.size());</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numOutput = std::min(desc.m_MaxDetections, numSelected);</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160;</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="comment">// Sort the max scores among the selected indices.</span></div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; std::vector&lt;unsigned int&gt; outputIndices = <a class="code" href="namespacearmnn.xhtml#ae8ed5c640761fb6744aec0ee16388417">GenerateRangeK</a>(numSelected);</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <a class="code" href="namespacearmnn.xhtml#a2748f45e58b1c612d473043f711d1434">TopKSort</a>(numOutput, outputIndices.data(), selectedScoresAfterNms.data(), numSelected);</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160;</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <a class="code" href="namespacearmnn.xhtml#ae8dcbb74cf0c855724f12833a55a5684">AllocateOutputData</a>(detectionBoxesInfo.GetShape()[1], numOutput, boxCorners, outputIndices,</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; selectedBoxesAfterNms, selectedClasses, selectedScoresAfterNms,</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; detectionBoxes, detectionScores, detectionClasses, numDetections);</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; }</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; {</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="comment">// Perform Fast NMS.</span></div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="comment">// Select max scores of boxes and perform NMS on max scores,</span></div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="comment">// select max detection numbers of the highest score</span></div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numClassesPerBox = std::min(desc.m_MaxClassesPerDetection, desc.m_NumClasses);</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; std::vector&lt;float&gt; maxScores;</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; std::vector&lt;unsigned int&gt;boxIndices;</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; std::vector&lt;unsigned int&gt;maxScoreClasses;</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160;</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> box = 0; box &lt; numBoxes; ++box)</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; {</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> scoreIndex = box * numClassesWithBg + 1;</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="comment">// Get the max scores of the box.</span></div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; std::vector&lt;unsigned int&gt; maxScoreIndices = <a class="code" href="namespacearmnn.xhtml#ae8ed5c640761fb6744aec0ee16388417">GenerateRangeK</a>(desc.m_NumClasses);</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <a class="code" href="namespacearmnn.xhtml#a2748f45e58b1c612d473043f711d1434">TopKSort</a>(numClassesPerBox, maxScoreIndices.data(),</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; decodedScores.data() + scoreIndex, desc.m_NumClasses);</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160;</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; numClassesPerBox; ++i)</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; {</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; maxScores.push_back(decodedScores[scoreIndex + maxScoreIndices[i]]);</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; maxScoreClasses.push_back(maxScoreIndices[i]);</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; boxIndices.push_back(box);</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; }</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; }</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160;</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <span class="comment">// Perform NMS on max scores</span></div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; std::vector&lt;unsigned int&gt; selectedIndices = <a class="code" href="namespacearmnn.xhtml#ac8c641d4a69c9a85c487cfbc7ea4d73c">NonMaxSuppression</a>(numBoxes, boxCorners, maxScores,</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; desc.m_NmsScoreThreshold,</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; desc.m_MaxDetections,</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; desc.m_NmsIouThreshold);</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160;</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numSelected = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(selectedIndices.size());</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numOutput = std::min(desc.m_MaxDetections, numSelected);</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160;</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <a class="code" href="namespacearmnn.xhtml#ae8dcbb74cf0c855724f12833a55a5684">AllocateOutputData</a>(detectionBoxesInfo.GetShape()[1], numOutput, boxCorners, selectedIndices,</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; boxIndices, maxScoreClasses, maxScores,</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; detectionBoxes, detectionScores, detectionClasses, numDetections);</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; }</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ae8ed5c640761fb6744aec0ee16388417"><div class="ttname"><a href="namespacearmnn.xhtml#ae8ed5c640761fb6744aec0ee16388417">armnn::GenerateRangeK</a></div><div class="ttdeci">std::vector&lt; unsigned int &gt; GenerateRangeK(unsigned int k)</div><div class="ttdef"><b>Definition:</b> <a href="backends_2reference_2workloads_2_detection_post_process_8cpp_source.xhtml#l00017">DetectionPostProcess.cpp:17</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="classarmnn_1_1_decoder_xhtml_ac729108381e2340bea12877971713ecb"><div class="ttname"><a href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">armnn::Decoder::Get</a></div><div class="ttdeci">virtual IType Get() const =0</div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a2748f45e58b1c612d473043f711d1434"><div class="ttname"><a href="namespacearmnn.xhtml#a2748f45e58b1c612d473043f711d1434">armnn::TopKSort</a></div><div class="ttdeci">void TopKSort(unsigned int k, unsigned int *indices, const float *values, unsigned int numElement)</div><div class="ttdef"><b>Definition:</b> <a href="backends_2reference_2workloads_2_detection_post_process_8cpp_source.xhtml#l00024">DetectionPostProcess.cpp:24</a></div></div>
+<div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ae8dcbb74cf0c855724f12833a55a5684"><div class="ttname"><a href="namespacearmnn.xhtml#ae8dcbb74cf0c855724f12833a55a5684">armnn::AllocateOutputData</a></div><div class="ttdeci">void AllocateOutputData(unsigned int numOutput, unsigned int numSelected, const std::vector&lt; float &gt; &amp;boxCorners, const std::vector&lt; unsigned int &gt; &amp;outputIndices, const std::vector&lt; unsigned int &gt; &amp;selectedBoxes, const std::vector&lt; unsigned int &gt; &amp;selectedClasses, const std::vector&lt; float &gt; &amp;selectedScores, float *detectionBoxes, float *detectionScores, float *detectionClasses, float *numDetections)</div><div class="ttdef"><b>Definition:</b> <a href="backends_2reference_2workloads_2_detection_post_process_8cpp_source.xhtml#l00102">DetectionPostProcess.cpp:102</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a375ca3cff9f1b005d1412dc5f3cf5b6e"><div class="ttname"><a href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a></div><div class="ttdeci">std::enable_if_t&lt; std::is_unsigned&lt; Source &gt;::value &amp;&amp;std::is_unsigned&lt; Dest &gt;::value, Dest &gt; numeric_cast(Source source)</div><div class="ttdef"><b>Definition:</b> <a href="_numeric_cast_8hpp_source.xhtml#l00035">NumericCast.hpp:35</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ac8c641d4a69c9a85c487cfbc7ea4d73c"><div class="ttname"><a href="namespacearmnn.xhtml#ac8c641d4a69c9a85c487cfbc7ea4d73c">armnn::NonMaxSuppression</a></div><div class="ttdeci">std::vector&lt; unsigned int &gt; NonMaxSuppression(unsigned int numBoxes, const std::vector&lt; float &gt; &amp;boxCorners, const std::vector&lt; float &gt; &amp;scores, float nmsScoreThreshold, unsigned int maxDetection, float nmsIouThreshold)</div><div class="ttdef"><b>Definition:</b> <a href="backends_2reference_2workloads_2_detection_post_process_8cpp_source.xhtml#l00049">DetectionPostProcess.cpp:49</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a50805c29c35b9903c2dea301d8091711"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a50805c29c35b9903c2dea301d8091711">&#9670;&nbsp;</a></span>ExtractJsonObjects()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void armnn::ExtractJsonObjects </td>
+ <td>(</td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>inferenceIndex</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_event.xhtml">Event</a> *&#160;</td>
+ <td class="paramname"><em>parentEvent</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structarmnn_1_1_json_child_object.xhtml">JsonChildObject</a> &amp;&#160;</td>
+ <td class="paramname"><em>parentObject</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::map&lt; const <a class="el" href="classarmnn_1_1_event.xhtml">Event</a> *, std::vector&lt; const <a class="el" href="classarmnn_1_1_event.xhtml">Event</a> *&gt;&gt;&#160;</td>
+ <td class="paramname"><em>descendantsMap</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_profiling_8cpp_source.xhtml#l00303">303</a> of file <a class="el" href="_profiling_8cpp_source.xhtml">Profiling.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_json_printer_8hpp_source.xhtml#l00059">JsonChildObject::AddChild()</a>, <a class="el" href="_json_printer_8hpp_source.xhtml#l00039">JsonChildObject::AddMeasurement()</a>, <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>, <a class="el" href="namespacearmnn.xhtml#a4e2dd387ba6f0dc5164b4cdf8de3262aaa4ecfc70574394990cf17bd83df499f7">Event</a>, <a class="el" href="_json_printer_8hpp_source.xhtml#l00064">JsonChildObject::GetChild()</a>, <a class="el" href="_profiling_event_8cpp_source.xhtml#l00056">Event::GetMeasurements()</a>, <a class="el" href="_profiling_event_8cpp_source.xhtml#l00089">Event::GetProfilingGuid()</a>, <a class="el" href="_optional_8hpp_source.xhtml#l00053">OptionalBase::has_value()</a>, <a class="el" href="namespacearmnn.xhtml#a4e2dd387ba6f0dc5164b4cdf8de3262aa911842b19d8b2f9bbed8cfe909d52975">Measurement</a>, <a class="el" href="_json_printer_8hpp_source.xhtml#l00074">JsonChildObject::NumChildren()</a>, <a class="el" href="_json_printer_8hpp_source.xhtml#l00054">JsonChildObject::SetGuid()</a>, <a class="el" href="_json_printer_8hpp_source.xhtml#l00079">JsonChildObject::SetType()</a>, <a class="el" href="_json_printer_8hpp_source.xhtml#l00069">JsonChildObject::SetUnit()</a>, and <a class="el" href="_optional_8hpp_source.xhtml#l00146">OptionalReferenceSwitch&lt; IsReference, T &gt;::value()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_profiling_8cpp_source.xhtml#l00356">ProfilerImpl::Print()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160;{</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(parentEvent);</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <span class="comment">// If profiling GUID is entered, process it</span></div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="keywordflow">if</span> (parentEvent-&gt;GetProfilingGuid().has_value())</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; {</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; profiling::ProfilingGuid profilingGuid;</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; profilingGuid = parentEvent-&gt;GetProfilingGuid().value();</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; parentObject.SetGuid(profilingGuid);</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; }</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; std::vector&lt;Measurement&gt; instrumentMeasurements = parentEvent-&gt;GetMeasurements();</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> childIdx = 0;</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> measurementIndex = 0; measurementIndex &lt; instrumentMeasurements.size(); ++measurementIndex, ++childIdx)</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; {</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="keywordflow">if</span> (inferenceIndex == 0)</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; {</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="comment">// Only add kernel measurement once, in case of multiple inferences</span></div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; JsonChildObject measurementObject{ instrumentMeasurements[measurementIndex].m_Name };</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; measurementObject.SetUnit(instrumentMeasurements[measurementIndex].m_Unit);</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; measurementObject.SetType(JsonObjectType::Measurement);</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160;</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(parentObject.NumChildren() == childIdx);</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; parentObject.AddChild(measurementObject);</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; }</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160;</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; parentObject.GetChild(childIdx).AddMeasurement(instrumentMeasurements[measurementIndex].m_Value);</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; }</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160;</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <span class="keyword">auto</span> childEventsIt = descendantsMap.find(parentEvent);</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keywordflow">if</span> (childEventsIt != descendantsMap.end())</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; {</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> childEvent : childEventsIt-&gt;second)</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; {</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <span class="keywordflow">if</span> (inferenceIndex == 0)</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; {</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <span class="comment">// Only add second level once, in case of multiple inferences</span></div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; JsonChildObject childObject{ childEvent-&gt;GetName() };</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; childObject.SetType(JsonObjectType::Event);</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; parentObject.AddChild(childObject);</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; }</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160;</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <span class="comment">// Recursively process children. In reality this won&#39;t be very deep recursion. ~4-6 levels deep.</span></div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <a class="code" href="namespacearmnn.xhtml#a50805c29c35b9903c2dea301d8091711">ExtractJsonObjects</a>(inferenceIndex, childEvent, parentObject.GetChild(childIdx), descendantsMap);</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160;</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; childIdx++;</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; }</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; }</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a50805c29c35b9903c2dea301d8091711"><div class="ttname"><a href="namespacearmnn.xhtml#a50805c29c35b9903c2dea301d8091711">armnn::ExtractJsonObjects</a></div><div class="ttdeci">void ExtractJsonObjects(unsigned int inferenceIndex, const Event *parentEvent, JsonChildObject &amp;parentObject, std::map&lt; const Event *, std::vector&lt; const Event *&gt;&gt; descendantsMap)</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_8cpp_source.xhtml#l00303">Profiling.cpp:303</a></div></div>
+<div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ab3c0b7e1a78b1b98c24934221f36a7c3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab3c0b7e1a78b1b98c24934221f36a7c3">&#9670;&nbsp;</a></span>FakeQuantization()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void armnn::FakeQuantization </td>
+ <td>(</td>
+ <td class="paramtype">const float *&#160;</td>
+ <td class="paramname"><em>inputData</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float *&#160;</td>
+ <td class="paramname"><em>outputData</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">uint32_t&#160;</td>
+ <td class="paramname"><em>numElements</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float&#160;</td>
+ <td class="paramname"><em>min</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float&#160;</td>
+ <td class="paramname"><em>max</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ref_fake_quantization_float32_workload_8cpp_source.xhtml#l00017">17</a> of file <a class="el" href="_ref_fake_quantization_float32_workload_8cpp_source.xhtml">RefFakeQuantizationFloat32Workload.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_numeric_cast_8hpp_source.xhtml#l00035">numeric_cast()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_ref_layer_tests_8cpp_source.xhtml#l00014">TEST_SUITE()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;{</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keywordtype">float</span> scale = (max - min) / 255.f;</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; int32_t offset = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;int32_t&gt;((-min * 255.f) / (max - min));</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keywordflow">for</span> (uint32_t i = 0; i &lt; numElements; i++)</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; {</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; outputData[i] = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span>(armnn::Quantize&lt;uint8_t&gt;(inputData[i], scale, offset));</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; }</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a375ca3cff9f1b005d1412dc5f3cf5b6e"><div class="ttname"><a href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a></div><div class="ttdeci">std::enable_if_t&lt; std::is_unsigned&lt; Source &gt;::value &amp;&amp;std::is_unsigned&lt; Dest &gt;::value, Dest &gt; numeric_cast(Source source)</div><div class="ttdef"><b>Definition:</b> <a href="_numeric_cast_8hpp_source.xhtml#l00035">NumericCast.hpp:35</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a6e64aab48baba12883c73e90bfd07e77"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6e64aab48baba12883c73e90bfd07e77">&#9670;&nbsp;</a></span>FalseFunc()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::FalseFunc </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; std::string &amp;&gt;&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Params &amp;&amp;...&#160;</td>
+ <td class="paramname"><em>params</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layer_support_common_8hpp_source.xhtml#l00062">62</a> of file <a class="el" href="_layer_support_common_8hpp_source.xhtml">LayerSupportCommon.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;{</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(reasonIfUnsupported);</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(params...);</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a621c8ffe11bba3d7ab304a9ad3feec2f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a621c8ffe11bba3d7ab304a9ad3feec2f">&#9670;&nbsp;</a></span>FalseFuncF16()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::FalseFuncF16 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; std::string &amp;&gt;&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Params &amp;&amp;...&#160;</td>
+ <td class="paramname"><em>params</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layer_support_common_8hpp_source.xhtml#l00070">70</a> of file <a class="el" href="_layer_support_common_8hpp_source.xhtml">LayerSupportCommon.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused()</a>, and <a class="el" href="_layer_support_common_8hpp_source.xhtml#l00017">SetValueChecked()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;{</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(params...);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <a class="code" href="namespacearmnn.xhtml#a13c7d751e4d37f65a6d40c3c6e50d2b8">SetValueChecked</a>(reasonIfUnsupported, <span class="stringliteral">&quot;Layer is not supported with float16 data type&quot;</span>);</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a13c7d751e4d37f65a6d40c3c6e50d2b8"><div class="ttname"><a href="namespacearmnn.xhtml#a13c7d751e4d37f65a6d40c3c6e50d2b8">armnn::SetValueChecked</a></div><div class="ttdeci">void SetValueChecked(Optional&lt; T &amp;&gt; optionalRef, V &amp;&amp;val)</div><div class="ttdef"><b>Definition:</b> <a href="_layer_support_common_8hpp_source.xhtml#l00017">LayerSupportCommon.hpp:17</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a02d627e25da543b79ee8a59a1193a426"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a02d627e25da543b79ee8a59a1193a426">&#9670;&nbsp;</a></span>FalseFuncF32()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::FalseFuncF32 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; std::string &amp;&gt;&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Params &amp;&amp;...&#160;</td>
+ <td class="paramname"><em>params</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layer_support_common_8hpp_source.xhtml#l00078">78</a> of file <a class="el" href="_layer_support_common_8hpp_source.xhtml">LayerSupportCommon.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused()</a>, and <a class="el" href="_layer_support_common_8hpp_source.xhtml#l00017">SetValueChecked()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;{</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(params...);</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <a class="code" href="namespacearmnn.xhtml#a13c7d751e4d37f65a6d40c3c6e50d2b8">SetValueChecked</a>(reasonIfUnsupported, <span class="stringliteral">&quot;Layer is not supported with float32 data type&quot;</span>);</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a13c7d751e4d37f65a6d40c3c6e50d2b8"><div class="ttname"><a href="namespacearmnn.xhtml#a13c7d751e4d37f65a6d40c3c6e50d2b8">armnn::SetValueChecked</a></div><div class="ttdeci">void SetValueChecked(Optional&lt; T &amp;&gt; optionalRef, V &amp;&amp;val)</div><div class="ttdef"><b>Definition:</b> <a href="_layer_support_common_8hpp_source.xhtml#l00017">LayerSupportCommon.hpp:17</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a07ae80b502ab664f1aaf7d6c00725982"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a07ae80b502ab664f1aaf7d6c00725982">&#9670;&nbsp;</a></span>FalseFuncI32()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::FalseFuncI32 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; std::string &amp;&gt;&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Params &amp;&amp;...&#160;</td>
+ <td class="paramname"><em>params</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layer_support_common_8hpp_source.xhtml#l00094">94</a> of file <a class="el" href="_layer_support_common_8hpp_source.xhtml">LayerSupportCommon.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused()</a>, and <a class="el" href="_layer_support_common_8hpp_source.xhtml#l00017">SetValueChecked()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;{</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(params...);</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <a class="code" href="namespacearmnn.xhtml#a13c7d751e4d37f65a6d40c3c6e50d2b8">SetValueChecked</a>(reasonIfUnsupported, <span class="stringliteral">&quot;Layer is not supported with int32 data type&quot;</span>);</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a13c7d751e4d37f65a6d40c3c6e50d2b8"><div class="ttname"><a href="namespacearmnn.xhtml#a13c7d751e4d37f65a6d40c3c6e50d2b8">armnn::SetValueChecked</a></div><div class="ttdeci">void SetValueChecked(Optional&lt; T &amp;&gt; optionalRef, V &amp;&amp;val)</div><div class="ttdef"><b>Definition:</b> <a href="_layer_support_common_8hpp_source.xhtml#l00017">LayerSupportCommon.hpp:17</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a4e4802d0916cb8b7da508ab03ce1f163"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4e4802d0916cb8b7da508ab03ce1f163">&#9670;&nbsp;</a></span>FalseFuncU8()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::FalseFuncU8 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; std::string &amp;&gt;&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Params &amp;&amp;...&#160;</td>
+ <td class="paramname"><em>params</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layer_support_common_8hpp_source.xhtml#l00086">86</a> of file <a class="el" href="_layer_support_common_8hpp_source.xhtml">LayerSupportCommon.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused()</a>, and <a class="el" href="_layer_support_common_8hpp_source.xhtml#l00017">SetValueChecked()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;{</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(params...);</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <a class="code" href="namespacearmnn.xhtml#a13c7d751e4d37f65a6d40c3c6e50d2b8">SetValueChecked</a>(reasonIfUnsupported, <span class="stringliteral">&quot;Layer is not supported with 8-bit data type&quot;</span>);</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a13c7d751e4d37f65a6d40c3c6e50d2b8"><div class="ttname"><a href="namespacearmnn.xhtml#a13c7d751e4d37f65a6d40c3c6e50d2b8">armnn::SetValueChecked</a></div><div class="ttdeci">void SetValueChecked(Optional&lt; T &amp;&gt; optionalRef, V &amp;&amp;val)</div><div class="ttdef"><b>Definition:</b> <a href="_layer_support_common_8hpp_source.xhtml#l00017">LayerSupportCommon.hpp:17</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a216969fbba54df95de3e68435b8074d7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a216969fbba54df95de3e68435b8074d7">&#9670;&nbsp;</a></span>FalseInputFuncF16()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::FalseInputFuncF16 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; std::string &amp;&gt;&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Params &amp;&amp;...&#160;</td>
+ <td class="paramname"><em>params</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layer_support_common_8hpp_source.xhtml#l00110">110</a> of file <a class="el" href="_layer_support_common_8hpp_source.xhtml">LayerSupportCommon.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused()</a>, and <a class="el" href="_layer_support_common_8hpp_source.xhtml#l00017">SetValueChecked()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;{</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(params...);</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <a class="code" href="namespacearmnn.xhtml#a13c7d751e4d37f65a6d40c3c6e50d2b8">SetValueChecked</a>(reasonIfUnsupported, <span class="stringliteral">&quot;Layer is not supported with float16 data type input&quot;</span>);</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a13c7d751e4d37f65a6d40c3c6e50d2b8"><div class="ttname"><a href="namespacearmnn.xhtml#a13c7d751e4d37f65a6d40c3c6e50d2b8">armnn::SetValueChecked</a></div><div class="ttdeci">void SetValueChecked(Optional&lt; T &amp;&gt; optionalRef, V &amp;&amp;val)</div><div class="ttdef"><b>Definition:</b> <a href="_layer_support_common_8hpp_source.xhtml#l00017">LayerSupportCommon.hpp:17</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a0b55e509dd7e3bfea233a389a18c21e6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0b55e509dd7e3bfea233a389a18c21e6">&#9670;&nbsp;</a></span>FalseInputFuncF32()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::FalseInputFuncF32 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; std::string &amp;&gt;&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Params &amp;&amp;...&#160;</td>
+ <td class="paramname"><em>params</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layer_support_common_8hpp_source.xhtml#l00102">102</a> of file <a class="el" href="_layer_support_common_8hpp_source.xhtml">LayerSupportCommon.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused()</a>, and <a class="el" href="_layer_support_common_8hpp_source.xhtml#l00017">SetValueChecked()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;{</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(params...);</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <a class="code" href="namespacearmnn.xhtml#a13c7d751e4d37f65a6d40c3c6e50d2b8">SetValueChecked</a>(reasonIfUnsupported, <span class="stringliteral">&quot;Layer is not supported with float32 data type input&quot;</span>);</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a13c7d751e4d37f65a6d40c3c6e50d2b8"><div class="ttname"><a href="namespacearmnn.xhtml#a13c7d751e4d37f65a6d40c3c6e50d2b8">armnn::SetValueChecked</a></div><div class="ttdeci">void SetValueChecked(Optional&lt; T &amp;&gt; optionalRef, V &amp;&amp;val)</div><div class="ttdef"><b>Definition:</b> <a href="_layer_support_common_8hpp_source.xhtml#l00017">LayerSupportCommon.hpp:17</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a2febf8d85a92b69e4a677a7c632418ee"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2febf8d85a92b69e4a677a7c632418ee">&#9670;&nbsp;</a></span>FalseOutputFuncF16()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::FalseOutputFuncF16 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; std::string &amp;&gt;&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Params &amp;&amp;...&#160;</td>
+ <td class="paramname"><em>params</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layer_support_common_8hpp_source.xhtml#l00126">126</a> of file <a class="el" href="_layer_support_common_8hpp_source.xhtml">LayerSupportCommon.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused()</a>, and <a class="el" href="_layer_support_common_8hpp_source.xhtml#l00017">SetValueChecked()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;{</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(params...);</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <a class="code" href="namespacearmnn.xhtml#a13c7d751e4d37f65a6d40c3c6e50d2b8">SetValueChecked</a>(reasonIfUnsupported, <span class="stringliteral">&quot;Layer is not supported with float16 data type output&quot;</span>);</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a13c7d751e4d37f65a6d40c3c6e50d2b8"><div class="ttname"><a href="namespacearmnn.xhtml#a13c7d751e4d37f65a6d40c3c6e50d2b8">armnn::SetValueChecked</a></div><div class="ttdeci">void SetValueChecked(Optional&lt; T &amp;&gt; optionalRef, V &amp;&amp;val)</div><div class="ttdef"><b>Definition:</b> <a href="_layer_support_common_8hpp_source.xhtml#l00017">LayerSupportCommon.hpp:17</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ad3d0087e2533d808debd5c959fb3901f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad3d0087e2533d808debd5c959fb3901f">&#9670;&nbsp;</a></span>FalseOutputFuncF32()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::FalseOutputFuncF32 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; std::string &amp;&gt;&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Params &amp;&amp;...&#160;</td>
+ <td class="paramname"><em>params</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layer_support_common_8hpp_source.xhtml#l00118">118</a> of file <a class="el" href="_layer_support_common_8hpp_source.xhtml">LayerSupportCommon.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused()</a>, and <a class="el" href="_layer_support_common_8hpp_source.xhtml#l00017">SetValueChecked()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;{</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(params...);</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <a class="code" href="namespacearmnn.xhtml#a13c7d751e4d37f65a6d40c3c6e50d2b8">SetValueChecked</a>(reasonIfUnsupported, <span class="stringliteral">&quot;Layer is not supported with float32 data type output&quot;</span>);</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a13c7d751e4d37f65a6d40c3c6e50d2b8"><div class="ttname"><a href="namespacearmnn.xhtml#a13c7d751e4d37f65a6d40c3c6e50d2b8">armnn::SetValueChecked</a></div><div class="ttdeci">void SetValueChecked(Optional&lt; T &amp;&gt; optionalRef, V &amp;&amp;val)</div><div class="ttdef"><b>Definition:</b> <a href="_layer_support_common_8hpp_source.xhtml#l00017">LayerSupportCommon.hpp:17</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a88bebdfe6309aa2cd6831cfa73c296f0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a88bebdfe6309aa2cd6831cfa73c296f0">&#9670;&nbsp;</a></span>Fill()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Fill </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> &amp;&#160;</td>
+ <td class="paramname"><em>desiredOutputShape</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const float&#160;</td>
+ <td class="paramname"><em>value</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Creates a tensor and fills it with a scalar value. </p>
+
+<p class="definition">Definition at line <a class="el" href="_fill_8cpp_source.xhtml#l00013">13</a> of file <a class="el" href="_fill_8cpp_source.xhtml">Fill.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_tensor_8cpp_source.xhtml#l00181">TensorShape::GetNumElements()</a>, and <a class="el" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_test_name_and_descriptor_layer_visitor_8cpp_source.xhtml#l00274">TEST_SUITE()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;{</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; desiredOutputShape.GetNumElements(); ++i)</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; {</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; output[i];</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; output.<a class="code" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Set</a>(value);</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; }</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_encoder_xhtml_ae3b62b846a9c239f332830b9e36030eb"><div class="ttname"><a href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">armnn::Encoder::Set</a></div><div class="ttdeci">virtual void Set(IType right)=0</div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a1b90db39f6a9ebd11591e76fa364b06f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1b90db39f6a9ebd11591e76fa364b06f">&#9670;&nbsp;</a></span>FindKernelMeasurements()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::vector&lt;<a class="el" href="structarmnn_1_1_measurement.xhtml">Measurement</a>&gt; armnn::FindKernelMeasurements </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_event.xhtml">Event</a> *&#160;</td>
+ <td class="paramname"><em>event</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_profiling_8cpp_source.xhtml#l00062">62</a> of file <a class="el" href="_profiling_8cpp_source.xhtml">Profiling.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>, and <a class="el" href="_profiling_event_8cpp_source.xhtml#l00056">Event::GetMeasurements()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;{</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(event != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; std::vector&lt;Measurement&gt; measurements;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="comment">// Search through the measurements.</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; measurement : event-&gt;GetMeasurements())</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; {</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordflow">if</span> (measurement.m_Name.rfind(<span class="stringliteral">&quot;OpenClKernelTimer&quot;</span>, 0) == 0</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; || measurement.m_Name.rfind(<span class="stringliteral">&quot;NeonKernelTimer&quot;</span>, 0) == 0)</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; {</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="comment">// Measurement found.</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; measurements.push_back(measurement);</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; }</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; }</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordflow">return</span> measurements;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;}</div><div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a12d3ffe11b54c0aaa59bdd8415701c36"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a12d3ffe11b54c0aaa59bdd8415701c36">&#9670;&nbsp;</a></span>FindMeasurement()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structarmnn_1_1_measurement.xhtml">Measurement</a> armnn::FindMeasurement </td>
+ <td>(</td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>name</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_event.xhtml">Event</a> *&#160;</td>
+ <td class="paramname"><em>event</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_profiling_8cpp_source.xhtml#l00043">43</a> of file <a class="el" href="_profiling_8cpp_source.xhtml">Profiling.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>, and <a class="el" href="_profiling_event_8cpp_source.xhtml#l00056">Event::GetMeasurements()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_profiling_8cpp_source.xhtml#l00113">ProfilerImpl::AnalyzeEventSequenceAndWriteResults()</a>, and <a class="el" href="_profiling_8cpp_source.xhtml#l00082">ProfilerImpl::CalculateProfilingEventStats()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;{</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(event != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="comment">// Search though the measurements.</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; measurement : event-&gt;GetMeasurements())</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; {</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">if</span> (measurement.m_Name == name)</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; {</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="comment">// Measurement found.</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordflow">return</span> measurement;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; }</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; }</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="comment">// Measurement not found.</span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a4e2dd387ba6f0dc5164b4cdf8de3262aa911842b19d8b2f9bbed8cfe909d52975">Measurement</a>{ <span class="stringliteral">&quot;&quot;</span>, 0.f, Measurement::Unit::TIME_MS };</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;}</div><div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a4e2dd387ba6f0dc5164b4cdf8de3262aa911842b19d8b2f9bbed8cfe909d52975"><div class="ttname"><a href="namespacearmnn.xhtml#a4e2dd387ba6f0dc5164b4cdf8de3262aa911842b19d8b2f9bbed8cfe909d52975">armnn::JsonObjectType::Measurement</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a122d3124b7b19958eb053ffb9ace0dac"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a122d3124b7b19958eb053ffb9ace0dac">&#9670;&nbsp;</a></span>FinishClContextBuffer()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void armnn::FinishClContextBuffer </td>
+ <td>(</td>
+ <td class="paramtype">flatbuffers::FlatBufferBuilder &amp;&#160;</td>
+ <td class="paramname"><em>fbb</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">flatbuffers::Offset&lt; armnn::ClContext &gt;&#160;</td>
+ <td class="paramname"><em>root</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_context_schema__generated_8h_source.xhtml#l00171">171</a> of file <a class="el" href="_cl_context_schema__generated_8h_source.xhtml">ClContextSchema_generated.h</a>.</p>
+
+<p class="reference">References <a class="el" href="_cl_context_schema__generated_8h_source.xhtml#l00148">ClContextIdentifier()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; {</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; fbb.Finish(root, <a class="code" href="namespacearmnn.xhtml#ab672391d036102ab6864bb181d4844d5">ClContextIdentifier</a>());</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ab672391d036102ab6864bb181d4844d5"><div class="ttname"><a href="namespacearmnn.xhtml#ab672391d036102ab6864bb181d4844d5">armnn::ClContextIdentifier</a></div><div class="ttdeci">const char * ClContextIdentifier()</div><div class="ttdef"><b>Definition:</b> <a href="_cl_context_schema__generated_8h_source.xhtml#l00148">ClContextSchema_generated.h:148</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a4761eadb938ae8e1322d60ac319276d2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4761eadb938ae8e1322d60ac319276d2">&#9670;&nbsp;</a></span>FinishSizePrefixedClContextBuffer()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void armnn::FinishSizePrefixedClContextBuffer </td>
+ <td>(</td>
+ <td class="paramtype">flatbuffers::FlatBufferBuilder &amp;&#160;</td>
+ <td class="paramname"><em>fbb</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">flatbuffers::Offset&lt; armnn::ClContext &gt;&#160;</td>
+ <td class="paramname"><em>root</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_context_schema__generated_8h_source.xhtml#l00177">177</a> of file <a class="el" href="_cl_context_schema__generated_8h_source.xhtml">ClContextSchema_generated.h</a>.</p>
+
+<p class="reference">References <a class="el" href="_cl_context_schema__generated_8h_source.xhtml#l00148">ClContextIdentifier()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; {</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; fbb.FinishSizePrefixed(root, <a class="code" href="namespacearmnn.xhtml#ab672391d036102ab6864bb181d4844d5">ClContextIdentifier</a>());</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ab672391d036102ab6864bb181d4844d5"><div class="ttname"><a href="namespacearmnn.xhtml#ab672391d036102ab6864bb181d4844d5">armnn::ClContextIdentifier</a></div><div class="ttdeci">const char * ClContextIdentifier()</div><div class="ttdef"><b>Definition:</b> <a href="_cl_context_schema__generated_8h_source.xhtml#l00148">ClContextSchema_generated.h:148</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="afce94270d9c4a51cd0c4ac6a58af4e26"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afce94270d9c4a51cd0c4ac6a58af4e26">&#9670;&nbsp;</a></span>ForEachLayerInput()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void armnn::ForEachLayerInput </td>
+ <td>(</td>
+ <td class="paramtype">LayerSelectionInfo::LayerInfoContainer &amp;&#160;</td>
+ <td class="paramname"><em>layerInfos</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">LayerSelectionInfo &amp;&#160;</td>
+ <td class="paramname"><em>layerInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Delegate&#160;</td>
+ <td class="paramname"><em>function</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_subgraph_view_selector_8cpp_source.xhtml#l00267">267</a> of file <a class="el" href="_subgraph_view_selector_8cpp_source.xhtml">SubgraphViewSelector.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00015">ARMNN_ASSERT_MSG</a>, and <a class="el" href="_layer_8hpp_source.xhtml#l00242">Layer::GetInputSlots()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_subgraph_view_selector_8cpp_source.xhtml#l00309">AssignSplitId()</a>, and <a class="el" href="_subgraph_view_selector_8cpp_source.xhtml#l00374">IsReadyForSplitAssignment()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;{</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <a class="code" href="namespacearmnn_serializer.xhtml#a9a8118be7780e95363d631cbca7e7800">Layer</a>&amp; layer = *PolymorphicDowncast&lt;Layer*&gt;(layerInfo.m_Layer);</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> inputSlot : layer.GetInputSlots())</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; {</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keyword">auto</span> connectedInput = PolymorphicDowncast&lt;OutputSlot*&gt;(inputSlot.GetConnection());</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(connectedInput, <span class="stringliteral">&quot;Dangling input slot detected.&quot;</span>);</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <a class="code" href="namespacearmnn_serializer.xhtml#a9a8118be7780e95363d631cbca7e7800">Layer</a>&amp; inputLayer = connectedInput-&gt;GetOwningLayer();</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160;</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keyword">auto</span> parentInfo = layerInfos.find(&amp;inputLayer);</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keywordflow">if</span> (parentInfo != layerInfos.end())</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; {</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keyword">function</span>(parentInfo-&gt;second);</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; }</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; }</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;}</div><div class="ttc" id="namespacearmnn_serializer_xhtml_a9a8118be7780e95363d631cbca7e7800"><div class="ttname"><a href="namespacearmnn_serializer.xhtml#a9a8118be7780e95363d631cbca7e7800">armnnSerializer::Layer</a></div><div class="ttdeci">Layer</div><div class="ttdef"><b>Definition:</b> <a href="_armnn_schema__generated_8h_source.xhtml#l01243">ArmnnSchema_generated.h:1243</a></div></div>
+<div class="ttc" id="_assert_8hpp_xhtml_a91c4dfde57907d7698c7531785690a7f"><div class="ttname"><a href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a></div><div class="ttdeci">#define ARMNN_ASSERT_MSG(COND, MSG)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00015">Assert.hpp:15</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a49538fa883b70c944e437d65d6628eec"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a49538fa883b70c944e437d65d6628eec">&#9670;&nbsp;</a></span>ForEachLayerOutput()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void armnn::ForEachLayerOutput </td>
+ <td>(</td>
+ <td class="paramtype">LayerSelectionInfo::LayerInfoContainer &amp;&#160;</td>
+ <td class="paramname"><em>layerInfos</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">LayerSelectionInfo &amp;&#160;</td>
+ <td class="paramname"><em>layerInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Delegate&#160;</td>
+ <td class="paramname"><em>function</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_subgraph_view_selector_8cpp_source.xhtml#l00288">288</a> of file <a class="el" href="_subgraph_view_selector_8cpp_source.xhtml">SubgraphViewSelector.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_layer_8hpp_source.xhtml#l00243">Layer::GetOutputSlots()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_subgraph_view_selector_8cpp_source.xhtml#l00389">SubgraphViewSelector::SelectSubgraphs()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160;{</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <a class="code" href="namespacearmnn_serializer.xhtml#a9a8118be7780e95363d631cbca7e7800">Layer</a>&amp; layer = *PolymorphicDowncast&lt;Layer*&gt;(layerInfo.m_Layer);</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; outputSlot : layer.GetOutputSlots())</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; {</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; output : outputSlot.GetConnections())</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; {</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <a class="code" href="namespacearmnn_serializer.xhtml#a9a8118be7780e95363d631cbca7e7800">Layer</a>&amp; childLayer = output-&gt;GetOwningLayer();</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160;</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keyword">auto</span> childInfo = layerInfos.find(&amp;childLayer);</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="keywordflow">if</span> (childInfo != layerInfos.end())</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; {</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keyword">function</span>(childInfo-&gt;second);</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; }</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; }</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; }</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160;}</div><div class="ttc" id="namespacearmnn_serializer_xhtml_a9a8118be7780e95363d631cbca7e7800"><div class="ttname"><a href="namespacearmnn_serializer.xhtml#a9a8118be7780e95363d631cbca7e7800">armnnSerializer::Layer</a></div><div class="ttdeci">Layer</div><div class="ttdef"><b>Definition:</b> <a href="_armnn_schema__generated_8h_source.xhtml#l01243">ArmnnSchema_generated.h:1243</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a435f9350a94adfbb0d5b9abb5f430914"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a435f9350a94adfbb0d5b9abb5f430914">&#9670;&nbsp;</a></span>FullyConnected()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void FullyConnected </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> &amp;&#160;</td>
+ <td class="paramname"><em>rInputShape</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>rInputDecoder</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> &amp;&#160;</td>
+ <td class="paramname"><em>rOutputShape</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>rOutputEncoder</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> &amp;&#160;</td>
+ <td class="paramname"><em>rWeightsShape</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>rWeightDecoder</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; *&#160;</td>
+ <td class="paramname"><em>pBiasDecoder</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const bool&#160;</td>
+ <td class="paramname"><em>biasEnabled</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const unsigned int&#160;</td>
+ <td class="paramname"><em>K</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const bool&#160;</td>
+ <td class="paramname"><em>transposeWeights</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Performs a matrix multiplication and optionally adds a bias. </p>
+
+<p class="definition">Definition at line <a class="el" href="backends_2reference_2workloads_2_fully_connected_8cpp_source.xhtml#l00015">15</a> of file <a class="el" href="backends_2reference_2workloads_2_fully_connected_8cpp_source.xhtml">FullyConnected.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>, <a class="el" href="classarmnn_1_1_decoder.xhtml#aafe0168dd5ece89e7c62e8d83a4e57cd">Decoder&lt; IType &gt;::DecodeTensor()</a>, and <a class="el" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;{</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="comment">// Perform FullyConnected implementation</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputSize = rOutputShape[1];</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keyword">const</span> std::vector&lt;float&gt; decodedInputs = rInputDecoder.<a class="code" href="classarmnn_1_1_decoder.xhtml#aafe0168dd5ece89e7c62e8d83a4e57cd">DecodeTensor</a>(rInputShape);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keyword">const</span> std::vector&lt;float&gt; decodedWeights = rWeightDecoder.<a class="code" href="classarmnn_1_1_decoder.xhtml#aafe0168dd5ece89e7c62e8d83a4e57cd">DecodeTensor</a>(rWeightsShape);</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">const</span> TensorShape biasShape{outputSize};</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(!biasEnabled || pBiasDecoder != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">const</span> std::vector&lt;float&gt; decodedBiases = biasEnabled ? pBiasDecoder-&gt;<a class="code" href="classarmnn_1_1_decoder.xhtml#aafe0168dd5ece89e7c62e8d83a4e57cd">DecodeTensor</a>(biasShape) : std::vector&lt;float&gt;();</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> n = 0; n &lt; rInputShape[0]; n++)</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; {</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channelOutput = 0; channelOutput &lt; outputSize; channelOutput++)</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; {</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordtype">float</span> outval = 0.f;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channelInput = 0; channelInput &lt; K; channelInput++)</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; {</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordtype">float</span> weight;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordflow">if</span> (transposeWeights)</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; {</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; weight = decodedWeights[channelOutput * K + channelInput];</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; }</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; {</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; weight = decodedWeights[channelInput * outputSize + channelOutput];</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; }</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; outval += weight * decodedInputs[n * K + channelInput];</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; }</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">if</span> (biasEnabled)</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; {</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; outval += decodedBiases[channelOutput];</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; }</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; rOutputEncoder[n * outputSize + channelOutput];</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; rOutputEncoder.<a class="code" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Set</a>(outval);</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; }</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; }</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_decoder_xhtml_aafe0168dd5ece89e7c62e8d83a4e57cd"><div class="ttname"><a href="classarmnn_1_1_decoder.xhtml#aafe0168dd5ece89e7c62e8d83a4e57cd">armnn::Decoder::DecodeTensor</a></div><div class="ttdeci">virtual std::vector&lt; float &gt; DecodeTensor(const TensorShape &amp;tensorShape, bool isDepthwise=false)=0</div></div>
+<div class="ttc" id="classarmnn_1_1_encoder_xhtml_ae3b62b846a9c239f332830b9e36030eb"><div class="ttname"><a href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">armnn::Encoder::Set</a></div><div class="ttdeci">virtual void Set(IType right)=0</div></div>
+<div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a13f537c12c25c936c152ccca78d902dd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a13f537c12c25c936c152ccca78d902dd">&#9670;&nbsp;</a></span>FuseAdditionLayer()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* armnn::FuseAdditionLayer </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_optimization_views.xhtml">OptimizationViews</a> &amp;&#160;</td>
+ <td class="paramname"><em>optimizationViews</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *&#160;</td>
+ <td class="paramname"><em>baseLayer</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_activation_layer.xhtml">ActivationLayer</a> *&#160;</td>
+ <td class="paramname"><em>activationLayer</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>activationDesc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::string&#160;</td>
+ <td class="paramname"><em>name</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00116">116</a> of file <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml">ArmComputeSubgraphUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00096">FuseLayer()</a>, and <a class="el" href="include_2armnn_2backends_2_optimization_views_8hpp_source.xhtml#l00062">OptimizationViews::GetINetwork()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;{</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; IConnectableLayer* replacement = optimizationViews.GetINetwork()-&gt;AddAdditionLayer(name.c_str());</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast&lt;LayerType*&gt;(replacement);</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <a class="code" href="namespacearmnn.xhtml#a7e4811ef91f499424bca36e98a2fbd96">FuseLayer</a>(optimizationViews,</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; baseLayer,</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; replacementLayer,</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; activationLayer,</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; activationDesc);</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordflow">return</span> replacementLayer;</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a7e4811ef91f499424bca36e98a2fbd96"><div class="ttname"><a href="namespacearmnn.xhtml#a7e4811ef91f499424bca36e98a2fbd96">armnn::FuseLayer</a></div><div class="ttdeci">LayerType * FuseLayer(OptimizationViews &amp;optimizationViews, LayerType *baseLayer, LayerType *replacementLayer, ActivationLayer *activationLayer, ActivationDescriptor &amp;activationDesc)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00096">ArmComputeSubgraphUtils.hpp:96</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a56943a0946e5f15e5e58054b8e7a04a4"><div class="ttname"><a href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">armnn::LayerType</a></div><div class="ttdeci">LayerType</div><div class="ttdoc">When adding a new layer, adapt also the LastLayer enum value in the enum class LayerType below...</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00458">Types.hpp:458</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="aa4a4b141867313cddb82c96800db343e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa4a4b141867313cddb82c96800db343e">&#9670;&nbsp;</a></span>FuseBatchNormalizationLayer()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* armnn::FuseBatchNormalizationLayer </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_optimization_views.xhtml">OptimizationViews</a> &amp;&#160;</td>
+ <td class="paramname"><em>optimizationViews</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *&#160;</td>
+ <td class="paramname"><em>baseLayer</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_activation_layer.xhtml">ActivationLayer</a> *&#160;</td>
+ <td class="paramname"><em>activationLayer</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>activationDesc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::string&#160;</td>
+ <td class="paramname"><em>name</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00192">192</a> of file <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml">ArmComputeSubgraphUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00096">FuseLayer()</a>, and <a class="el" href="include_2armnn_2backends_2_optimization_views_8hpp_source.xhtml#l00062">OptimizationViews::GetINetwork()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;{</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; IConnectableLayer* replacement =</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; optimizationViews.GetINetwork()-&gt;AddBatchNormalizationLayer(baseLayer-&gt;GetParameters(),</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; ConstTensor(),</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; ConstTensor(),</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; ConstTensor(),</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; ConstTensor(),</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; name.c_str());</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast&lt;LayerType*&gt;(replacement);</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <a class="code" href="namespacearmnn.xhtml#a7e4811ef91f499424bca36e98a2fbd96">FuseLayer</a>(optimizationViews,</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; baseLayer,</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; replacementLayer,</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; activationLayer,</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; activationDesc);</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160;</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; SubgraphView substitutionSubgraph({baseLayer, activationLayer},</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; CreateIInputsFrom({baseLayer}),</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; CreateIOutputsFrom({activationLayer}));</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; SubgraphView replacementSubgraph(replacementLayer);</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160;</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="keywordflow">return</span> replacementLayer;</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a7e4811ef91f499424bca36e98a2fbd96"><div class="ttname"><a href="namespacearmnn.xhtml#a7e4811ef91f499424bca36e98a2fbd96">armnn::FuseLayer</a></div><div class="ttdeci">LayerType * FuseLayer(OptimizationViews &amp;optimizationViews, LayerType *baseLayer, LayerType *replacementLayer, ActivationLayer *activationLayer, ActivationDescriptor &amp;activationDesc)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00096">ArmComputeSubgraphUtils.hpp:96</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a56943a0946e5f15e5e58054b8e7a04a4"><div class="ttname"><a href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">armnn::LayerType</a></div><div class="ttdeci">LayerType</div><div class="ttdoc">When adding a new layer, adapt also the LastLayer enum value in the enum class LayerType below...</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00458">Types.hpp:458</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="afdb0a1b1703203354451e78e2fc43f3f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afdb0a1b1703203354451e78e2fc43f3f">&#9670;&nbsp;</a></span>FuseConvolution2dLayer()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* armnn::FuseConvolution2dLayer </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_optimization_views.xhtml">OptimizationViews</a> &amp;&#160;</td>
+ <td class="paramname"><em>optimizationViews</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *&#160;</td>
+ <td class="paramname"><em>baseLayer</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_activation_layer.xhtml">ActivationLayer</a> *&#160;</td>
+ <td class="paramname"><em>activationLayer</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>activationDesc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::string&#160;</td>
+ <td class="paramname"><em>name</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00222">222</a> of file <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml">ArmComputeSubgraphUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00096">FuseLayer()</a>, and <a class="el" href="include_2armnn_2backends_2_optimization_views_8hpp_source.xhtml#l00062">OptimizationViews::GetINetwork()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160;{</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; std::shared_ptr&lt;ConstTensorHandle&gt; weightHandle = baseLayer-&gt;m_Weight;</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; TensorInfo weightInfo = weightHandle-&gt;GetTensorInfo();</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160;</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; std::shared_ptr&lt;ConstTensorHandle&gt; biasHandle = baseLayer-&gt;m_Bias;</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; ConstTensor biasTensor;</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="keywordflow">if</span> (!biasHandle)</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; {</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; biasTensor = ConstTensor();</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; }</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; {</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; biasTensor = ConstTensor(biasHandle-&gt;GetTensorInfo(), biasHandle-&gt;Map(<span class="keyword">true</span>));</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; }</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; IConnectableLayer* replacement =</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; optimizationViews.GetINetwork()-&gt;</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; AddConvolution2dLayer(baseLayer-&gt;GetParameters(),</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; ConstTensor(weightInfo, weightHandle-&gt;Map(<span class="keyword">true</span>)),</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; Optional&lt;ConstTensor&gt;(biasTensor),</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; name.c_str());</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast&lt;LayerType*&gt;(replacement);</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160;</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <a class="code" href="namespacearmnn.xhtml#a7e4811ef91f499424bca36e98a2fbd96">FuseLayer</a>(optimizationViews,</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; baseLayer,</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; replacementLayer,</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; activationLayer,</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; activationDesc);</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="keywordflow">return</span> replacementLayer;</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a7e4811ef91f499424bca36e98a2fbd96"><div class="ttname"><a href="namespacearmnn.xhtml#a7e4811ef91f499424bca36e98a2fbd96">armnn::FuseLayer</a></div><div class="ttdeci">LayerType * FuseLayer(OptimizationViews &amp;optimizationViews, LayerType *baseLayer, LayerType *replacementLayer, ActivationLayer *activationLayer, ActivationDescriptor &amp;activationDesc)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00096">ArmComputeSubgraphUtils.hpp:96</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a56943a0946e5f15e5e58054b8e7a04a4"><div class="ttname"><a href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">armnn::LayerType</a></div><div class="ttdeci">LayerType</div><div class="ttdoc">When adding a new layer, adapt also the LastLayer enum value in the enum class LayerType below...</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00458">Types.hpp:458</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ae795a54643adfeb37ac95dee68807856"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae795a54643adfeb37ac95dee68807856">&#9670;&nbsp;</a></span>FuseDepthwiseConvolution2dLayer()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* armnn::FuseDepthwiseConvolution2dLayer </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_optimization_views.xhtml">OptimizationViews</a> &amp;&#160;</td>
+ <td class="paramname"><em>optimizationViews</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *&#160;</td>
+ <td class="paramname"><em>baseLayer</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_activation_layer.xhtml">ActivationLayer</a> *&#160;</td>
+ <td class="paramname"><em>activationLayer</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>activationDesc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::string&#160;</td>
+ <td class="paramname"><em>name</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00260">260</a> of file <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml">ArmComputeSubgraphUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00096">FuseLayer()</a>, and <a class="el" href="include_2armnn_2backends_2_optimization_views_8hpp_source.xhtml#l00062">OptimizationViews::GetINetwork()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160;{</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; std::shared_ptr&lt;ConstTensorHandle&gt; weightHandle = baseLayer-&gt;m_Weight;</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; TensorInfo weightInfo = weightHandle-&gt;GetTensorInfo();</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160;</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; std::shared_ptr&lt;ConstTensorHandle&gt; biasHandle = baseLayer-&gt;m_Bias;</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; ConstTensor biasTensor;</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="keywordflow">if</span> (!biasHandle)</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; {</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; biasTensor = ConstTensor();</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; }</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; {</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; biasTensor = ConstTensor(biasHandle-&gt;GetTensorInfo(), biasHandle-&gt;Map(<span class="keyword">true</span>));</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; }</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160;</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; IConnectableLayer* replacement =</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; optimizationViews.GetINetwork()-&gt;</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; AddDepthwiseConvolution2dLayer(baseLayer-&gt;GetParameters(),</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; ConstTensor(weightInfo, weightHandle-&gt;Map(<span class="keyword">true</span>)),</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; Optional&lt;ConstTensor&gt;(biasTensor),</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; name.c_str());</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast&lt;LayerType*&gt;(replacement);</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160;</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <a class="code" href="namespacearmnn.xhtml#a7e4811ef91f499424bca36e98a2fbd96">FuseLayer</a>(optimizationViews,</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; baseLayer,</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; replacementLayer,</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; activationLayer,</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; activationDesc);</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keywordflow">return</span> replacementLayer;</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a7e4811ef91f499424bca36e98a2fbd96"><div class="ttname"><a href="namespacearmnn.xhtml#a7e4811ef91f499424bca36e98a2fbd96">armnn::FuseLayer</a></div><div class="ttdeci">LayerType * FuseLayer(OptimizationViews &amp;optimizationViews, LayerType *baseLayer, LayerType *replacementLayer, ActivationLayer *activationLayer, ActivationDescriptor &amp;activationDesc)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00096">ArmComputeSubgraphUtils.hpp:96</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a56943a0946e5f15e5e58054b8e7a04a4"><div class="ttname"><a href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">armnn::LayerType</a></div><div class="ttdeci">LayerType</div><div class="ttdoc">When adding a new layer, adapt also the LastLayer enum value in the enum class LayerType below...</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00458">Types.hpp:458</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a90f36a629081255b526ac433fcedf8ba"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a90f36a629081255b526ac433fcedf8ba">&#9670;&nbsp;</a></span>FuseDivisionLayer()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* armnn::FuseDivisionLayer </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_optimization_views.xhtml">OptimizationViews</a> &amp;&#160;</td>
+ <td class="paramname"><em>optimizationViews</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *&#160;</td>
+ <td class="paramname"><em>baseLayer</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_activation_layer.xhtml">ActivationLayer</a> *&#160;</td>
+ <td class="paramname"><em>activationLayer</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>activationDesc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::string&#160;</td>
+ <td class="paramname"><em>name</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00154">154</a> of file <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml">ArmComputeSubgraphUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00096">FuseLayer()</a>, and <a class="el" href="include_2armnn_2backends_2_optimization_views_8hpp_source.xhtml#l00062">OptimizationViews::GetINetwork()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;{</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; IConnectableLayer* replacement = optimizationViews.GetINetwork()-&gt;AddDivisionLayer(name.c_str());</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast&lt;LayerType*&gt;(replacement);</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <a class="code" href="namespacearmnn.xhtml#a7e4811ef91f499424bca36e98a2fbd96">FuseLayer</a>(optimizationViews,</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; baseLayer,</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; replacementLayer,</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; activationLayer,</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; activationDesc);</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keywordflow">return</span> replacementLayer;</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a7e4811ef91f499424bca36e98a2fbd96"><div class="ttname"><a href="namespacearmnn.xhtml#a7e4811ef91f499424bca36e98a2fbd96">armnn::FuseLayer</a></div><div class="ttdeci">LayerType * FuseLayer(OptimizationViews &amp;optimizationViews, LayerType *baseLayer, LayerType *replacementLayer, ActivationLayer *activationLayer, ActivationDescriptor &amp;activationDesc)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00096">ArmComputeSubgraphUtils.hpp:96</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a56943a0946e5f15e5e58054b8e7a04a4"><div class="ttname"><a href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">armnn::LayerType</a></div><div class="ttdeci">LayerType</div><div class="ttdoc">When adding a new layer, adapt also the LastLayer enum value in the enum class LayerType below...</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00458">Types.hpp:458</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ad2021f80998e436e27de7b7eeec67d54"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad2021f80998e436e27de7b7eeec67d54">&#9670;&nbsp;</a></span>FuseFullyConnectedLayer()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* armnn::FuseFullyConnectedLayer </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_optimization_views.xhtml">OptimizationViews</a> &amp;&#160;</td>
+ <td class="paramname"><em>optimizationViews</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *&#160;</td>
+ <td class="paramname"><em>baseLayer</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_activation_layer.xhtml">ActivationLayer</a> *&#160;</td>
+ <td class="paramname"><em>activationLayer</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>activationDesc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::string&#160;</td>
+ <td class="paramname"><em>name</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00298">298</a> of file <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml">ArmComputeSubgraphUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00096">FuseLayer()</a>, and <a class="el" href="include_2armnn_2backends_2_optimization_views_8hpp_source.xhtml#l00062">OptimizationViews::GetINetwork()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160;{</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; IConnectableLayer* replacement =</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; optimizationViews.GetINetwork()-&gt;AddFullyConnectedLayer(baseLayer-&gt;GetParameters(),</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; name.c_str());</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast&lt;LayerType*&gt;(replacement);</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <a class="code" href="namespacearmnn.xhtml#a7e4811ef91f499424bca36e98a2fbd96">FuseLayer</a>(optimizationViews,</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; baseLayer,</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; replacementLayer,</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; activationLayer,</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; activationDesc);</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160;</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; replacementLayer-&gt;m_Weight = std::move(baseLayer-&gt;m_Weight);</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; replacementLayer-&gt;m_Bias = std::move(baseLayer-&gt;m_Bias);</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160;</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="keywordflow">return</span> replacementLayer;</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a7e4811ef91f499424bca36e98a2fbd96"><div class="ttname"><a href="namespacearmnn.xhtml#a7e4811ef91f499424bca36e98a2fbd96">armnn::FuseLayer</a></div><div class="ttdeci">LayerType * FuseLayer(OptimizationViews &amp;optimizationViews, LayerType *baseLayer, LayerType *replacementLayer, ActivationLayer *activationLayer, ActivationDescriptor &amp;activationDesc)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00096">ArmComputeSubgraphUtils.hpp:96</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a56943a0946e5f15e5e58054b8e7a04a4"><div class="ttname"><a href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">armnn::LayerType</a></div><div class="ttdeci">LayerType</div><div class="ttdoc">When adding a new layer, adapt also the LastLayer enum value in the enum class LayerType below...</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00458">Types.hpp:458</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a7e4811ef91f499424bca36e98a2fbd96"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7e4811ef91f499424bca36e98a2fbd96">&#9670;&nbsp;</a></span>FuseLayer()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* armnn::FuseLayer </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_optimization_views.xhtml">OptimizationViews</a> &amp;&#160;</td>
+ <td class="paramname"><em>optimizationViews</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *&#160;</td>
+ <td class="paramname"><em>baseLayer</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *&#160;</td>
+ <td class="paramname"><em>replacementLayer</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_activation_layer.xhtml">ActivationLayer</a> *&#160;</td>
+ <td class="paramname"><em>activationLayer</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>activationDesc</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00096">96</a> of file <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml">ArmComputeSubgraphUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="include_2armnn_2backends_2_optimization_views_8hpp_source.xhtml#l00034">OptimizationViews::AddSubstitution()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00116">FuseAdditionLayer()</a>, <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00192">FuseBatchNormalizationLayer()</a>, <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00222">FuseConvolution2dLayer()</a>, <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00260">FuseDepthwiseConvolution2dLayer()</a>, <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00154">FuseDivisionLayer()</a>, <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00298">FuseFullyConnectedLayer()</a>, <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00173">FuseMultiplicationLayer()</a>, and <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00135">FuseSubtractionLayer()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;{</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; replacementLayer-&gt;SetAdditionalInfoForObject(</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; std::make_shared&lt;ActivationDescriptor&gt;(activationDesc));</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; SubgraphView substitutionSubgraph({baseLayer, activationLayer},</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; CreateIInputsFrom({baseLayer}),</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; CreateIOutputsFrom({activationLayer}));</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; SubgraphView replacementSubgraph(replacementLayer);</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; optimizationViews.AddSubstitution({substitutionSubgraph, replacementSubgraph});</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordflow">return</span> replacementLayer;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="af06b26928a460f9fcdef0327f448a34c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af06b26928a460f9fcdef0327f448a34c">&#9670;&nbsp;</a></span>FuseMultiplicationLayer()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* armnn::FuseMultiplicationLayer </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_optimization_views.xhtml">OptimizationViews</a> &amp;&#160;</td>
+ <td class="paramname"><em>optimizationViews</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *&#160;</td>
+ <td class="paramname"><em>baseLayer</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_activation_layer.xhtml">ActivationLayer</a> *&#160;</td>
+ <td class="paramname"><em>activationLayer</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>activationDesc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::string&#160;</td>
+ <td class="paramname"><em>name</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00173">173</a> of file <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml">ArmComputeSubgraphUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00096">FuseLayer()</a>, and <a class="el" href="include_2armnn_2backends_2_optimization_views_8hpp_source.xhtml#l00062">OptimizationViews::GetINetwork()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;{</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; IConnectableLayer* replacement = optimizationViews.GetINetwork()-&gt;AddMultiplicationLayer(name.c_str());</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast&lt;LayerType*&gt;(replacement);</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <a class="code" href="namespacearmnn.xhtml#a7e4811ef91f499424bca36e98a2fbd96">FuseLayer</a>(optimizationViews,</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; baseLayer,</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; replacementLayer,</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; activationLayer,</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; activationDesc);</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160;</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="keywordflow">return</span> replacementLayer;</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a7e4811ef91f499424bca36e98a2fbd96"><div class="ttname"><a href="namespacearmnn.xhtml#a7e4811ef91f499424bca36e98a2fbd96">armnn::FuseLayer</a></div><div class="ttdeci">LayerType * FuseLayer(OptimizationViews &amp;optimizationViews, LayerType *baseLayer, LayerType *replacementLayer, ActivationLayer *activationLayer, ActivationDescriptor &amp;activationDesc)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00096">ArmComputeSubgraphUtils.hpp:96</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a56943a0946e5f15e5e58054b8e7a04a4"><div class="ttname"><a href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">armnn::LayerType</a></div><div class="ttdeci">LayerType</div><div class="ttdoc">When adding a new layer, adapt also the LastLayer enum value in the enum class LayerType below...</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00458">Types.hpp:458</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="aeda4132cdab76b98c860690c80fdb7bd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aeda4132cdab76b98c860690c80fdb7bd">&#9670;&nbsp;</a></span>FuseSubtractionLayer()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* armnn::FuseSubtractionLayer </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_optimization_views.xhtml">OptimizationViews</a> &amp;&#160;</td>
+ <td class="paramname"><em>optimizationViews</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *&#160;</td>
+ <td class="paramname"><em>baseLayer</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_activation_layer.xhtml">ActivationLayer</a> *&#160;</td>
+ <td class="paramname"><em>activationLayer</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>activationDesc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::string&#160;</td>
+ <td class="paramname"><em>name</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00135">135</a> of file <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml">ArmComputeSubgraphUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00096">FuseLayer()</a>, and <a class="el" href="include_2armnn_2backends_2_optimization_views_8hpp_source.xhtml#l00062">OptimizationViews::GetINetwork()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;{</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; IConnectableLayer* replacement = optimizationViews.GetINetwork()-&gt;AddSubtractionLayer(name.c_str());</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast&lt;LayerType*&gt;(replacement);</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <a class="code" href="namespacearmnn.xhtml#a7e4811ef91f499424bca36e98a2fbd96">FuseLayer</a>(optimizationViews,</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; baseLayer,</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; replacementLayer,</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; activationLayer,</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; activationDesc);</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordflow">return</span> replacementLayer;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a7e4811ef91f499424bca36e98a2fbd96"><div class="ttname"><a href="namespacearmnn.xhtml#a7e4811ef91f499424bca36e98a2fbd96">armnn::FuseLayer</a></div><div class="ttdeci">LayerType * FuseLayer(OptimizationViews &amp;optimizationViews, LayerType *baseLayer, LayerType *replacementLayer, ActivationLayer *activationLayer, ActivationDescriptor &amp;activationDesc)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00096">ArmComputeSubgraphUtils.hpp:96</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a56943a0946e5f15e5e58054b8e7a04a4"><div class="ttname"><a href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">armnn::LayerType</a></div><div class="ttdeci">LayerType</div><div class="ttdoc">When adding a new layer, adapt also the LastLayer enum value in the enum class LayerType below...</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00458">Types.hpp:458</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a38c9c1724b660b2558a19895b681a8fb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a38c9c1724b660b2558a19895b681a8fb">&#9670;&nbsp;</a></span>Gather()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Gather </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>paramsInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>indicesInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>outputInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>params</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const int32_t *&#160;</td>
+ <td class="paramname"><em>indices</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const int32_t&#160;</td>
+ <td class="paramname"><em>axis</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="backends_2reference_2workloads_2_gather_8cpp_source.xhtml#l00017">17</a> of file <a class="el" href="backends_2reference_2workloads_2_gather_8cpp_source.xhtml">Gather.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>, <a class="el" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Decoder&lt; IType &gt;::Get()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00195">TensorInfo::GetNumDimensions()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00196">TensorInfo::GetNumElements()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</a>, <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused()</a>, <a class="el" href="_numeric_cast_8hpp_source.xhtml#l00035">numeric_cast()</a>, and <a class="el" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_test_name_and_descriptor_layer_visitor_8cpp_source.xhtml#l00274">TEST_SUITE()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;{</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(outputInfo);</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(axis);</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keyword">const</span> TensorShape&amp; paramsShape = paramsInfo.GetShape();</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> paramsProduct = 1;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 1; i &lt; paramsInfo.GetNumDimensions(); ++i)</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; {</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; paramsProduct = paramsProduct * paramsShape[i];</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; }</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outIndex = 0;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; indicesInfo.GetNumElements(); ++i)</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; {</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> indx = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(indices[i]);</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(indices[i] &gt;= 0 &amp;&amp; indx &lt; paramsShape[0]);</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> startOffset = indx * paramsProduct;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> endOffset = startOffset + paramsProduct;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j = startOffset; j &lt; endOffset; ++j)</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; {</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; params[j];</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordtype">float</span> outputValue = params.<a class="code" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Get</a>();</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; output[outIndex];</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; output.<a class="code" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Set</a>(outputValue);</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; ++outIndex;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; }</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; }</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(outIndex == outputInfo.GetNumElements());</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_encoder_xhtml_ae3b62b846a9c239f332830b9e36030eb"><div class="ttname"><a href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">armnn::Encoder::Set</a></div><div class="ttdeci">virtual void Set(IType right)=0</div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="classarmnn_1_1_decoder_xhtml_ac729108381e2340bea12877971713ecb"><div class="ttname"><a href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">armnn::Decoder::Get</a></div><div class="ttdeci">virtual IType Get() const =0</div></div>
+<div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a375ca3cff9f1b005d1412dc5f3cf5b6e"><div class="ttname"><a href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a></div><div class="ttdeci">std::enable_if_t&lt; std::is_unsigned&lt; Source &gt;::value &amp;&amp;std::is_unsigned&lt; Dest &gt;::value, Dest &gt; numeric_cast(Source source)</div><div class="ttdef"><b>Definition:</b> <a href="_numeric_cast_8hpp_source.xhtml#l00035">NumericCast.hpp:35</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="afb5b53a8b0c01d4f27830bef0f25ca09"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afb5b53a8b0c01d4f27830bef0f25ca09">&#9670;&nbsp;</a></span>GatherTensorHandlePairs()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void armnn::GatherTensorHandlePairs </td>
+ <td>(</td>
+ <td class="paramtype">const DescriptorType &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::vector&lt; std::pair&lt; SrcTensorHandleType *, DstTensorHandleType *&gt;&gt; &amp;&#160;</td>
+ <td class="paramname"><em>tensorHandlePairs</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_workload_utils_8hpp_source.xhtml#l00189">189</a> of file <a class="el" href="_workload_utils_8hpp_source.xhtml">WorkloadUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_workload_utils_8cpp_source.xhtml#l00169">Convert1HWOTensorInfoToAcl()</a>, <a class="el" href="_workload_utils_8cpp_source.xhtml#l00138">Convert1HWOTensorToAcl()</a>, <a class="el" href="_workload_utils_8cpp_source.xhtml#l00198">Convert1HWOtoMIHW()</a>, <a class="el" href="_workload_utils_8cpp_source.xhtml#l00283">ConvertMaskToACLFormat()</a>, <a class="el" href="_workload_utils_8cpp_source.xhtml#l00227">ConvertWeightTensorFromArmnnToAcl()</a>, <a class="el" href="_workload_utils_8cpp_source.xhtml#l00114">ConvertWeightTensorInfoFromArmnnToAcl()</a>, <a class="el" href="_workload_utils_8cpp_source.xhtml#l00017">PermuteTensor()</a>, and <a class="el" href="_workload_utils_8cpp_source.xhtml#l00040">ReshapeWeightsForAcl()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_mem_copy_workload_8cpp_source.xhtml#l00044">CopyMemGenericWorkload::CopyMemGenericWorkload()</a>, <a class="el" href="_mem_copy_workload_8cpp_source.xhtml#l00066">CopyMemGenericWorkload::ExecuteAsync()</a>, <a class="el" href="_neon_convert_bf16_to_fp32_workload_8cpp_source.xhtml#l00017">NeonConvertBf16ToFp32Workload::NeonConvertBf16ToFp32Workload()</a>, <a class="el" href="_neon_convert_fp16_to_fp32_workload_8cpp_source.xhtml#l00017">NeonConvertFp16ToFp32Workload::NeonConvertFp16ToFp32Workload()</a>, <a class="el" href="_neon_convert_fp32_to_bf16_workload_8cpp_source.xhtml#l00018">NeonConvertFp32ToBf16Workload::NeonConvertFp32ToBf16Workload()</a>, and <a class="el" href="_neon_convert_fp32_to_fp16_workload_8cpp_source.xhtml#l00018">NeonConvertFp32ToFp16Workload::NeonConvertFp32ToFp16Workload()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;{</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numInputs = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(descriptor.m_Inputs.size());</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; tensorHandlePairs.reserve(numInputs);</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; numInputs; ++i)</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; {</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; SrcTensorHandleType* <span class="keyword">const</span> srcTensorHandle =</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; PolymorphicDowncast&lt;SrcTensorHandleType*&gt;(descriptor.m_Inputs[i]);</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; DstTensorHandleType* <span class="keyword">const</span> dstTensorHandle =</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; PolymorphicDowncast&lt;DstTensorHandleType*&gt;(descriptor.m_Outputs[i]);</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160;</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; tensorHandlePairs.emplace_back(srcTensorHandle, dstTensorHandle);</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; }</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="ae8ed5c640761fb6744aec0ee16388417"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae8ed5c640761fb6744aec0ee16388417">&#9670;&nbsp;</a></span>GenerateRangeK()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::vector&lt;unsigned int&gt; armnn::GenerateRangeK </td>
+ <td>(</td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>k</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="backends_2reference_2workloads_2_detection_post_process_8cpp_source.xhtml#l00017">17</a> of file <a class="el" href="backends_2reference_2workloads_2_detection_post_process_8cpp_source.xhtml">DetectionPostProcess.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="backends_2reference_2workloads_2_detection_post_process_8cpp_source.xhtml#l00140">DetectionPostProcess()</a>, and <a class="el" href="backends_2reference_2workloads_2_detection_post_process_8cpp_source.xhtml#l00049">NonMaxSuppression()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;{</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; std::vector&lt;unsigned int&gt; range(k);</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; std::iota(range.begin(), range.end(), 0);</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keywordflow">return</span> range;</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="aa093207ea7c4e7a9c9abe40d2f57995b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa093207ea7c4e7a9c9abe40d2f57995b">&#9670;&nbsp;</a></span>GetActivationFunctionAsCString()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr char const* armnn::GetActivationFunctionAsCString </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9ea">ActivationFunction</a>&#160;</td>
+ <td class="paramname"><em>activation</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00027">27</a> of file <a class="el" href="_types_utils_8hpp_source.xhtml">TypesUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa1e34af023adeb7d5f484f8eb4b9826b6">Abs</a>, <a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaabc5a0f0d6e7cf7fca73299dcd46c0f0d">BoundedReLu</a>, <a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaaed67cf7d54c570e4c4891800f085f41d">Elu</a>, <a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa0877e5b3fbe9d7569df6399609ed0186">HardSwish</a>, <a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaacb7667f5ec2f6e8a5943b781ba6c2735">LeakyReLu</a>, <a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa32a843da6ea40ab3b17a3421ccdf671b">Linear</a>, <a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa3d90c0a5ab3fcf8e6f6608cb3d3a1559">ReLu</a>, <a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa21eebb164e4b8b9bcf64fdb4d8d5dff4">Sigmoid</a>, <a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa6bba7052636d1740303b1b2ef3b53fef">SoftReLu</a>, <a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaaae77f3ad25595e35b327334d89410054">Sqrt</a>, <a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaaceb46ca115d05c51aa5a16a8867c3304">Square</a>, and <a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa23b68da1de2b77d74da9da2635722a3e">TanH</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00014">StringifyLayerParameters&lt; ActivationDescriptor &gt;::Serialize()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;{</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordflow">switch</span> (activation)</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; {</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keywordflow">case</span> ActivationFunction::Sigmoid: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Sigmoid&quot;</span>;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordflow">case</span> ActivationFunction::TanH: <span class="keywordflow">return</span> <span class="stringliteral">&quot;TanH&quot;</span>;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordflow">case</span> ActivationFunction::Linear: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Linear&quot;</span>;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordflow">case</span> ActivationFunction::ReLu: <span class="keywordflow">return</span> <span class="stringliteral">&quot;ReLu&quot;</span>;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordflow">case</span> ActivationFunction::BoundedReLu: <span class="keywordflow">return</span> <span class="stringliteral">&quot;BoundedReLu&quot;</span>;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">case</span> ActivationFunction::SoftReLu: <span class="keywordflow">return</span> <span class="stringliteral">&quot;SoftReLu&quot;</span>;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">case</span> ActivationFunction::LeakyReLu: <span class="keywordflow">return</span> <span class="stringliteral">&quot;LeakyReLu&quot;</span>;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">case</span> ActivationFunction::Abs: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Abs&quot;</span>;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">case</span> ActivationFunction::Sqrt: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Sqrt&quot;</span>;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordflow">case</span> ActivationFunction::Square: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Square&quot;</span>;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">case</span> ActivationFunction::Elu: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Elu&quot;</span>;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">case</span> ActivationFunction::HardSwish: <span class="keywordflow">return</span> <span class="stringliteral">&quot;HardSwish&quot;</span>;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Unknown&quot;</span>;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; }</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a5cda3502382f06a64c3cbeb1829bd850"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5cda3502382f06a64c3cbeb1829bd850">&#9670;&nbsp;</a></span>GetArgMinMaxFunctionAsCString()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr char const* armnn::GetArgMinMaxFunctionAsCString </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeae">ArgMinMaxFunction</a>&#160;</td>
+ <td class="paramname"><em>function</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00047">47</a> of file <a class="el" href="_types_utils_8hpp_source.xhtml">TypesUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea6a061313d22e51e0f25b7cd4dc065233">Max</a>, and <a class="el" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea78d811e98514cd165dda532286610fd2">Min</a>.</p>
+<div class="fragment"><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;{</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">switch</span> (<span class="keyword">function</span>)</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; {</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">case</span> ArgMinMaxFunction::Max: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Max&quot;</span>;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordflow">case</span> ArgMinMaxFunction::Min: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Min&quot;</span>;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Unknown&quot;</span>;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; }</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a872803f5667392efc3c8e5607bd453ad"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a872803f5667392efc3c8e5607bd453ad">&#9670;&nbsp;</a></span>GetBiasDataType()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> GetBiasDataType </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>&#160;</td>
+ <td class="paramname"><em>inputDataType</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_workload_data_8cpp_source.xhtml#l00027">27</a> of file <a class="el" href="_workload_data_8cpp_source.xhtml">WorkloadData.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00015">ARMNN_ASSERT_MSG</a>, <a class="el" href="_logging_8hpp_source.xhtml#l00205">ARMNN_LOG</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">BFloat16</a>, <a class="el" href="_exceptions_8hpp_source.xhtml#l00209">CHECK_LOCATION</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00198">TensorInfo::GetDataType()</a>, <a class="el" href="_types_utils_8hpp_source.xhtml#l00202">GetDataTypeName()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00195">TensorInfo::GetNumDimensions()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00196">TensorInfo::GetNumElements()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00496">TensorInfo::GetQuantizationDim()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00480">TensorInfo::GetQuantizationOffset()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00463">TensorInfo::GetQuantizationScale()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00453">TensorInfo::GetQuantizationScales()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</a>, <a class="el" href="_optional_8hpp_source.xhtml#l00053">OptionalBase::has_value()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00201">TensorInfo::HasMultipleQuantizationScales()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00448">TensorInfo::HasPerAxisQuantization()</a>, <a class="el" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00506">TensorInfo::IsQuantized()</a>, <a class="el" href="_types_utils_8hpp_source.xhtml#l00285">IsQuantized8BitType()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00434">TensorInfo::IsTypeSpaceMatch()</a>, <a class="el" href="include_2armnn_2backends_2_workload_info_8hpp_source.xhtml#l00018">WorkloadInfo::m_InputTensorInfos</a>, <a class="el" href="include_2armnn_2backends_2_workload_info_8hpp_source.xhtml#l00019">WorkloadInfo::m_OutputTensorInfos</a>, <a class="el" href="_optional_8hpp_source.xhtml#l00146">OptionalReferenceSwitch&lt; std::is_reference&lt; T &gt;::value, T &gt;::value()</a>, and <a class="el" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407a7b83d3f08fa392b79e3f553b585971cd">warning</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_conv2d_test_impl_8cpp_source.xhtml#l02905">CompareDepthwiseConvolution2dTestImpl()</a>, <a class="el" href="_layer_release_constant_data_test_8cpp_source.xhtml#l00026">TEST_SUITE()</a>, <a class="el" href="_workload_data_8cpp_source.xhtml#l01034">FullyConnectedQueueDescriptor::Validate()</a>, <a class="el" href="_workload_data_8cpp_source.xhtml#l01245">Convolution2dQueueDescriptor::Validate()</a>, <a class="el" href="_workload_data_8cpp_source.xhtml#l01319">Convolution3dQueueDescriptor::Validate()</a>, <a class="el" href="_workload_data_8cpp_source.xhtml#l01381">DepthwiseConvolution2dQueueDescriptor::Validate()</a>, and <a class="el" href="_workload_data_8cpp_source.xhtml#l02977">TransposeConvolution2dQueueDescriptor::Validate()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;{</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordflow">switch</span> (inputDataType)</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; {</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keywordflow">case</span> DataType::Float16:</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordflow">return</span> DataType::Float16;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordflow">case</span> DataType::BFloat16:</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordflow">case</span> DataType::Float32:</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordflow">return</span> DataType::Float32;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmS8:</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">return</span> DataType::Signed32;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmU8:</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">return</span> DataType::Signed32;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS8:</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">return</span> DataType::Signed32;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS16:</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordflow">return</span> DataType::Signed32;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;Invalid input data type&quot;</span>);</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">return</span> DataType::Float32;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; }</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;}</div><div class="ttc" id="_assert_8hpp_xhtml_a91c4dfde57907d7698c7531785690a7f"><div class="ttname"><a href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a></div><div class="ttdeci">#define ARMNN_ASSERT_MSG(COND, MSG)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00015">Assert.hpp:15</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ada0fb4f79f3673b4ebd94a42175bf78d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ada0fb4f79f3673b4ebd94a42175bf78d">&#9670;&nbsp;</a></span>GetBiasTypeFromWeightsType()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classarmnn_1_1_optional.xhtml">armnn::Optional</a>&lt; <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a> &gt; GetBiasTypeFromWeightsType </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">armnn::Optional</a>&lt; <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a> &gt;&#160;</td>
+ <td class="paramname"><em>weightsType</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layer_support_rules_8hpp_source.xhtml#l00014">14</a> of file <a class="el" href="_layer_support_rules_8hpp_source.xhtml">LayerSupportRules.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00015">ARMNN_ASSERT_MSG</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">Float16</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">Float32</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">QAsymmS8</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">QAsymmU8</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">QSymmS16</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">QSymmS8</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">Signed32</a>, and <a class="el" href="_optional_8hpp_source.xhtml#l00146">OptionalReferenceSwitch&lt; std::is_reference&lt; T &gt;::value, T &gt;::value()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_layer_support_rules_8hpp_source.xhtml#l00129">BiasAndWeightsTypesCompatible::BiasAndWeightsTypesCompatible()</a>, <a class="el" href="_layer_support_rules_8hpp_source.xhtml#l00120">BiasAndWeightsTypesMatch::BiasAndWeightsTypesMatch()</a>, and <a class="el" href="_fully_connected_test_impl_8cpp_source.xhtml#l00097">FullyConnectedTest()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;{</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; <span class="keywordflow">if</span> (!weightsType)</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; {</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; <span class="keywordflow">return</span> weightsType;</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; }</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keywordflow">switch</span>(weightsType.<a class="code" href="classarmnn_1_1_optional_reference_switch.xhtml#a77c7d528ac063d870b8c8426ec81c1c3">value</a>())</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; {</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">armnn::DataType::Float16</a>:</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a>:</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keywordflow">return</span> weightsType;</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">armnn::DataType::QAsymmS8</a>:</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">armnn::DataType::QAsymmU8</a>:</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">armnn::DataType::QSymmS8</a>:</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">armnn::DataType::QSymmS16</a>:</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">armnn::DataType::Signed32</a>;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;GetBiasTypeFromWeightsType(): Unsupported data type.&quot;</span>);</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; }</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structarmnn_1_1_empty_optional.xhtml">armnn::EmptyOptional</a>();</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">armnn::DataType::Signed32</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">armnn::DataType::QAsymmS8</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">armnn::DataType::QSymmS16</a></div></div>
+<div class="ttc" id="classarmnn_1_1_optional_reference_switch_xhtml_a77c7d528ac063d870b8c8426ec81c1c3"><div class="ttname"><a href="classarmnn_1_1_optional_reference_switch.xhtml#a77c7d528ac063d870b8c8426ec81c1c3">armnn::OptionalReferenceSwitch&lt; std::is_reference&lt; T &gt;::value, T &gt;::value</a></div><div class="ttdeci">const T &amp; value() const</div><div class="ttdef"><b>Definition:</b> <a href="_optional_8hpp_source.xhtml#l00146">Optional.hpp:146</a></div></div>
+<div class="ttc" id="_assert_8hpp_xhtml_a91c4dfde57907d7698c7531785690a7f"><div class="ttname"><a href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a></div><div class="ttdeci">#define ARMNN_ASSERT_MSG(COND, MSG)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00015">Assert.hpp:15</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">armnn::DataType::QAsymmU8</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">armnn::DataType::Float16</a></div></div>
+<div class="ttc" id="structarmnn_1_1_empty_optional_xhtml"><div class="ttname"><a href="structarmnn_1_1_empty_optional.xhtml">armnn::EmptyOptional</a></div><div class="ttdoc">EmptyOptional is used to initialize the Optional class in case we want to have default value for an O...</div><div class="ttdef"><b>Definition:</b> <a href="_optional_8hpp_source.xhtml#l00032">Optional.hpp:32</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">armnn::DataType::QSymmS8</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a71c3bdadfe1c69aba2cbf054bff47744"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a71c3bdadfe1c69aba2cbf054bff47744">&#9670;&nbsp;</a></span>GetCapability() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; const <a class="el" href="structarmnn_1_1_backend_options_1_1_backend_option.xhtml">BackendOptions::BackendOption</a> &gt; GetCapability </td>
+ <td>(</td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>backendCapabilityName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="namespacearmnn.xhtml#aa9c506b558b8aa33a228b15164f40dc3">BackendCapabilities</a> &amp;&#160;</td>
+ <td class="paramname"><em>capabilities</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns a BackendCapability if the backend lists the capability The BackendCapability must then be inspected to check whether or not that BackendCapability is supported Otherwise returns an <a class="el" href="structarmnn_1_1_empty_optional.xhtml" title="EmptyOptional is used to initialize the Optional class in case we want to have default value for an O...">EmptyOptional</a> if the BackendCapability is unlisted. </p>
+
+<p class="definition">Definition at line <a class="el" href="_backend_helper_8cpp_source.xhtml#l00030">30</a> of file <a class="el" href="_backend_helper_8cpp_source.xhtml">BackendHelper.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_backend_options_8hpp_source.xhtml#l00285">BackendOptions::GetOption()</a>, and <a class="el" href="_backend_options_8hpp_source.xhtml#l00284">BackendOptions::GetOptionCount()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_backend_helper_8cpp_source.xhtml#l00044">GetCapability()</a>, <a class="el" href="_backend_helper_8cpp_source.xhtml#l00058">HasCapability()</a>, <a class="el" href="_backend_helper_8cpp_source.xhtml#l00576">LayerSupportHandle::IsFullyConnectedSupported()</a>, <a class="el" href="_backend_helper_8hpp_source.xhtml#l00026">LayerSupportHandle::LayerSupportHandle()</a>, and <a class="el" href="_optimizer_tests_8cpp_source.xhtml#l00306">TEST_SUITE()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;{</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i=0; i &lt; capabilities.GetOptionCount(); i++)</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; {</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span>&amp; capability = capabilities.GetOption(i);</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">if</span> (backendCapabilityName == capability.GetName())</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; {</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">return</span> capability;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; }</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; }</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">return</span> EmptyOptional();</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a8d70f94d3f0ffb06067a66c49b2f8689"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8d70f94d3f0ffb06067a66c49b2f8689">&#9670;&nbsp;</a></span>GetCapability() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; const <a class="el" href="structarmnn_1_1_backend_options_1_1_backend_option.xhtml">BackendOptions::BackendOption</a> &gt; GetCapability </td>
+ <td>(</td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>backendCapabilityName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">armnn::BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns a BackendCapability if the backend lists the capability The BackendCapability must then be inspected to check whether or not that BackendCapability is supported Otherwise returns an <a class="el" href="structarmnn_1_1_empty_optional.xhtml" title="EmptyOptional is used to initialize the Optional class in case we want to have default value for an O...">EmptyOptional</a> if the BackendCapability is unlisted. </p>
+
+<p class="definition">Definition at line <a class="el" href="_backend_helper_8cpp_source.xhtml#l00044">44</a> of file <a class="el" href="_backend_helper_8cpp_source.xhtml">BackendHelper.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_backend_registry_8cpp_source.xhtml#l00013">BackendRegistryInstance()</a>, and <a class="el" href="_backend_helper_8cpp_source.xhtml#l00030">GetCapability()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;{</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span>&amp; backendRegistry = <a class="code" href="namespacearmnn.xhtml#ac2807505b850738bc8a1991ce669dd47">armnn::BackendRegistryInstance</a>();</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">if</span> (backendRegistry.IsBackendRegistered(backend))</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; {</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keyword">auto</span> factoryFunc = backendRegistry.GetFactory(backend);</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keyword">auto</span> backendObject = factoryFunc();</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keyword">auto</span> capabilities = backendObject-&gt;GetCapabilities();</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a71c3bdadfe1c69aba2cbf054bff47744">GetCapability</a>(backendCapabilityName, capabilities);</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; }</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordflow">return</span> EmptyOptional();</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a71c3bdadfe1c69aba2cbf054bff47744"><div class="ttname"><a href="namespacearmnn.xhtml#a71c3bdadfe1c69aba2cbf054bff47744">armnn::GetCapability</a></div><div class="ttdeci">Optional&lt; const BackendOptions::BackendOption &gt; GetCapability(const std::string &amp;backendCapabilityName, const BackendCapabilities &amp;capabilities)</div><div class="ttdoc">Returns a BackendCapability if the backend lists the capability The BackendCapability must then be in...</div><div class="ttdef"><b>Definition:</b> <a href="_backend_helper_8cpp_source.xhtml#l00030">BackendHelper.cpp:30</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ac2807505b850738bc8a1991ce669dd47"><div class="ttname"><a href="namespacearmnn.xhtml#ac2807505b850738bc8a1991ce669dd47">armnn::BackendRegistryInstance</a></div><div class="ttdeci">BackendRegistry &amp; BackendRegistryInstance()</div><div class="ttdef"><b>Definition:</b> <a href="_backend_registry_8cpp_source.xhtml#l00013">BackendRegistry.cpp:13</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ac3dec65fab0e6a1a6fef52e6321b4993"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac3dec65fab0e6a1a6fef52e6321b4993">&#9670;&nbsp;</a></span>GetClContext()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">const armnn::ClContext* armnn::GetClContext </td>
+ <td>(</td>
+ <td class="paramtype">const void *&#160;</td>
+ <td class="paramname"><em>buf</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_context_schema__generated_8h_source.xhtml#l00140">140</a> of file <a class="el" href="_cl_context_schema__generated_8h_source.xhtml">ClContextSchema_generated.h</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_context_deserializer_8cpp_source.xhtml#l00044">ClContextDeserializer::DeserializeFromBinary()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; {</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keywordflow">return</span> flatbuffers::GetRoot&lt;armnn::ClContext&gt;(buf);</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="aabb76a77e95921785f576bb29b495cd8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aabb76a77e95921785f576bb29b495cd8">&#9670;&nbsp;</a></span>GetComparisonOperationAsCString()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr char const* armnn::GetComparisonOperationAsCString </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58c">ComparisonOperation</a>&#160;</td>
+ <td class="paramname"><em>operation</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00057">57</a> of file <a class="el" href="_types_utils_8hpp_source.xhtml">TypesUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58caf5f286e73bda105e538310b3190f75c5">Equal</a>, <a class="el" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58ca8768a6821cd735aea4f5b0df88c1fc6a">Greater</a>, <a class="el" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58ca6f2f0aefb3d22da0f3839453add5f937">GreaterOrEqual</a>, <a class="el" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58ca1cfdf0e8d0c87a228c1f40d9bee7888b">Less</a>, <a class="el" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58caa4cbdbb6070a5abb35fc95ecf1e22c14">LessOrEqual</a>, and <a class="el" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58ca19bb0af2c3c530538cb41aff7f235b96">NotEqual</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_tf_lite_parser_8cpp_source.xhtml#l03309">armnnTfLiteParser::ComputeWrappedIndex()</a>, <a class="el" href="_ref_comparison_workload_8cpp_source.xhtml#l00050">RefComparisonWorkload::ExecuteAsync()</a>, and <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00072">StringifyLayerParameters&lt; ComparisonDescriptor &gt;::Serialize()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;{</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">switch</span> (operation)</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; {</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordflow">case</span> ComparisonOperation::Equal: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Equal&quot;</span>;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">case</span> ComparisonOperation::Greater: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Greater&quot;</span>;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordflow">case</span> ComparisonOperation::GreaterOrEqual: <span class="keywordflow">return</span> <span class="stringliteral">&quot;GreaterOrEqual&quot;</span>;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">case</span> ComparisonOperation::Less: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Less&quot;</span>;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordflow">case</span> ComparisonOperation::LessOrEqual: <span class="keywordflow">return</span> <span class="stringliteral">&quot;LessOrEqual&quot;</span>;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordflow">case</span> ComparisonOperation::NotEqual: <span class="keywordflow">return</span> <span class="stringliteral">&quot;NotEqual&quot;</span>;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Unknown&quot;</span>;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; }</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a6bab17bfd45c2fa4592c431bc25ad10e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6bab17bfd45c2fa4592c431bc25ad10e">&#9670;&nbsp;</a></span>GetComputeDeviceAsCString()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr char const* armnn::GetComputeDeviceAsCString </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456ae">Compute</a>&#160;</td>
+ <td class="paramname"><em>compute</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated function that will be removed together with the Compute enum. </p>
+
+<p class="definition">Definition at line <a class="el" href="_backend_id_8hpp_source.xhtml#l00034">34</a> of file <a class="el" href="_backend_id_8hpp_source.xhtml">BackendId.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea39f8662ca778258e9c6a14f26fec5ec1">CpuAcc</a>, <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64">CpuRef</a>, and <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeafaa4524e3df19ada32643ce9a222362b">GpuAcc</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_profiling_test_utils_8cpp_source.xhtml#l00043">GetSuitableBackendRegistered()</a>, <a class="el" href="_backend_id_8hpp_source.xhtml#l00047">operator&lt;&lt;()</a>, and <a class="el" href="_backend_id_tests_8cpp_source.xhtml#l00013">TEST_SUITE()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;{</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">switch</span> (compute)</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; {</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64">armnn::Compute::CpuRef</a>: <span class="keywordflow">return</span> <span class="stringliteral">&quot;CpuRef&quot;</span>;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea39f8662ca778258e9c6a14f26fec5ec1">armnn::Compute::CpuAcc</a>: <span class="keywordflow">return</span> <span class="stringliteral">&quot;CpuAcc&quot;</span>;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeafaa4524e3df19ada32643ce9a222362b">armnn::Compute::GpuAcc</a>: <span class="keywordflow">return</span> <span class="stringliteral">&quot;GpuAcc&quot;</span>;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Unknown&quot;</span>;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; }</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64"><div class="ttname"><a href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64">armnn::Compute::CpuRef</a></div><div class="ttdoc">CPU Execution: Reference C++ kernels. </div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ae2f04a162585c0a5222a537efd5456aeafaa4524e3df19ada32643ce9a222362b"><div class="ttname"><a href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeafaa4524e3df19ada32643ce9a222362b">armnn::Compute::GpuAcc</a></div><div class="ttdoc">GPU Execution: OpenCL: ArmCompute. </div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ae2f04a162585c0a5222a537efd5456aea39f8662ca778258e9c6a14f26fec5ec1"><div class="ttname"><a href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea39f8662ca778258e9c6a14f26fec5ec1">armnn::Compute::CpuAcc</a></div><div class="ttdoc">CPU Execution: NEON: ArmCompute. </div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a63833af8e1986a93f86d15397b9062c2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a63833af8e1986a93f86d15397b9062c2">&#9670;&nbsp;</a></span>GetConvolutionMethodString()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::string GetConvolutionMethodString </td>
+ <td>(</td>
+ <td class="paramtype">arm_compute::ConvolutionMethod &amp;&#160;</td>
+ <td class="paramname"><em>convolutionMethod</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_workload_utils_8hpp_source.xhtml#l00037">37</a> of file <a class="el" href="_cl_workload_utils_8hpp_source.xhtml">ClWorkloadUtils.hpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;{</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">switch</span> (convolutionMethod)</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; {</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">case</span> arm_compute::ConvolutionMethod::FFT:</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;FFT&quot;</span>;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordflow">case</span> arm_compute::ConvolutionMethod::DIRECT:</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Direct&quot;</span>;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">case</span> arm_compute::ConvolutionMethod::GEMM:</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;GEMM&quot;</span>;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordflow">case</span> arm_compute::ConvolutionMethod::WINOGRAD:</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Winograd&quot;</span>;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Unknown&quot;</span>;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; }</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="aeef70b7611ae71e97ab55c75ef72b210"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aeef70b7611ae71e97ab55c75ef72b210">&#9670;&nbsp;</a></span>GetDataLayoutName()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr const char* armnn::GetDataLayoutName </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a>&#160;</td>
+ <td class="paramname"><em>dataLayout</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00222">222</a> of file <a class="el" href="_types_utils_8hpp_source.xhtml">TypesUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a884e0167ebf9bbe6cfd6ca5ab97ab015">NCDHW</a>, <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">NCHW</a>, <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a4dd0194b114cbf51da5b3a72569863ef">NDHWC</a>, and <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">NHWC</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_workload_utils_8cpp_source.xhtml#l00169">Convert1HWOTensorInfoToAcl()</a>, <a class="el" href="_workload_utils_8cpp_source.xhtml#l00138">Convert1HWOTensorToAcl()</a>, <a class="el" href="_common_test_utils_8cpp_source.xhtml#l00054">MakeTensorShape()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00022">StringifyLayerParameters&lt; BatchNormalizationDescriptor &gt;::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00029">StringifyLayerParameters&lt; BatchToSpaceNdDescriptor &gt;::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00078">StringifyLayerParameters&lt; Convolution2dDescriptor &gt;::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00104">StringifyLayerParameters&lt; Convolution3dDescriptor &gt;::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00154">StringifyLayerParameters&lt; DepthwiseConvolution2dDescriptor &gt;::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00201">StringifyLayerParameters&lt; L2NormalizationDescriptor &gt;::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00238">StringifyLayerParameters&lt; NormalizationDescriptor &gt;::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00306">StringifyLayerParameters&lt; Pooling2dDescriptor &gt;::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00334">StringifyLayerParameters&lt; Pooling3dDescriptor &gt;::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00411">StringifyLayerParameters&lt; ResizeDescriptor &gt;::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00429">StringifyLayerParameters&lt; SpaceToBatchNdDescriptor &gt;::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00465">StringifyLayerParameters&lt; SpaceToDepthDescriptor &gt;::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00483">StringifyLayerParameters&lt; StridedSliceDescriptor &gt;::Serialize()</a>, and <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00539">StringifyLayerParameters&lt; TransposeConvolution2dDescriptor &gt;::Serialize()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;{</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keywordflow">switch</span> (dataLayout)</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; {</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keywordflow">case</span> DataLayout::NCHW: <span class="keywordflow">return</span> <span class="stringliteral">&quot;NCHW&quot;</span>;</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keywordflow">case</span> DataLayout::NHWC: <span class="keywordflow">return</span> <span class="stringliteral">&quot;NHWC&quot;</span>;</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keywordflow">case</span> DataLayout::NDHWC: <span class="keywordflow">return</span> <span class="stringliteral">&quot;NDHWC&quot;</span>;</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keywordflow">case</span> DataLayout::NCDHW: <span class="keywordflow">return</span> <span class="stringliteral">&quot;NCDHW&quot;</span>;</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Unknown&quot;</span>;</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; }</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a81b5ff8545adad19a1c9d4ca076d552c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a81b5ff8545adad19a1c9d4ca076d552c">&#9670;&nbsp;</a></span>GetDataTypeName()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr const char* armnn::GetDataTypeName </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>&#160;</td>
+ <td class="paramname"><em>dataType</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00202">202</a> of file <a class="el" href="_types_utils_8hpp_source.xhtml">TypesUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">BFloat16</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">Boolean</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">Float16</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">Float32</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">QAsymmS8</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">QAsymmU8</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">QSymmS16</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">QSymmS8</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">Signed32</a>, and <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6ae1b3c9c6087a93b07c83e0b04f377a8d">Signed64</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.xhtml#l00670">AttemptBackendAssignment()</a>, <a class="el" href="_serializer_test_utils_8cpp_source.xhtml#l00116">CompareConstTensor()</a>, <a class="el" href="_profiling_details_8hpp_source.xhtml#l00107">ProfilingDetails::DetailsExist()</a>, <a class="el" href="_workload_data_8cpp_source.xhtml#l00027">GetBiasDataType()</a>, <a class="el" href="_tf_lite_parser_8cpp_source.xhtml#l04224">TfLiteParserImpl::GetBuffer()</a>, <a class="el" href="_ref_permute_workload_8hpp_source.xhtml#l00019">RefPermuteWorkload&lt; DataType &gt;::GetName()</a>, <a class="el" href="_ref_transpose_workload_8hpp_source.xhtml#l00019">RefTransposeWorkload&lt; DataType &gt;::GetName()</a>, <a class="el" href="_ref_debug_workload_8hpp_source.xhtml#l00023">RefDebugWorkload&lt; DataType &gt;::GetName()</a>, <a class="el" href="_tensor_utils_8cpp_source.xhtml#l00173">armnnUtils::GetPerAxisParams()</a>, <a class="el" href="_utils_tests_8cpp_source.xhtml#l00018">TEST_SUITE()</a>, <a class="el" href="_serializer_test_utils_8cpp_source.xhtml#l00072">LayerVerifierBase::VerifyConstTensors()</a>, <a class="el" href="_serializer_test_utils_8cpp_source.xhtml#l00040">LayerVerifierBase::VerifyNameAndConnections()</a>, and <a class="el" href="_types_utils_8hpp_source.xhtml#l00337">VerifyTensorInfoDataType()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;{</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keywordflow">switch</span> (dataType)</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; {</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="keywordflow">case</span> DataType::Float16: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Float16&quot;</span>;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keywordflow">case</span> DataType::Float32: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Float32&quot;</span>;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="keywordflow">case</span> DataType::Signed64: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Signed64&quot;</span>;</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmU8: <span class="keywordflow">return</span> <span class="stringliteral">&quot;QAsymmU8&quot;</span>;</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmS8: <span class="keywordflow">return</span> <span class="stringliteral">&quot;QAsymmS8&quot;</span>;</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS8: <span class="keywordflow">return</span> <span class="stringliteral">&quot;QSymmS8&quot;</span>;</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS16: <span class="keywordflow">return</span> <span class="stringliteral">&quot;QSymm16&quot;</span>;</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keywordflow">case</span> DataType::Signed32: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Signed32&quot;</span>;</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keywordflow">case</span> DataType::Boolean: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Boolean&quot;</span>;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="keywordflow">case</span> DataType::BFloat16: <span class="keywordflow">return</span> <span class="stringliteral">&quot;BFloat16&quot;</span>;</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160;</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Unknown&quot;</span>;</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; }</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="aa02b9e06fb20fa3c13da0427e6ee5ab2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa02b9e06fb20fa3c13da0427e6ee5ab2">&#9670;&nbsp;</a></span>GetDataTypeSize()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr unsigned int armnn::GetDataTypeSize </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>&#160;</td>
+ <td class="paramname"><em>dataType</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00151">151</a> of file <a class="el" href="_types_utils_8hpp_source.xhtml">TypesUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">BFloat16</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">Boolean</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">Float16</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">Float32</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">QAsymmS8</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">QAsymmU8</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">QSymmS16</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">QSymmS8</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">Signed32</a>, and <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6ae1b3c9c6087a93b07c83e0b04f377a8d">Signed64</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_mock_tensor_handle_8cpp_source.xhtml#l00158">MockTensorHandle::CanBeImported()</a>, <a class="el" href="_ref_tensor_handle_8cpp_source.xhtml#l00161">RefTensorHandle::CanBeImported()</a>, <a class="el" href="_conv2d_test_impl_8cpp_source.xhtml#l03552">DepthwiseConvolution2dDepthMul64Test()</a>, <a class="el" href="_ref_depth_to_space_workload_8cpp_source.xhtml#l00019">RefDepthToSpaceWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_strided_slice_workload_8cpp_source.xhtml#l00023">RefStridedSliceWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_slice_workload_8cpp_source.xhtml#l00021">RefSliceWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_shape_workload_8hpp_source.xhtml#l00024">RefShapeWorkload::ExecuteAsync()</a>, <a class="el" href="_deserializer_8cpp_source.xhtml#l00899">IDeserializer::DeserializerImpl::GetNetworkOutputBindingInfo()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00429">TensorInfo::GetNumBytes()</a>, <a class="el" href="_tensor_handle_8cpp_source.xhtml#l00015">GetUnpaddedTensorStrides()</a>, <a class="el" href="_workload_utils_8cpp_source.xhtml#l00017">PermuteTensor()</a>, and <a class="el" href="_utils_tests_8cpp_source.xhtml#l00018">TEST_SUITE()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;{</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordflow">switch</span> (dataType)</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; {</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keywordflow">case</span> DataType::BFloat16:</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keywordflow">case</span> DataType::Float16: <span class="keywordflow">return</span> 2U;</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="keywordflow">case</span> DataType::Float32:</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="keywordflow">case</span> DataType::Signed32: <span class="keywordflow">return</span> 4U;</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keywordflow">case</span> DataType::Signed64: <span class="keywordflow">return</span> 8U;</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmU8: <span class="keywordflow">return</span> 1U;</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmS8: <span class="keywordflow">return</span> 1U;</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS8: <span class="keywordflow">return</span> 1U;</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS16: <span class="keywordflow">return</span> 2U;</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keywordflow">case</span> DataType::Boolean: <span class="keywordflow">return</span> 1U;</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">return</span> 0U;</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; }</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="ab03dcfb3b4019d8f58a67c41681951ae"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab03dcfb3b4019d8f58a67c41681951ae">&#9670;&nbsp;</a></span>GetEventPtr() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const <a class="el" href="classarmnn_1_1_event.xhtml">Event</a>* armnn::GetEventPtr </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_event.xhtml">Event</a> *&#160;</td>
+ <td class="paramname"><em>ptr</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_profiling_8cpp_source.xhtml#l00109">109</a> of file <a class="el" href="_profiling_8cpp_source.xhtml">Profiling.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_profiling_8cpp_source.xhtml#l00113">ProfilerImpl::AnalyzeEventSequenceAndWriteResults()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;{ <span class="keywordflow">return</span> ptr;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a4b1e2158af2aedd3f00d2121c45b0f93"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4b1e2158af2aedd3f00d2121c45b0f93">&#9670;&nbsp;</a></span>GetEventPtr() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const <a class="el" href="classarmnn_1_1_event.xhtml">Event</a>* armnn::GetEventPtr </td>
+ <td>(</td>
+ <td class="paramtype">const std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_event.xhtml">Event</a> &gt; &amp;&#160;</td>
+ <td class="paramname"><em>ptr</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_profiling_8cpp_source.xhtml#l00110">110</a> of file <a class="el" href="_profiling_8cpp_source.xhtml">Profiling.cpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;{<span class="keywordflow">return</span> ptr.get(); }</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a6a2659750d6161b693d0e51616791959"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6a2659750d6161b693d0e51616791959">&#9670;&nbsp;</a></span>GetGraphForTesting()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classarmnn_1_1_graph.xhtml">Graph</a> &amp; GetGraphForTesting </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_i_optimized_network.xhtml">IOptimizedNetwork</a> *&#160;</td>
+ <td class="paramname"><em>optNet</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_test_utils_8cpp_source.xhtml#l00047">47</a> of file <a class="el" href="_test_utils_8cpp_source.xhtml">TestUtils.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_i_network_8hpp_source.xhtml#l00828">IOptimizedNetwork::pOptimizedNetworkImpl</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="est_utils_2_test_utils_8hpp_source.xhtml#l00034">CheckRelatedLayers()</a>, and <a class="el" href="_permute_and_batch_to_space_as_depth_to_space_tests_8cpp_source.xhtml#l00015">TEST_SUITE()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;{</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">return</span> optNet-&gt;<a class="code" href="classarmnn_1_1_i_optimized_network.xhtml#a374d52340ec8dc02a819acc20fb5aa92">pOptimizedNetworkImpl</a>-&gt;GetGraph();</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_i_optimized_network_xhtml_a374d52340ec8dc02a819acc20fb5aa92"><div class="ttname"><a href="classarmnn_1_1_i_optimized_network.xhtml#a374d52340ec8dc02a819acc20fb5aa92">armnn::IOptimizedNetwork::pOptimizedNetworkImpl</a></div><div class="ttdeci">std::unique_ptr&lt; OptimizedNetworkImpl &gt; pOptimizedNetworkImpl</div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00828">INetwork.hpp:828</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a6d9d90e2ace1cd49789835b0073196a3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6d9d90e2ace1cd49789835b0073196a3">&#9670;&nbsp;</a></span>GetILayerSupportByBackendId()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classarmnn_1_1_layer_support_handle.xhtml">LayerSupportHandle</a> GetILayerSupportByBackendId </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">armnn::BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Convenience function to retrieve the ILayerSupportHandle for a backend. </p>
+
+<p class="definition">Definition at line <a class="el" href="_backend_helper_8cpp_source.xhtml#l00016">16</a> of file <a class="el" href="_backend_helper_8cpp_source.xhtml">BackendHelper.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_backend_registry_8cpp_source.xhtml#l00013">BackendRegistryInstance()</a>, <a class="el" href="_backend_registry_8cpp_source.xhtml#l00055">BackendRegistry::GetFactory()</a>, and <a class="el" href="_backend_registry_8cpp_source.xhtml#l00050">BackendRegistry::IsBackendRegistered()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_backend_helper_8hpp_source.xhtml#l00026">LayerSupportHandle::LayerSupportHandle()</a>, and <a class="el" href="_utils_tests_8cpp_source.xhtml#l00018">TEST_SUITE()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;{</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; BackendRegistry&amp; backendRegistry = <a class="code" href="namespacearmnn.xhtml#ac2807505b850738bc8a1991ce669dd47">armnn::BackendRegistryInstance</a>();</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keywordflow">if</span> (!backendRegistry.IsBackendRegistered(backend))</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; {</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keywordflow">return</span> LayerSupportHandle(<span class="keyword">nullptr</span>);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; }</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">auto</span> factoryFunc = backendRegistry.GetFactory(backend);</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">auto</span> backendObject = factoryFunc();</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keywordflow">return</span> LayerSupportHandle(backendObject-&gt;GetLayerSupport(), backend);</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ac2807505b850738bc8a1991ce669dd47"><div class="ttname"><a href="namespacearmnn.xhtml#ac2807505b850738bc8a1991ce669dd47">armnn::BackendRegistryInstance</a></div><div class="ttdeci">BackendRegistry &amp; BackendRegistryInstance()</div><div class="ttdef"><b>Definition:</b> <a href="_backend_registry_8cpp_source.xhtml#l00013">BackendRegistry.cpp:13</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a9ef4b4b6c421b5fd4b62274e63d08f11"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9ef4b4b6c421b5fd4b62274e63d08f11">&#9670;&nbsp;</a></span>GetInputTensor()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const <a class="el" href="classarmnn_1_1_const_tensor.xhtml">armnn::ConstTensor</a> armnn::GetInputTensor </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">LayerBindingId</a>&#160;</td>
+ <td class="paramname"><em>layerId</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="namespacearmnn.xhtml#aa01bce88f89975a5a031db4cc8861527">InputTensors</a> &amp;&#160;</td>
+ <td class="paramname"><em>inputTensors</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_loaded_network_8cpp_source.xhtml#l01280">1280</a> of file <a class="el" href="_loaded_network_8cpp_source.xhtml">LoadedNetwork.cpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160;{</div><div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> inputTensorPair : inputTensors)</div><div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160; {</div><div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160; <a class="code" href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">LayerBindingId</a> <span class="keywordtype">id</span> = inputTensorPair.first;</div><div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160; <span class="keywordflow">if</span> (<span class="keywordtype">id</span> == layerId)</div><div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160; {</div><div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160; <span class="keywordflow">return</span> inputTensorPair.second;</div><div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160; }</div><div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160; }</div><div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Input does not exist.&quot;</span>);</div><div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ab8cf8f9fb6792e654c2d8d8382f6f01b"><div class="ttname"><a href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">armnn::LayerBindingId</a></div><div class="ttdeci">int LayerBindingId</div><div class="ttdoc">Type of identifiers for bindable layers (inputs, outputs). </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00277">Types.hpp:277</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a2187ea15b1ae8c323a0cc5c211fc43d9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2187ea15b1ae8c323a0cc5c211fc43d9">&#9670;&nbsp;</a></span>GetInputTensorData()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>* armnn::GetInputTensorData </td>
+ <td>(</td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>idx</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const PayloadType &amp;&#160;</td>
+ <td class="paramname"><em>data</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ref_workload_utils_8hpp_source.xhtml#l00035">35</a> of file <a class="el" href="_ref_workload_utils_8hpp_source.xhtml">RefWorkloadUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_cl_workload_utils_8hpp_source.xhtml#l00168">GetOutputTensorData()</a>, and <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml#a9afbc055a017adf1bc38ee137bca6e90">ITensorHandle::Map()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;{</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keyword">const</span> ITensorHandle* tensorHandle = data.m_Inputs[idx];</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span><a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>*<span class="keyword">&gt;</span>(tensorHandle-&gt;Map());</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a></div><div class="ttdeci">DataType</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00035">Types.hpp:35</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ac44cb4d413a43342b120b2c4d047d648"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac44cb4d413a43342b120b2c4d047d648">&#9670;&nbsp;</a></span>GetInputTensorDataBFloat16()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const <a class="el" href="classarmnn_1_1_b_float16.xhtml">BFloat16</a>* armnn::GetInputTensorDataBFloat16 </td>
+ <td>(</td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>idx</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const PayloadType &amp;&#160;</td>
+ <td class="paramname"><em>data</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ref_workload_utils_8hpp_source.xhtml#l00079">79</a> of file <a class="el" href="_ref_workload_utils_8hpp_source.xhtml">RefWorkloadUtils.hpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;{</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordflow">return</span> GetInputTensorData&lt;BFloat16&gt;(idx, data);</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a691846a9eee59b0cd5b22fb5f674e007"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a691846a9eee59b0cd5b22fb5f674e007">&#9670;&nbsp;</a></span>GetInputTensorDataFloat()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const float* armnn::GetInputTensorDataFloat </td>
+ <td>(</td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>idx</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const PayloadType &amp;&#160;</td>
+ <td class="paramname"><em>data</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ref_workload_utils_8hpp_source.xhtml#l00055">55</a> of file <a class="el" href="_ref_workload_utils_8hpp_source.xhtml">RefWorkloadUtils.hpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;{</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">return</span> GetInputTensorData&lt;float&gt;(idx, data);</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a084b0ce273bef78aa314bd97fc574b84"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a084b0ce273bef78aa314bd97fc574b84">&#9670;&nbsp;</a></span>GetInputTensorDataHalf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const <a class="el" href="namespacearmnn.xhtml#a0f38fa92b2468d5378258a2b074c1a31">Half</a>* armnn::GetInputTensorDataHalf </td>
+ <td>(</td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>idx</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const PayloadType &amp;&#160;</td>
+ <td class="paramname"><em>data</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ref_workload_utils_8hpp_source.xhtml#l00067">67</a> of file <a class="el" href="_ref_workload_utils_8hpp_source.xhtml">RefWorkloadUtils.hpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;{</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">return</span> GetInputTensorData&lt;Half&gt;(idx, data);</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="addb6b14dd1b632263ffe77430259a7c4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#addb6b14dd1b632263ffe77430259a7c4">&#9670;&nbsp;</a></span>GetLayerTypeAsCString()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">char const * GetLayerTypeAsCString </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>&#160;</td>
+ <td class="paramname"><em>type</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_internal_types_8cpp_source.xhtml#l00013">13</a> of file <a class="el" href="_internal_types_8cpp_source.xhtml">InternalTypes.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00015">ARMNN_ASSERT_MSG</a>, and <a class="el" href="_types_8hpp_source.xhtml#l00380">LIST_OF_LAYER_TYPE</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.xhtml#l00670">AttemptBackendAssignment()</a>, <a class="el" href="_network_8cpp_source.xhtml#l00611">CheckScaleSetOnQuantizedType()</a>, <a class="el" href="_test_utils_8cpp_source.xhtml#l00012">Connect()</a>, <a class="el" href="_test_input_output_layer_visitor_8hpp_source.xhtml#l00030">TestInputLayerVisitor::ExecuteStrategy()</a>, <a class="el" href="_strategy_base_8hpp_source.xhtml#l00033">StrategyBase&lt; NoThrowStrategy &gt;::ExecuteStrategy()</a>, <a class="el" href="_const_tensor_layer_visitor_8hpp_source.xhtml#l00035">TestConvolution2dLayerVisitor::ExecuteStrategy()</a>, <a class="el" href="_test_input_output_layer_visitor_8hpp_source.xhtml#l00065">TestOutputLayerVisitor::ExecuteStrategy()</a>, <a class="el" href="_const_tensor_layer_visitor_8hpp_source.xhtml#l00088">TestDepthwiseConvolution2dLayerVisitor::ExecuteStrategy()</a>, <a class="el" href="_const_tensor_layer_visitor_8hpp_source.xhtml#l00137">TestFullyConnectedLayerVistor::ExecuteStrategy()</a>, <a class="el" href="_const_tensor_layer_visitor_8hpp_source.xhtml#l00183">TestBatchNormalizationLayerVisitor::ExecuteStrategy()</a>, <a class="el" href="_const_tensor_layer_visitor_8hpp_source.xhtml#l00230">TestConstantLayerVisitor::ExecuteStrategy()</a>, <a class="el" href="_const_tensor_layer_visitor_8hpp_source.xhtml#l00355">TestLstmLayerVisitor::ExecuteStrategy()</a>, <a class="el" href="_const_tensor_layer_visitor_8hpp_source.xhtml#l00396">TestQLstmLayerVisitor::ExecuteStrategy()</a>, <a class="el" href="_const_tensor_layer_visitor_8hpp_source.xhtml#l00437">TestQuantizedLstmLayerVisitor::ExecuteStrategy()</a>, <a class="el" href="_elementwise_base_layer_8cpp_source.xhtml#l00023">ElementwiseBaseLayer::InferOutputShapes()</a>, <a class="el" href="_layer_8cpp_source.xhtml#l00371">Layer::InferOutputShapes()</a>, <a class="el" href="_graph_8cpp_source.xhtml#l00560">Graph::InferTensorInfos()</a>, <a class="el" href="_graph_8cpp_source.xhtml#l00061">Graph::Print()</a>, <a class="el" href="_network_8cpp_source.xhtml#l00596">ReturnWithError()</a>, <a class="el" href="_layer_8cpp_source.xhtml#l00450">Layer::SerializeLayerParameters()</a>, <a class="el" href="_graph_8cpp_source.xhtml#l00118">Graph::SerializeToDot()</a>, <a class="el" href="_optimizer_tests_8cpp_source.xhtml#l00306">TEST_SUITE()</a>, <a class="el" href="_elementwise_base_layer_8cpp_source.xhtml#l00076">ElementwiseBaseLayer::ValidateTensorShapesFromInputs()</a>, <a class="el" href="_elementwise_unary_layer_8cpp_source.xhtml#l00043">ElementwiseUnaryLayer::ValidateTensorShapesFromInputs()</a>, <a class="el" href="_graph_8cpp_source.xhtml#l00537">Graph::VerifyConstantLayerSetTensorInfo()</a>, and <a class="el" href="_layer_8cpp_source.xhtml#l00352">Layer::VerifyLayerConnections()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;{</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; <span class="keywordflow">switch</span> (type)</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; {</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#define X(name) case LayerType::name: return #name;</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; <a class="code" href="_types_8hpp.xhtml#ac6d0779b576215649c2610ef2bd1903f">LIST_OF_LAYER_TYPE</a></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#undef X</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;Unknown layer type&quot;</span>);</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Unknown&quot;</span>;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; }</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;}</div><div class="ttc" id="_types_8hpp_xhtml_ac6d0779b576215649c2610ef2bd1903f"><div class="ttname"><a href="_types_8hpp.xhtml#ac6d0779b576215649c2610ef2bd1903f">LIST_OF_LAYER_TYPE</a></div><div class="ttdeci">#define LIST_OF_LAYER_TYPE</div><div class="ttdoc">This list uses X macro technique. </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00380">Types.hpp:380</a></div></div>
+<div class="ttc" id="_assert_8hpp_xhtml_a91c4dfde57907d7698c7531785690a7f"><div class="ttname"><a href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a></div><div class="ttdeci">#define ARMNN_ASSERT_MSG(COND, MSG)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00015">Assert.hpp:15</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a0ad431ff1600c845fda078ac58a47809"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0ad431ff1600c845fda078ac58a47809">&#9670;&nbsp;</a></span>GetLogicalBinaryOperationAsCString()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr char const* armnn::GetLogicalBinaryOperationAsCString </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#a2da4db0140d1a6dc69c9c82e9ef5379e">LogicalBinaryOperation</a>&#160;</td>
+ <td class="paramname"><em>operation</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00087">87</a> of file <a class="el" href="_types_utils_8hpp_source.xhtml">TypesUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#a2da4db0140d1a6dc69c9c82e9ef5379ea103aa83df42877d5f9baeafdbf620b55">LogicalAnd</a>, and <a class="el" href="namespacearmnn.xhtml#a2da4db0140d1a6dc69c9c82e9ef5379ea74ce78827b02c650a20b149765388247">LogicalOr</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_ref_logical_binary_workload_8cpp_source.xhtml#l00030">RefLogicalBinaryWorkload::ExecuteAsync()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;{</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordflow">switch</span> (operation)</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; {</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordflow">case</span> LogicalBinaryOperation::LogicalAnd: <span class="keywordflow">return</span> <span class="stringliteral">&quot;LogicalAnd&quot;</span>;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordflow">case</span> LogicalBinaryOperation::LogicalOr: <span class="keywordflow">return</span> <span class="stringliteral">&quot;LogicalOr&quot;</span>;</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Unknown&quot;</span>;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; }</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="aa0a94554d6ef64e32793b3d54b2563f0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa0a94554d6ef64e32793b3d54b2563f0">&#9670;&nbsp;</a></span>GetMemBlockStrategyTypeName()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr const char* armnn::GetMemBlockStrategyTypeName </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#a7100de49939c3e393101f78d425a98c6">MemBlockStrategyType</a>&#160;</td>
+ <td class="paramname"><em>memBlockStrategyType</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00264">264</a> of file <a class="el" href="_types_utils_8hpp_source.xhtml">TypesUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#a7100de49939c3e393101f78d425a98c6ab093fa975bc79c72c686e6d9773a0d1f">MultiAxisPacking</a>, and <a class="el" href="namespacearmnn.xhtml#a7100de49939c3e393101f78d425a98c6a568437eb3752bdf14546b5c221ba5be7">SingleAxisPacking</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_runtime_8cpp_source.xhtml#l00297">RuntimeImpl::RuntimeImpl()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160;{</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keywordflow">switch</span> (memBlockStrategyType)</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; {</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keywordflow">case</span> MemBlockStrategyType::SingleAxisPacking: <span class="keywordflow">return</span> <span class="stringliteral">&quot;SingleAxisPacking&quot;</span>;</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="keywordflow">case</span> MemBlockStrategyType::MultiAxisPacking: <span class="keywordflow">return</span> <span class="stringliteral">&quot;MultiAxisPacking&quot;</span>;</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Unknown&quot;</span>;</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; }</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a7c8192a429fc68220e4fc308062a02ba"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7c8192a429fc68220e4fc308062a02ba">&#9670;&nbsp;</a></span>GetMemoryOptimizerStrategy()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::unique_ptr&lt;<a class="el" href="classarmnn_1_1_i_memory_optimizer_strategy.xhtml">IMemoryOptimizerStrategy</a>&gt; armnn::GetMemoryOptimizerStrategy </td>
+ <td>(</td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>strategyName</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_memory_optimizer_strategy_library_8hpp_source.xhtml#l00036">36</a> of file <a class="el" href="_memory_optimizer_strategy_library_8hpp_source.xhtml">MemoryOptimizerStrategyLibrary.hpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_memory_strategy_benchmark_8cpp_source.xhtml#l00160">main()</a>, <a class="el" href="_runtime_8cpp_source.xhtml#l00297">RuntimeImpl::RuntimeImpl()</a>, and <a class="el" href="_memory_optimizer_strategy_library_tests_8cpp_source.xhtml#l00012">TEST_SUITE()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;{</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span>&amp; strategyFactoryMap = GetStrategyFactories();</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keyword">auto</span> strategyFactory = strategyFactoryMap.find(strategyName);</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordflow">if</span> (strategyFactory != GetStrategyFactories().end())</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; {</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">return</span> strategyFactory-&gt;second-&gt;CreateMemoryOptimizerStrategy();</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; }</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="aedc54936fd5ebb2d5697c8001532401a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aedc54936fd5ebb2d5697c8001532401a">&#9670;&nbsp;</a></span>GetMemoryOptimizerStrategyNames()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const std::vector&lt;std::string&gt; armnn::GetMemoryOptimizerStrategyNames </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_memory_optimizer_strategy_library_8hpp_source.xhtml#l00047">47</a> of file <a class="el" href="_memory_optimizer_strategy_library_8hpp_source.xhtml">MemoryOptimizerStrategyLibrary.hpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_memory_strategy_benchmark_8cpp_source.xhtml#l00112">ParseOptions()</a>, and <a class="el" href="_memory_optimizer_strategy_library_tests_8cpp_source.xhtml#l00012">TEST_SUITE()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;{</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span>&amp; strategyFactoryMap = GetStrategyFactories();</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; std::vector&lt;std::string&gt; strategyNames;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; strategyFactory : strategyFactoryMap)</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; {</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; strategyNames.emplace_back(strategyFactory.first);</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; }</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordflow">return</span> strategyNames;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="ac8c5f9574593b4623d4850f5fd26e3cc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac8c5f9574593b4623d4850f5fd26e3cc">&#9670;&nbsp;</a></span>GetModelOptionsForTesting()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn.xhtml#a5b6893cda5b69359a4244c06054da18f">ModelOptions</a> &amp; GetModelOptionsForTesting </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_i_optimized_network.xhtml">IOptimizedNetwork</a> *&#160;</td>
+ <td class="paramname"><em>optNet</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_test_utils_8cpp_source.xhtml#l00052">52</a> of file <a class="el" href="_test_utils_8cpp_source.xhtml">TestUtils.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_i_network_8hpp_source.xhtml#l00828">IOptimizedNetwork::pOptimizedNetworkImpl</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="est_utils_2_test_utils_8hpp_source.xhtml#l00034">CheckRelatedLayers()</a>, and <a class="el" href="_cl_optimized_network_tests_8cpp_source.xhtml#l00019">TEST_SUITE()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;{</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordflow">return</span> optNet-&gt;<a class="code" href="classarmnn_1_1_i_optimized_network.xhtml#a374d52340ec8dc02a819acc20fb5aa92">pOptimizedNetworkImpl</a>-&gt;GetModelOptions();</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_i_optimized_network_xhtml_a374d52340ec8dc02a819acc20fb5aa92"><div class="ttname"><a href="classarmnn_1_1_i_optimized_network.xhtml#a374d52340ec8dc02a819acc20fb5aa92">armnn::IOptimizedNetwork::pOptimizedNetworkImpl</a></div><div class="ttdeci">std::unique_ptr&lt; OptimizedNetworkImpl &gt; pOptimizedNetworkImpl</div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00828">INetwork.hpp:828</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="aeadd602e128a2be97161345b48533417"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aeadd602e128a2be97161345b48533417">&#9670;&nbsp;</a></span>GetNormalizationAlgorithmChannelAsCString()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr const char* armnn::GetNormalizationAlgorithmChannelAsCString </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#abe18a5033f2ab9c0de82c676b48f5437">NormalizationAlgorithmChannel</a>&#160;</td>
+ <td class="paramname"><em>channel</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00234">234</a> of file <a class="el" href="_types_utils_8hpp_source.xhtml">TypesUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#abe18a5033f2ab9c0de82c676b48f5437a810f43f3996922151c39b76143faeecc">Across</a>, and <a class="el" href="namespacearmnn.xhtml#abe18a5033f2ab9c0de82c676b48f5437a37bac6dce4f46277d89bfa3003e2e39b">Within</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00238">StringifyLayerParameters&lt; NormalizationDescriptor &gt;::Serialize()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160;{</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="keywordflow">switch</span> (channel)</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; {</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keywordflow">case</span> NormalizationAlgorithmChannel::Across: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Across&quot;</span>;</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keywordflow">case</span> NormalizationAlgorithmChannel::Within: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Within&quot;</span>;</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Unknown&quot;</span>;</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; }</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="ad57460ea53cd0b519a3b3547eaf1db7c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad57460ea53cd0b519a3b3547eaf1db7c">&#9670;&nbsp;</a></span>GetNormalizationAlgorithmMethodAsCString()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr const char* armnn::GetNormalizationAlgorithmMethodAsCString </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#ad605d1661fa0d8c7fea651d82fbe11c9">NormalizationAlgorithmMethod</a>&#160;</td>
+ <td class="paramname"><em>method</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00244">244</a> of file <a class="el" href="_types_utils_8hpp_source.xhtml">TypesUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#ad605d1661fa0d8c7fea651d82fbe11c9ac65d2e51c610dd3853a3c777aa8bfe9d">LocalBrightness</a>, and <a class="el" href="namespacearmnn.xhtml#ad605d1661fa0d8c7fea651d82fbe11c9aa94d2fcabc6b001015aeddfa19266e6f">LocalContrast</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00238">StringifyLayerParameters&lt; NormalizationDescriptor &gt;::Serialize()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160;{</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keywordflow">switch</span> (method)</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; {</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="keywordflow">case</span> NormalizationAlgorithmMethod::LocalBrightness: <span class="keywordflow">return</span> <span class="stringliteral">&quot;LocalBrightness&quot;</span>;</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="keywordflow">case</span> NormalizationAlgorithmMethod::LocalContrast: <span class="keywordflow">return</span> <span class="stringliteral">&quot;LocalContrast&quot;</span>;</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Unknown&quot;</span>;</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; }</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="ae266ee8bf362cbf8a88ab6e6b389791a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae266ee8bf362cbf8a88ab6e6b389791a">&#9670;&nbsp;</a></span>GetNumberOfCacheFiles()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">unsigned int GetNumberOfCacheFiles </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">armnn::BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the number of cached files if backend supports caching. </p>
+
+<p class="definition">Definition at line <a class="el" href="_backend_helper_8cpp_source.xhtml#l00129">129</a> of file <a class="el" href="_backend_helper_8cpp_source.xhtml">BackendHelper.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_backend_registry_8cpp_source.xhtml#l00013">BackendRegistryInstance()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_backend_helper_8hpp_source.xhtml#l00026">LayerSupportHandle::LayerSupportHandle()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;{</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span>&amp; backendRegistry = <a class="code" href="namespacearmnn.xhtml#ac2807505b850738bc8a1991ce669dd47">armnn::BackendRegistryInstance</a>();</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordflow">if</span> (backendRegistry.IsBackendRegistered(backend))</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; {</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keyword">auto</span> factoryFunc = backendRegistry.GetFactory(backend);</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keyword">auto</span> backendObject = factoryFunc();</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">return</span> backendObject-&gt;GetNumberOfCacheFiles();</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; }</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ac2807505b850738bc8a1991ce669dd47"><div class="ttname"><a href="namespacearmnn.xhtml#ac2807505b850738bc8a1991ce669dd47">armnn::BackendRegistryInstance</a></div><div class="ttdeci">BackendRegistry &amp; BackendRegistryInstance()</div><div class="ttdef"><b>Definition:</b> <a href="_backend_registry_8cpp_source.xhtml#l00013">BackendRegistry.cpp:13</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="adafb0fd0a3f6435c2bdf41f971761ecf"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adafb0fd0a3f6435c2bdf41f971761ecf">&#9670;&nbsp;</a></span>GetOffset()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">unsigned int armnn::GetOffset </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> &amp;&#160;</td>
+ <td class="paramname"><em>shape</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>b</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>h</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>c</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_utils_1_1_data_layout_indexed.xhtml">DataLayoutIndexed</a> &amp;&#160;</td>
+ <td class="paramname"><em>dataLayout</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="backends_2reference_2workloads_2_space_to_batch_n_d_8cpp_source.xhtml#l00015">15</a> of file <a class="el" href="backends_2reference_2workloads_2_space_to_batch_n_d_8cpp_source.xhtml">SpaceToBatchNd.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00023">DataLayoutIndexed::GetChannelsIndex()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00022">DataLayoutIndexed::GetDataLayout()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00024">DataLayoutIndexed::GetHeightIndex()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00025">DataLayoutIndexed::GetWidthIndex()</a>, and <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">NHWC</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="backends_2reference_2workloads_2_space_to_batch_n_d_8cpp_source.xhtml#l00034">SpaceToBatchNd()</a>, and <a class="el" href="_space_to_depth_8cpp_source.xhtml#l00036">SpaceToDepth()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;{</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keywordflow">if</span> (dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a7d8b3d755b6ca8f5533657969efb06c4">GetDataLayout</a>() == DataLayout::NHWC)</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; {</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keywordflow">return</span> ((b * shape[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a61c00316c443adc233c24e85c6c5b740">GetHeightIndex</a>()] + h) * shape[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a414e6f95548e6f7a01d5028b55ad3941">GetWidthIndex</a>()] + w) *</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; shape[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a861b2621ee46e4b63379988b360b8cd9">GetChannelsIndex</a>()] + c;</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; }</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; {</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordflow">return</span> ((b * shape[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a861b2621ee46e4b63379988b360b8cd9">GetChannelsIndex</a>()] + c) * shape[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a61c00316c443adc233c24e85c6c5b740">GetHeightIndex</a>()] + h) *</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; shape[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a414e6f95548e6f7a01d5028b55ad3941">GetWidthIndex</a>()] + w;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; }</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;}</div><div class="ttc" id="classarmnn_utils_1_1_data_layout_indexed_xhtml_a414e6f95548e6f7a01d5028b55ad3941"><div class="ttname"><a href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a414e6f95548e6f7a01d5028b55ad3941">armnnUtils::DataLayoutIndexed::GetWidthIndex</a></div><div class="ttdeci">unsigned int GetWidthIndex() const</div><div class="ttdef"><b>Definition:</b> <a href="_data_layout_indexed_8hpp_source.xhtml#l00025">DataLayoutIndexed.hpp:25</a></div></div>
+<div class="ttc" id="classarmnn_utils_1_1_data_layout_indexed_xhtml_a61c00316c443adc233c24e85c6c5b740"><div class="ttname"><a href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a61c00316c443adc233c24e85c6c5b740">armnnUtils::DataLayoutIndexed::GetHeightIndex</a></div><div class="ttdeci">unsigned int GetHeightIndex() const</div><div class="ttdef"><b>Definition:</b> <a href="_data_layout_indexed_8hpp_source.xhtml#l00024">DataLayoutIndexed.hpp:24</a></div></div>
+<div class="ttc" id="classarmnn_utils_1_1_data_layout_indexed_xhtml_a7d8b3d755b6ca8f5533657969efb06c4"><div class="ttname"><a href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a7d8b3d755b6ca8f5533657969efb06c4">armnnUtils::DataLayoutIndexed::GetDataLayout</a></div><div class="ttdeci">armnn::DataLayout GetDataLayout() const</div><div class="ttdef"><b>Definition:</b> <a href="_data_layout_indexed_8hpp_source.xhtml#l00022">DataLayoutIndexed.hpp:22</a></div></div>
+<div class="ttc" id="classarmnn_utils_1_1_data_layout_indexed_xhtml_a861b2621ee46e4b63379988b360b8cd9"><div class="ttname"><a href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a861b2621ee46e4b63379988b360b8cd9">armnnUtils::DataLayoutIndexed::GetChannelsIndex</a></div><div class="ttdeci">unsigned int GetChannelsIndex() const</div><div class="ttdef"><b>Definition:</b> <a href="_data_layout_indexed_8hpp_source.xhtml#l00023">DataLayoutIndexed.hpp:23</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a67d7ce2e14ebd328f423322db88279c3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a67d7ce2e14ebd328f423322db88279c3">&#9670;&nbsp;</a></span>GetOutputShapeRoundingAsCString()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr char const* armnn::GetOutputShapeRoundingAsCString </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#adf2e5515c4c36a3e7e46bb8b83c6754e">OutputShapeRounding</a>&#160;</td>
+ <td class="paramname"><em>rounding</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00108">108</a> of file <a class="el" href="_types_utils_8hpp_source.xhtml">TypesUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#adf2e5515c4c36a3e7e46bb8b83c6754ea3237fbc8204064c106cb9080088a17cb">Ceiling</a>, and <a class="el" href="namespacearmnn.xhtml#adf2e5515c4c36a3e7e46bb8b83c6754eaf3f6d0343d56ce88ce7958170ed05cb3">Floor</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00306">StringifyLayerParameters&lt; Pooling2dDescriptor &gt;::Serialize()</a>, and <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00334">StringifyLayerParameters&lt; Pooling3dDescriptor &gt;::Serialize()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;{</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordflow">switch</span> (rounding)</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; {</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordflow">case</span> OutputShapeRounding::Ceiling: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Ceiling&quot;</span>;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keywordflow">case</span> OutputShapeRounding::Floor: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Floor&quot;</span>;</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Unknown&quot;</span>;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; }</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="ac624e40d8096e61c73b246934f18afd0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac624e40d8096e61c73b246934f18afd0">&#9670;&nbsp;</a></span>GetOutputTensor()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const <a class="el" href="classarmnn_1_1_tensor.xhtml">armnn::Tensor</a> armnn::GetOutputTensor </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">LayerBindingId</a>&#160;</td>
+ <td class="paramname"><em>layerId</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="namespacearmnn.xhtml#a8f091a512915d1cb29a4ebf13dfc53ea">OutputTensors</a> &amp;&#160;</td>
+ <td class="paramname"><em>outputTensors</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_loaded_network_8cpp_source.xhtml#l01293">1293</a> of file <a class="el" href="_loaded_network_8cpp_source.xhtml">LoadedNetwork.cpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160;{</div><div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> outputTensorPair : outputTensors)</div><div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160; {</div><div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160; <a class="code" href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">LayerBindingId</a> <span class="keywordtype">id</span> = outputTensorPair.first;</div><div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160; <span class="keywordflow">if</span> (<span class="keywordtype">id</span> == layerId)</div><div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160; {</div><div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160; <span class="keywordflow">return</span> outputTensorPair.second;</div><div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160; }</div><div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160; }</div><div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Output does not exist.&quot;</span>);</div><div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ab8cf8f9fb6792e654c2d8d8382f6f01b"><div class="ttname"><a href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">armnn::LayerBindingId</a></div><div class="ttdeci">int LayerBindingId</div><div class="ttdoc">Type of identifiers for bindable layers (inputs, outputs). </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00277">Types.hpp:277</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a5442d22144b3608bcfc7eea1bc55e35d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5442d22144b3608bcfc7eea1bc55e35d">&#9670;&nbsp;</a></span>GetOutputTensorData() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>* armnn::GetOutputTensorData </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> *&#160;</td>
+ <td class="paramname"><em>tensorHandle</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ref_workload_utils_8hpp_source.xhtml#l00049">49</a> of file <a class="el" href="_ref_workload_utils_8hpp_source.xhtml">RefWorkloadUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml#a9afbc055a017adf1bc38ee137bca6e90">ITensorHandle::Map()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;{</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span><a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>*<span class="keyword">&gt;</span>(tensorHandle-&gt;Map());</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a></div><div class="ttdeci">DataType</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00035">Types.hpp:35</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ae9f37e0b5f15afd89a29788a319da9ec"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae9f37e0b5f15afd89a29788a319da9ec">&#9670;&nbsp;</a></span>GetOutputTensorData() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> * GetOutputTensorData </td>
+ <td>(</td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>idx</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const PayloadType &amp;&#160;</td>
+ <td class="paramname"><em>data</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_workload_utils_8hpp_source.xhtml#l00168">168</a> of file <a class="el" href="_cl_workload_utils_8hpp_source.xhtml">ClWorkloadUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml#a9afbc055a017adf1bc38ee137bca6e90">ITensorHandle::Map()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_ref_workload_utils_8hpp_source.xhtml#l00035">GetInputTensorData()</a>, and <a class="el" href="_neon_workload_utils_8hpp_source.xhtml#l00113">SetNeonSliceData()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;{</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; ITensorHandle* tensorHandle = data.m_Outputs[idx];</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span><a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>*<span class="keyword">&gt;</span>(tensorHandle-&gt;Map());</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a></div><div class="ttdeci">DataType</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00035">Types.hpp:35</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a85ace5e5f41a093622a8c04150d24c60"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a85ace5e5f41a093622a8c04150d24c60">&#9670;&nbsp;</a></span>GetOutputTensorDataBFloat16()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classarmnn_1_1_b_float16.xhtml">BFloat16</a>* armnn::GetOutputTensorDataBFloat16 </td>
+ <td>(</td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>idx</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const PayloadType &amp;&#160;</td>
+ <td class="paramname"><em>data</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ref_workload_utils_8hpp_source.xhtml#l00085">85</a> of file <a class="el" href="_ref_workload_utils_8hpp_source.xhtml">RefWorkloadUtils.hpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;{</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordflow">return</span> GetOutputTensorData&lt;BFloat16&gt;(idx, data);</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="ab5f0afc1e37fd100843ecd55d8f284c1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab5f0afc1e37fd100843ecd55d8f284c1">&#9670;&nbsp;</a></span>GetOutputTensorDataFloat()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float* armnn::GetOutputTensorDataFloat </td>
+ <td>(</td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>idx</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const PayloadType &amp;&#160;</td>
+ <td class="paramname"><em>data</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ref_workload_utils_8hpp_source.xhtml#l00061">61</a> of file <a class="el" href="_ref_workload_utils_8hpp_source.xhtml">RefWorkloadUtils.hpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;{</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordflow">return</span> GetOutputTensorData&lt;float&gt;(idx, data);</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="ab98e77207c3d676b0b9ffa67357dbc6a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab98e77207c3d676b0b9ffa67357dbc6a">&#9670;&nbsp;</a></span>GetOutputTensorDataHalf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn.xhtml#a0f38fa92b2468d5378258a2b074c1a31">Half</a>* armnn::GetOutputTensorDataHalf </td>
+ <td>(</td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>idx</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const PayloadType &amp;&#160;</td>
+ <td class="paramname"><em>data</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ref_workload_utils_8hpp_source.xhtml#l00073">73</a> of file <a class="el" href="_ref_workload_utils_8hpp_source.xhtml">RefWorkloadUtils.hpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;{</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">return</span> GetOutputTensorData&lt;Half&gt;(idx, data);</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a129bde68152f5892e6abdedcb62aa983"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a129bde68152f5892e6abdedcb62aa983">&#9670;&nbsp;</a></span>GetPaddingMethodAsCString()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr char const* armnn::GetPaddingMethodAsCString </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#a3888429b6ebc79f9a7df549e5e4d9a2f">PaddingMethod</a>&#160;</td>
+ <td class="paramname"><em>method</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00118">118</a> of file <a class="el" href="_types_utils_8hpp_source.xhtml">TypesUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#a3888429b6ebc79f9a7df549e5e4d9a2fa843f2812f595e7ec7c5036e89fde02d6">Exclude</a>, and <a class="el" href="namespacearmnn.xhtml#a3888429b6ebc79f9a7df549e5e4d9a2faad301514192636ad34210adce598a45a">IgnoreValue</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00306">StringifyLayerParameters&lt; Pooling2dDescriptor &gt;::Serialize()</a>, and <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00334">StringifyLayerParameters&lt; Pooling3dDescriptor &gt;::Serialize()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;{</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keywordflow">switch</span> (method)</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; {</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordflow">case</span> PaddingMethod::Exclude: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Exclude&quot;</span>;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keywordflow">case</span> PaddingMethod::IgnoreValue: <span class="keywordflow">return</span> <span class="stringliteral">&quot;IgnoreValue&quot;</span>;</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Unknown&quot;</span>;</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; }</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="adb4d7f45aaa839541a90821a21d69c82"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adb4d7f45aaa839541a90821a21d69c82">&#9670;&nbsp;</a></span>GetPaddingModeAsCString()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr char const* armnn::GetPaddingModeAsCString </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#a14d24d90ab4ba2956e92e27890ba4c91">PaddingMode</a>&#160;</td>
+ <td class="paramname"><em>mode</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00128">128</a> of file <a class="el" href="_types_utils_8hpp_source.xhtml">TypesUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#a14d24d90ab4ba2956e92e27890ba4c91acb17869fe51048b5a5c4c6106551a255">Constant</a>, <a class="el" href="namespacearmnn.xhtml#a14d24d90ab4ba2956e92e27890ba4c91a74de3e45e4491e956e8dc18d841d9b00">Reflect</a>, and <a class="el" href="namespacearmnn.xhtml#a14d24d90ab4ba2956e92e27890ba4c91af334649ef5e5d0ffe200751d07012626">Symmetric</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00279">StringifyLayerParameters&lt; PadDescriptor &gt;::Serialize()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;{</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordflow">switch</span> (mode)</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; {</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordflow">case</span> PaddingMode::Constant: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Exclude&quot;</span>;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordflow">case</span> PaddingMode::Symmetric: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Symmetric&quot;</span>;</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordflow">case</span> PaddingMode::Reflect: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Reflect&quot;</span>;</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Unknown&quot;</span>;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; }</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a517314c21ac5309b90408da162212f9d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a517314c21ac5309b90408da162212f9d">&#9670;&nbsp;</a></span>GetPoolingAlgorithmAsCString()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr char const* armnn::GetPoolingAlgorithmAsCString </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#a961bbfe1db71a848eff5a1f0ab775718">PoolingAlgorithm</a>&#160;</td>
+ <td class="paramname"><em>pooling</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00097">97</a> of file <a class="el" href="_types_utils_8hpp_source.xhtml">TypesUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#a961bbfe1db71a848eff5a1f0ab775718ab1897515d548a960afe49ecf66a29021">Average</a>, <a class="el" href="namespacearmnn.xhtml#a961bbfe1db71a848eff5a1f0ab775718a7e6aa2d53f6ee2b1a34b017fa403cb76">L2</a>, and <a class="el" href="namespacearmnn.xhtml#a961bbfe1db71a848eff5a1f0ab775718a6a061313d22e51e0f25b7cd4dc065233">Max</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00306">StringifyLayerParameters&lt; Pooling2dDescriptor &gt;::Serialize()</a>, and <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00334">StringifyLayerParameters&lt; Pooling3dDescriptor &gt;::Serialize()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;{</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordflow">switch</span> (pooling)</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; {</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">case</span> PoolingAlgorithm::Average: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Average&quot;</span>;</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordflow">case</span> PoolingAlgorithm::Max: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Max&quot;</span>;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordflow">case</span> PoolingAlgorithm::L2: <span class="keywordflow">return</span> <span class="stringliteral">&quot;L2&quot;</span>;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Unknown&quot;</span>;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; }</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a24283be4c70fe5e95e038bdc3bf39ff6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a24283be4c70fe5e95e038bdc3bf39ff6">&#9670;&nbsp;</a></span>GetProfilerEventSequenceSize()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">size_t armnn::GetProfilerEventSequenceSize </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_i_profiler.xhtml">armnn::IProfiler</a> *&#160;</td>
+ <td class="paramname"><em>profiler</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_profiler_tests_8cpp_source.xhtml#l00019">19</a> of file <a class="el" href="_profiler_tests_8cpp_source.xhtml">ProfilerTests.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_profiling_8cpp_source.xhtml#l00568">ProfilerManager::GetInstance()</a>, <a class="el" href="_profiling_8cpp_source.xhtml#l00580">ProfilerManager::GetProfiler()</a>, and <a class="el" href="_profiling_8cpp_source.xhtml#l00575">ProfilerManager::RegisterProfiler()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_profiler_tests_8cpp_source.xhtml#l00062">TEST_SUITE()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;{</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keywordflow">if</span> (!profiler)</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; {</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(-1);</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; }</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keywordflow">return</span> profiler-&gt;pProfilerImpl-&gt;m_EventSequence.size();</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a22f1d90f329261a58e14827f99090e93"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a22f1d90f329261a58e14827f99090e93">&#9670;&nbsp;</a></span>GetProfilingService()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml">profiling::ProfilingService</a> &amp; GetProfilingService </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structarmnn_1_1_runtime_impl.xhtml">armnn::RuntimeImpl</a> *&#160;</td>
+ <td class="paramname"><em>runtime</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_test_utils_8cpp_source.xhtml#l00057">57</a> of file <a class="el" href="_test_utils_8cpp_source.xhtml">TestUtils.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="est_utils_2_test_utils_8hpp_source.xhtml#l00034">CheckRelatedLayers()</a>, <a class="el" href="_runtime_tests_8cpp_source.xhtml#l00037">TEST_SUITE()</a>, and <a class="el" href="_profiling_test_utils_8cpp_source.xhtml#l00363">VerifyPostOptimisationStructureTestImpl()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;{</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">return</span> runtime-&gt;m_ProfilingService;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a3c1f8116bfc753b5a72ae00d9f92a595"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3c1f8116bfc753b5a72ae00d9f92a595">&#9670;&nbsp;</a></span>GetReduceOperationAsCString()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr char const* armnn::GetReduceOperationAsCString </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0">ReduceOperation</a>&#160;</td>
+ <td class="paramname"><em>reduce_operation</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00139">139</a> of file <a class="el" href="_types_utils_8hpp_source.xhtml">TypesUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0a6a061313d22e51e0f25b7cd4dc065233">Max</a>, <a class="el" href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0a3d6c9ac08ada31c184094bbc67afe00d">Mean</a>, <a class="el" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea78d811e98514cd165dda532286610fd2">Min</a>, <a class="el" href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0a362a33c23b08e4a32a4ec53fbb82cccd">Prod</a>, and <a class="el" href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0aa0ec87054b5e5b7847d0d8780a01a3d5">Sum</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00383">StringifyLayerParameters&lt; ReduceDescriptor &gt;::Serialize()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;{</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keywordflow">switch</span> (reduce_operation)</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; {</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keywordflow">case</span> ReduceOperation::Sum: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Sum&quot;</span>;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="keywordflow">case</span> ReduceOperation::Max: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Max&quot;</span>;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keywordflow">case</span> ReduceOperation::Mean: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Mean&quot;</span>;</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordflow">case</span> ReduceOperation::Min: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Min&quot;</span>;</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keywordflow">case</span> ReduceOperation::Prod: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Prod&quot;</span>;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Unknown&quot;</span>;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; }</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="aded981a42027bd3302b9c0f09d988659"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aded981a42027bd3302b9c0f09d988659">&#9670;&nbsp;</a></span>GetResizeMethodAsCString()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr const char* armnn::GetResizeMethodAsCString </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#a9a2af2f8c4af4f9efa8e79417d505ac4">ResizeMethod</a>&#160;</td>
+ <td class="paramname"><em>method</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00254">254</a> of file <a class="el" href="_types_utils_8hpp_source.xhtml">TypesUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#a9a2af2f8c4af4f9efa8e79417d505ac4aaf17c98bbd83c27d6426d2ff3fa81d7f">Bilinear</a>, and <a class="el" href="namespacearmnn.xhtml#a9a2af2f8c4af4f9efa8e79417d505ac4aaa020331bb30d2fa2ecf7c3a0777823f">NearestNeighbor</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00411">StringifyLayerParameters&lt; ResizeDescriptor &gt;::Serialize()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;{</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="keywordflow">switch</span> (method)</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; {</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keywordflow">case</span> ResizeMethod::Bilinear: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Bilinear&quot;</span>;</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordflow">case</span> ResizeMethod::NearestNeighbor: <span class="keywordflow">return</span> <span class="stringliteral">&quot;NearestNeighbour&quot;</span>;</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Unknown&quot;</span>;</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; }</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="ab4c4804c2b7c7b4b25a8eca3272e12d4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab4c4804c2b7c7b4b25a8eca3272e12d4">&#9670;&nbsp;</a></span>GetSizePrefixedClContext()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">const armnn::ClContext* armnn::GetSizePrefixedClContext </td>
+ <td>(</td>
+ <td class="paramtype">const void *&#160;</td>
+ <td class="paramname"><em>buf</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_context_schema__generated_8h_source.xhtml#l00144">144</a> of file <a class="el" href="_cl_context_schema__generated_8h_source.xhtml">ClContextSchema_generated.h</a>.</p>
+<div class="fragment"><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; {</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keywordflow">return</span> flatbuffers::GetSizePrefixedRoot&lt;armnn::ClContext&gt;(buf);</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a19a90c41ca2f46ab29918fef1a6ad72e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a19a90c41ca2f46ab29918fef1a6ad72e">&#9670;&nbsp;</a></span>GetStatusAsCString()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr char const* armnn::GetStatusAsCString </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">Status</a>&#160;</td>
+ <td class="paramname"><em>status</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00017">17</a> of file <a class="el" href="_types_utils_8hpp_source.xhtml">TypesUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70bae139a585510a502bbf1841cf589f5086">Failure</a>, and <a class="el" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70ba505a83f220c02df2f85c3810cd9ceb38">Success</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_types_utils_8hpp_source.xhtml#l00297">operator&lt;&lt;()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;{</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keywordflow">switch</span> (status)</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; {</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70ba505a83f220c02df2f85c3810cd9ceb38">armnn::Status::Success</a>: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Status::Success&quot;</span>;</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70bae139a585510a502bbf1841cf589f5086">armnn::Status::Failure</a>: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Status::Failure&quot;</span>;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Unknown&quot;</span>;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; }</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70ba505a83f220c02df2f85c3810cd9ceb38"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70ba505a83f220c02df2f85c3810cd9ceb38">armnn::Status::Success</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70bae139a585510a502bbf1841cf589f5086"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70bae139a585510a502bbf1841cf589f5086">armnn::Status::Failure</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="af7ec4c0fa4375a45a70e4e31f3d8af47"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af7ec4c0fa4375a45a70e4e31f3d8af47">&#9670;&nbsp;</a></span>GetTensorInfo()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; armnn::GetTensorInfo </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> *&#160;</td>
+ <td class="paramname"><em>tensorHandle</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>float32 helpers </p>
+
+<p class="definition">Definition at line <a class="el" href="_ref_workload_utils_8hpp_source.xhtml#l00026">26</a> of file <a class="el" href="_ref_workload_utils_8hpp_source.xhtml">RefWorkloadUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_ref_tensor_handle_8hpp_source.xhtml#l00049">RefTensorHandle::GetTensorInfo()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_batch_norm_impl_8cpp_source.xhtml#l00018">BatchNormImpl()</a>, <a class="el" href="_concatenate_8cpp_source.xhtml#l00014">Concatenate()</a>, <a class="el" href="_ref_strided_slice_workload_8cpp_source.xhtml#l00023">RefStridedSliceWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_depth_to_space_workload_8cpp_source.xhtml#l00019">RefDepthToSpaceWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_channel_shuffle_workload_8cpp_source.xhtml#l00021">RefChannelShuffleWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_fake_quantization_float32_workload_8cpp_source.xhtml#l00034">RefFakeQuantizationFloat32Workload::ExecuteAsync()</a>, <a class="el" href="_ref_space_to_depth_workload_8cpp_source.xhtml#l00020">RefSpaceToDepthWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_fill_workload_8cpp_source.xhtml#l00022">RefFillWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_floor_workload_8cpp_source.xhtml#l00021">RefFloorWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_convert_bf16_to_fp32_workload_8cpp_source.xhtml#l00021">RefConvertBf16ToFp32Workload::ExecuteAsync()</a>, <a class="el" href="_ref_convert_fp16_to_fp32_workload_8cpp_source.xhtml#l00021">RefConvertFp16ToFp32Workload::ExecuteAsync()</a>, <a class="el" href="_ref_log_softmax_workload_8cpp_source.xhtml#l00025">RefLogSoftmaxWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_convert_fp32_to_bf16_workload_8cpp_source.xhtml#l00021">RefConvertFp32ToBf16Workload::ExecuteAsync()</a>, <a class="el" href="_ref_convert_fp32_to_fp16_workload_8cpp_source.xhtml#l00022">RefConvertFp32ToFp16Workload::ExecuteAsync()</a>, <a class="el" href="_ref_pad_workload_8cpp_source.xhtml#l00021">RefPadWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_activation_workload_8cpp_source.xhtml#l00023">RefActivationWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_reshape_workload_8cpp_source.xhtml#l00020">RefReshapeWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_resize_workload_8cpp_source.xhtml#l00025">RefResizeWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_softmax_workload_8cpp_source.xhtml#l00025">RefSoftmaxWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_space_to_batch_nd_workload_8cpp_source.xhtml#l00020">RefSpaceToBatchNdWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_stack_workload_8cpp_source.xhtml#l00026">RefStackWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_detection_post_process_workload_8cpp_source.xhtml#l00026">RefDetectionPostProcessWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_instance_normalization_workload_8cpp_source.xhtml#l00026">RefInstanceNormalizationWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_dequantize_workload_8cpp_source.xhtml#l00020">RefDequantizeWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_batch_to_space_nd_workload_8cpp_source.xhtml#l00019">RefBatchToSpaceNdWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_batch_normalization_workload_8cpp_source.xhtml#l00030">RefBatchNormalizationWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_arg_min_max_workload_8cpp_source.xhtml#l00027">RefArgMinMaxWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_prelu_workload_8cpp_source.xhtml#l00026">RefPreluWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_quantize_workload_8cpp_source.xhtml#l00042">RefQuantizeWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_slice_workload_8cpp_source.xhtml#l00021">RefSliceWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_cast_workload_8cpp_source.xhtml#l00034">RefCastWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_l2_normalization_workload_8cpp_source.xhtml#l00032">RefL2NormalizationWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_normalization_workload_8cpp_source.xhtml#l00169">RefNormalizationWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_reduce_workload_8cpp_source.xhtml#l00026">RefReduceWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_depthwise_convolution2d_workload_8cpp_source.xhtml#l00040">RefDepthwiseConvolution2dWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_lstm_workload_8cpp_source.xhtml#l00047">RefLstmWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_mean_workload_8cpp_source.xhtml#l00026">RefMeanWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_pooling2d_workload_8cpp_source.xhtml#l00021">RefPooling2dWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_pooling3d_workload_8cpp_source.xhtml#l00021">RefPooling3dWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_q_lstm_workload_8cpp_source.xhtml#l00051">RefQLstmWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_elementwise_unary_workload_8cpp_source.xhtml#l00038">RefElementwiseUnaryWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_constant_workload_8cpp_source.xhtml#l00028">RefConstantWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_logical_binary_workload_8cpp_source.xhtml#l00030">RefLogicalBinaryWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_logical_unary_workload_8cpp_source.xhtml#l00030">RefLogicalUnaryWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_shape_workload_8hpp_source.xhtml#l00024">RefShapeWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_comparison_workload_8cpp_source.xhtml#l00050">RefComparisonWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_gather_workload_8cpp_source.xhtml#l00021">RefGatherWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_convolution2d_workload_8cpp_source.xhtml#l00053">RefConvolution2dWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_transpose_convolution2d_workload_8cpp_source.xhtml#l00041">RefTransposeConvolution2dWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_convolution3d_workload_8cpp_source.xhtml#l00060">RefConvolution3dWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_rank_workload_8hpp_source.xhtml#l00025">RefRankWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_unidirectional_sequence_lstm_workload_8cpp_source.xhtml#l00051">RefUnidirectionalSequenceLstmWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_fully_connected_workload_8cpp_source.xhtml#l00059">RefFullyConnectedWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_transpose_workload_8cpp_source.xhtml#l00023">RefTransposeWorkload&lt; DataType &gt;::ExecuteAsync()</a>, <a class="el" href="_ref_permute_workload_8cpp_source.xhtml#l00023">RefPermuteWorkload&lt; DataType &gt;::ExecuteAsync()</a>, <a class="el" href="_ref_elementwise_workload_8cpp_source.xhtml#l00035">RefElementwiseWorkload&lt; Functor, ParentDescriptor, DebugString &gt;::ExecuteAsync()</a>, <a class="el" href="_ref_debug_workload_8cpp_source.xhtml#l00024">RefDebugWorkload&lt; DataType &gt;::ExecuteAsync()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00143">OutputSlot::GetNumConnections()</a>, <a class="el" href="_layer_8cpp_source.xhtml#l00119">OutputSlot::MoveAllConnections()</a>, <a class="el" href="_ref_comparison_workload_8cpp_source.xhtml#l00027">RefComparisonWorkload::PostAllocationConfigure()</a>, <a class="el" href="_ref_convolution3d_workload_8cpp_source.xhtml#l00035">RefConvolution3dWorkload::PostAllocationConfigure()</a>, <a class="el" href="_ref_fully_connected_workload_8cpp_source.xhtml#l00021">RefFullyConnectedWorkload::PostAllocationConfigure()</a>, <a class="el" href="_splitter_8cpp_source.xhtml#l00021">Split()</a>, <a class="el" href="_splitter_8hpp_source.xhtml#l00017">Splitter()</a>, <a class="el" href="_switch_layer_8cpp_source.xhtml#l00032">SwitchLayer::ValidateTensorShapesFromInputs()</a>, <a class="el" href="_detection_post_process_layer_8cpp_source.xhtml#l00039">DetectionPostProcessLayer::ValidateTensorShapesFromInputs()</a>, <a class="el" href="_splitter_layer_8cpp_source.xhtml#l00216">SplitterLayer::ValidateTensorShapesFromInputs()</a>, <a class="el" href="_lstm_layer_8cpp_source.xhtml#l00168">LstmLayer::ValidateTensorShapesFromInputs()</a>, <a class="el" href="_concat_layer_8cpp_source.xhtml#l00294">ConcatLayer::ValidateTensorShapesFromInputs()</a>, <a class="el" href="_quantized_lstm_layer_8cpp_source.xhtml#l00096">QuantizedLstmLayer::ValidateTensorShapesFromInputs()</a>, and <a class="el" href="_q_lstm_layer_8cpp_source.xhtml#l00170">QLstmLayer::ValidateTensorShapesFromInputs()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;{</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="comment">// We know that reference workloads use RefTensorHandles for inputs and outputs</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keyword">const</span> RefTensorHandle* refTensorHandle =</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; PolymorphicDowncast&lt;const RefTensorHandle*&gt;(tensorHandle);</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keywordflow">return</span> refTensorHandle-&gt;GetTensorInfo();</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a441621f00fd5665898c81a5ae3473c6b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a441621f00fd5665898c81a5ae3473c6b">&#9670;&nbsp;</a></span>GetTimeDuration()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::chrono::duration&lt;double, std::milli&gt; armnn::GetTimeDuration </td>
+ <td>(</td>
+ <td class="paramtype">std::chrono::high_resolution_clock::time_point&#160;</td>
+ <td class="paramname"><em>start_time</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_timer_8hpp_source.xhtml#l00019">19</a> of file <a class="el" href="_timer_8hpp_source.xhtml">Timer.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_timer_8hpp_source.xhtml#l00014">GetTimeNow()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_execute_network_8cpp_source.xhtml#l00047">CheckInferenceTimeThreshold()</a>, <a class="el" href="_runtime_8cpp_source.xhtml#l00596">RuntimeImpl::EnqueueWorkload()</a>, <a class="el" href="_runtime_8cpp_source.xhtml#l00648">RuntimeImpl::Execute()</a>, <a class="el" href="_inference_model_8hpp_source.xhtml#l00436">InferenceModel&lt; IParser, TDataType &gt;::InferenceModel()</a>, <a class="el" href="_execute_network_8cpp_source.xhtml#l00377">MainImpl()</a>, <a class="el" href="_inference_model_8hpp_source.xhtml#l00588">InferenceModel&lt; IParser, TDataType &gt;::Run()</a>, <a class="el" href="_inference_model_8hpp_source.xhtml#l00636">InferenceModel&lt; IParser, TDataType &gt;::RunAsync()</a>, <a class="el" href="_runtime_8cpp_source.xhtml#l00297">RuntimeImpl::RuntimeImpl()</a>, and <a class="el" href="_runtime_8cpp_source.xhtml#l00509">RuntimeImpl::~RuntimeImpl()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;{</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keywordflow">return</span> std::chrono::duration&lt;double, std::milli&gt;(<a class="code" href="namespacearmnn.xhtml#ac895f6f6897ce335b7b433201bae0b48">GetTimeNow</a>() - start_time);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ac895f6f6897ce335b7b433201bae0b48"><div class="ttname"><a href="namespacearmnn.xhtml#ac895f6f6897ce335b7b433201bae0b48">armnn::GetTimeNow</a></div><div class="ttdeci">std::chrono::high_resolution_clock::time_point GetTimeNow()</div><div class="ttdef"><b>Definition:</b> <a href="_timer_8hpp_source.xhtml#l00014">Timer.hpp:14</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ac895f6f6897ce335b7b433201bae0b48"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac895f6f6897ce335b7b433201bae0b48">&#9670;&nbsp;</a></span>GetTimeNow()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::chrono::high_resolution_clock::time_point armnn::GetTimeNow </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_timer_8hpp_source.xhtml#l00014">14</a> of file <a class="el" href="_timer_8hpp_source.xhtml">Timer.hpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_execute_network_8cpp_source.xhtml#l00047">CheckInferenceTimeThreshold()</a>, <a class="el" href="_runtime_8cpp_source.xhtml#l00596">RuntimeImpl::EnqueueWorkload()</a>, <a class="el" href="_runtime_8cpp_source.xhtml#l00648">RuntimeImpl::Execute()</a>, <a class="el" href="_timer_8hpp_source.xhtml#l00019">GetTimeDuration()</a>, <a class="el" href="_inference_model_8hpp_source.xhtml#l00436">InferenceModel&lt; IParser, TDataType &gt;::InferenceModel()</a>, <a class="el" href="_execute_network_8cpp_source.xhtml#l00377">MainImpl()</a>, <a class="el" href="_inference_model_8hpp_source.xhtml#l00588">InferenceModel&lt; IParser, TDataType &gt;::Run()</a>, <a class="el" href="_inference_model_8hpp_source.xhtml#l00636">InferenceModel&lt; IParser, TDataType &gt;::RunAsync()</a>, <a class="el" href="_runtime_8cpp_source.xhtml#l00297">RuntimeImpl::RuntimeImpl()</a>, <a class="el" href="_threadpool_8cpp_source.xhtml#l00102">Threadpool::TerminateThreadPool()</a>, and <a class="el" href="_runtime_8cpp_source.xhtml#l00509">RuntimeImpl::~RuntimeImpl()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;{</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; <span class="keywordflow">return</span> std::chrono::high_resolution_clock::now();</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a6dac966f265381903c8ef4f392becced"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6dac966f265381903c8ef4f392becced">&#9670;&nbsp;</a></span>GetUnaryOperationAsCString()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr char const* armnn::GetUnaryOperationAsCString </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8">UnaryOperation</a>&#160;</td>
+ <td class="paramname"><em>operation</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00071">71</a> of file <a class="el" href="_types_utils_8hpp_source.xhtml">TypesUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa1e34af023adeb7d5f484f8eb4b9826b6">Abs</a>, <a class="el" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8acad39a154bffb61175f674d6eefaf6d0">Exp</a>, <a class="el" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8ace0be71e33226e4c1db2bcea5959f16b">Log</a>, <a class="el" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8a2a25ebd8c909241e3f7818389b804ecc">LogicalNot</a>, <a class="el" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8afb278fa5defd7e699fcbc930c3e76ccd">Neg</a>, <a class="el" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8a09bb7f6e2118c85a6a55bd4bf2beeca4">Rsqrt</a>, <a class="el" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8a0986d137604183312e6d3599578bc6cd">Sin</a>, and <a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaaae77f3ad25595e35b327334d89410054">Sqrt</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_tf_lite_parser_8cpp_source.xhtml#l03309">armnnTfLiteParser::ComputeWrappedIndex()</a>, <a class="el" href="_ref_logical_unary_workload_8cpp_source.xhtml#l00030">RefLogicalUnaryWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_elementwise_unary_workload_8cpp_source.xhtml#l00038">RefElementwiseUnaryWorkload::ExecuteAsync()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00181">StringifyLayerParameters&lt; ElementwiseUnaryDescriptor &gt;::Serialize()</a>, and <a class="el" href="_serializer_tests_8cpp_source.xhtml#l00024">TEST_SUITE()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;{</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">switch</span> (operation)</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; {</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">case</span> UnaryOperation::Abs: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Abs&quot;</span>;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">case</span> UnaryOperation::Exp: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Exp&quot;</span>;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">case</span> UnaryOperation::Sqrt: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Sqrt&quot;</span>;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">case</span> UnaryOperation::Rsqrt: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Rsqrt&quot;</span>;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordflow">case</span> UnaryOperation::Neg: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Neg&quot;</span>;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">case</span> UnaryOperation::Log: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Log&quot;</span>;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordflow">case</span> UnaryOperation::LogicalNot: <span class="keywordflow">return</span> <span class="stringliteral">&quot;LogicalNot&quot;</span>;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">case</span> UnaryOperation::Sin: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Sin&quot;</span>;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Unknown&quot;</span>;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; }</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a36e8f52330a21eeab3cc7c4e030f3583"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a36e8f52330a21eeab3cc7c4e030f3583">&#9670;&nbsp;</a></span>GetUnpaddedTensorStrides()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> GetUnpaddedTensorStrides </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>tensorInfo</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tensor_handle_8cpp_source.xhtml#l00015">15</a> of file <a class="el" href="_tensor_handle_8cpp_source.xhtml">TensorHandle.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_tensor_8hpp_source.xhtml#l00198">TensorInfo::GetDataType()</a>, <a class="el" href="_types_utils_8hpp_source.xhtml#l00151">GetDataTypeSize()</a>, and <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_mock_tensor_handle_8hpp_source.xhtml#l00038">MockTensorHandle::GetStrides()</a>, <a class="el" href="_sample_tensor_handle_8hpp_source.xhtml#l00039">SampleTensorHandle::GetStrides()</a>, <a class="el" href="_ref_tensor_handle_8hpp_source.xhtml#l00039">RefTensorHandle::GetStrides()</a>, and <a class="el" href="include_2armnn_2backends_2_tensor_handle_8hpp_source.xhtml#l00052">ConstTensorHandle::GetStrides()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;{</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; TensorShape shape(tensorInfo.GetShape());</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; <span class="keyword">auto</span> size = <a class="code" href="namespacearmnn.xhtml#aa02b9e06fb20fa3c13da0427e6ee5ab2">GetDataTypeSize</a>(tensorInfo.GetDataType());</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keyword">auto</span> runningSize = size;</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; std::vector&lt;unsigned int&gt; strides(shape.GetNumDimensions());</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">auto</span> lastIdx = shape.GetNumDimensions()-1;</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i &lt; lastIdx ; i++)</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; {</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; strides[lastIdx-i] = runningSize;</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; runningSize *= shape[lastIdx-i];</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; }</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; strides[0] = runningSize;</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keywordflow">return</span> TensorShape(shape.GetNumDimensions(), strides.data());</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_aa02b9e06fb20fa3c13da0427e6ee5ab2"><div class="ttname"><a href="namespacearmnn.xhtml#aa02b9e06fb20fa3c13da0427e6ee5ab2">armnn::GetDataTypeSize</a></div><div class="ttdeci">constexpr unsigned int GetDataTypeSize(DataType dataType)</div><div class="ttdef"><b>Definition:</b> <a href="_types_utils_8hpp_source.xhtml#l00151">TypesUtils.hpp:151</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="aa09a8bb02eed50715082d8b7fccd2f8d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa09a8bb02eed50715082d8b7fccd2f8d">&#9670;&nbsp;</a></span>GetVersion()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const std::string GetVersion </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_utils_8cpp_source.xhtml#l00077">77</a> of file <a class="el" href="_utils_8cpp_source.xhtml">Utils.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="include_2armnn_2_version_8hpp_source.xhtml#l00022">ARMNN_VERSION</a>.</p>
+<div class="fragment"><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;{</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordflow">return</span> <a class="code" href="include_2armnn_2_version_8hpp.xhtml#a50bf0553d5c4b76d18a3d37e155b4d11">ARMNN_VERSION</a>;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;}</div><div class="ttc" id="include_2armnn_2_version_8hpp_xhtml_a50bf0553d5c4b76d18a3d37e155b4d11"><div class="ttname"><a href="include_2armnn_2_version_8hpp.xhtml#a50bf0553d5c4b76d18a3d37e155b4d11">ARMNN_VERSION</a></div><div class="ttdeci">#define ARMNN_VERSION</div><div class="ttdoc">ARMNN_VERSION: &quot;X.Y.Z&quot; where: X = Major version number Y = Minor version number Z = Patch version num...</div><div class="ttdef"><b>Definition:</b> <a href="include_2armnn_2_version_8hpp_source.xhtml#l00022">Version.hpp:22</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="abd839f0f103c1ae19a4b38d59b869108"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abd839f0f103c1ae19a4b38d59b869108">&#9670;&nbsp;</a></span>HasCapability() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool HasCapability </td>
+ <td>(</td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>name</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="namespacearmnn.xhtml#aa9c506b558b8aa33a228b15164f40dc3">BackendCapabilities</a> &amp;&#160;</td>
+ <td class="paramname"><em>capabilities</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Convenience function to check if a capability exists in a BackendCapabilites struct. </p>
+
+<p class="definition">Definition at line <a class="el" href="_backend_helper_8cpp_source.xhtml#l00058">58</a> of file <a class="el" href="_backend_helper_8cpp_source.xhtml">BackendHelper.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_backend_helper_8cpp_source.xhtml#l00030">GetCapability()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_backend_helper_8cpp_source.xhtml#l00100">HasCapability()</a>, <a class="el" href="_loaded_network_8cpp_source.xhtml#l01306">LoadedNetwork::ImportInputs()</a>, <a class="el" href="_loaded_network_8cpp_source.xhtml#l01439">LoadedNetwork::ImportOutputs()</a>, <a class="el" href="_backend_helper_8hpp_source.xhtml#l00026">LayerSupportHandle::LayerSupportHandle()</a>, <a class="el" href="_loaded_network_8cpp_source.xhtml#l00082">LoadedNetwork::MakeLoadedNetwork()</a>, <a class="el" href="_runtime_8cpp_source.xhtml#l00297">RuntimeImpl::RuntimeImpl()</a>, and <a class="el" href="_optimizer_tests_8cpp_source.xhtml#l00306">TEST_SUITE()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;{</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a71c3bdadfe1c69aba2cbf054bff47744">GetCapability</a>(name, capabilities).has_value();</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a71c3bdadfe1c69aba2cbf054bff47744"><div class="ttname"><a href="namespacearmnn.xhtml#a71c3bdadfe1c69aba2cbf054bff47744">armnn::GetCapability</a></div><div class="ttdeci">Optional&lt; const BackendOptions::BackendOption &gt; GetCapability(const std::string &amp;backendCapabilityName, const BackendCapabilities &amp;capabilities)</div><div class="ttdoc">Returns a BackendCapability if the backend lists the capability The BackendCapability must then be in...</div><div class="ttdef"><b>Definition:</b> <a href="_backend_helper_8cpp_source.xhtml#l00030">BackendHelper.cpp:30</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a8439e8b224a1fb7abdf449c8e6775469"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8439e8b224a1fb7abdf449c8e6775469">&#9670;&nbsp;</a></span>HasCapability() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool HasCapability </td>
+ <td>(</td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>name</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">armnn::BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Convenience function to check if a capability exists in a backend. </p>
+
+<p class="definition">Definition at line <a class="el" href="_backend_helper_8cpp_source.xhtml#l00063">63</a> of file <a class="el" href="_backend_helper_8cpp_source.xhtml">BackendHelper.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_backend_helper_8cpp_source.xhtml#l00030">GetCapability()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;{</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a71c3bdadfe1c69aba2cbf054bff47744">GetCapability</a>(name, backend).has_value();</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a71c3bdadfe1c69aba2cbf054bff47744"><div class="ttname"><a href="namespacearmnn.xhtml#a71c3bdadfe1c69aba2cbf054bff47744">armnn::GetCapability</a></div><div class="ttdeci">Optional&lt; const BackendOptions::BackendOption &gt; GetCapability(const std::string &amp;backendCapabilityName, const BackendCapabilities &amp;capabilities)</div><div class="ttdoc">Returns a BackendCapability if the backend lists the capability The BackendCapability must then be in...</div><div class="ttdef"><b>Definition:</b> <a href="_backend_helper_8cpp_source.xhtml#l00030">BackendHelper.cpp:30</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ae702febbc6139e20b2b8c4f03ff89b01"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae702febbc6139e20b2b8c4f03ff89b01">&#9670;&nbsp;</a></span>HasCapability() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool HasCapability </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_backend_options_1_1_backend_option.xhtml">BackendOptions::BackendOption</a> &amp;&#160;</td>
+ <td class="paramname"><em>capability</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="namespacearmnn.xhtml#aa9c506b558b8aa33a228b15164f40dc3">BackendCapabilities</a> &amp;&#160;</td>
+ <td class="paramname"><em>capabilities</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Convenience function to check if a given capability matches a capability in a BackendCapabilities struct. </p>
+
+<p class="definition">Definition at line <a class="el" href="_backend_helper_8cpp_source.xhtml#l00068">68</a> of file <a class="el" href="_backend_helper_8cpp_source.xhtml">BackendHelper.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_backend_options_8hpp_source.xhtml#l00119">BackendOptions::Var::AsBool()</a>, <a class="el" href="_backend_options_8hpp_source.xhtml#l00122">BackendOptions::Var::AsFloat()</a>, <a class="el" href="_backend_options_8hpp_source.xhtml#l00120">BackendOptions::Var::AsInt()</a>, <a class="el" href="_backend_options_8hpp_source.xhtml#l00123">BackendOptions::Var::AsString()</a>, <a class="el" href="_backend_options_8hpp_source.xhtml#l00121">BackendOptions::Var::AsUnsignedInt()</a>, <a class="el" href="_backend_options_8hpp_source.xhtml#l00251">BackendOptions::BackendOption::GetName()</a>, <a class="el" href="_backend_options_8hpp_source.xhtml#l00285">BackendOptions::GetOption()</a>, <a class="el" href="_backend_options_8hpp_source.xhtml#l00284">BackendOptions::GetOptionCount()</a>, <a class="el" href="_backend_options_8hpp_source.xhtml#l00252">BackendOptions::BackendOption::GetValue()</a>, <a class="el" href="_backend_options_8hpp_source.xhtml#l00112">BackendOptions::Var::IsBool()</a>, <a class="el" href="_backend_options_8hpp_source.xhtml#l00115">BackendOptions::Var::IsFloat()</a>, <a class="el" href="_backend_options_8hpp_source.xhtml#l00113">BackendOptions::Var::IsInt()</a>, <a class="el" href="_backend_options_8hpp_source.xhtml#l00116">BackendOptions::Var::IsString()</a>, and <a class="el" href="_backend_options_8hpp_source.xhtml#l00114">BackendOptions::Var::IsUnsignedInt()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;{</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i=0; i &lt; capabilities.GetOptionCount(); i++)</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; {</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span>&amp; backendCapability = capabilities.GetOption(i);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">if</span> (capability.GetName() == backendCapability.GetName())</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; {</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">if</span> (capability.GetValue().IsBool() &amp;&amp; backendCapability.GetValue().IsBool())</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; {</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">return</span> capability.GetValue().AsBool() == backendCapability.GetValue().AsBool();</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; }</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(capability.GetValue().IsFloat() &amp;&amp; backendCapability.GetValue().IsFloat())</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; {</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordflow">return</span> capability.GetValue().AsFloat() == backendCapability.GetValue().AsFloat();</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; }</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(capability.GetValue().IsInt() &amp;&amp; backendCapability.GetValue().IsInt())</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; {</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordflow">return</span> capability.GetValue().AsInt() == backendCapability.GetValue().AsInt();</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; }</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(capability.GetValue().IsString() &amp;&amp; backendCapability.GetValue().IsString())</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; {</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordflow">return</span> capability.GetValue().AsString() == backendCapability.GetValue().AsString();</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; }</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(capability.GetValue().IsUnsignedInt() &amp;&amp; backendCapability.GetValue().IsUnsignedInt())</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; {</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordflow">return</span> capability.GetValue().AsUnsignedInt() == backendCapability.GetValue().AsUnsignedInt();</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; }</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; }</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; }</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a78fe085e22e9822075ad791aa5cc34d5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a78fe085e22e9822075ad791aa5cc34d5">&#9670;&nbsp;</a></span>HasCapability() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool HasCapability </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_backend_options_1_1_backend_option.xhtml">BackendOptions::BackendOption</a> &amp;&#160;</td>
+ <td class="paramname"><em>backendOption</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">armnn::BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Convenience function to check if a given capability matches a capability in a backend. </p>
+
+<p class="definition">Definition at line <a class="el" href="_backend_helper_8cpp_source.xhtml#l00100">100</a> of file <a class="el" href="_backend_helper_8cpp_source.xhtml">BackendHelper.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_backend_registry_8cpp_source.xhtml#l00013">BackendRegistryInstance()</a>, and <a class="el" href="_backend_helper_8cpp_source.xhtml#l00058">HasCapability()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;{</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span>&amp; backendRegistry = <a class="code" href="namespacearmnn.xhtml#ac2807505b850738bc8a1991ce669dd47">armnn::BackendRegistryInstance</a>();</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordflow">if</span> (backendRegistry.IsBackendRegistered(backend))</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; {</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keyword">auto</span> factoryFunc = backendRegistry.GetFactory(backend);</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keyword">auto</span> backendObject = factoryFunc();</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keyword">auto</span> capabilities = backendObject-&gt;GetCapabilities();</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#abd839f0f103c1ae19a4b38d59b869108">HasCapability</a>(backendOption, capabilities);</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; }</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_abd839f0f103c1ae19a4b38d59b869108"><div class="ttname"><a href="namespacearmnn.xhtml#abd839f0f103c1ae19a4b38d59b869108">armnn::HasCapability</a></div><div class="ttdeci">bool HasCapability(const std::string &amp;name, const BackendCapabilities &amp;capabilities)</div><div class="ttdoc">Convenience function to check if a capability exists in a BackendCapabilites struct. </div><div class="ttdef"><b>Definition:</b> <a href="_backend_helper_8cpp_source.xhtml#l00058">BackendHelper.cpp:58</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ac2807505b850738bc8a1991ce669dd47"><div class="ttname"><a href="namespacearmnn.xhtml#ac2807505b850738bc8a1991ce669dd47">armnn::BackendRegistryInstance</a></div><div class="ttdeci">BackendRegistry &amp; BackendRegistryInstance()</div><div class="ttdef"><b>Definition:</b> <a href="_backend_registry_8cpp_source.xhtml#l00013">BackendRegistry.cpp:13</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a44affeeb090c3c6a3062830562672e84"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a44affeeb090c3c6a3062830562672e84">&#9670;&nbsp;</a></span>IgnoreUnused()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void armnn::IgnoreUnused </td>
+ <td>(</td>
+ <td class="paramtype">Ts &amp;&amp;&#160;</td>
+ <td class="paramname"><em>...</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">14</a> of file <a class="el" href="_ignore_unused_8hpp_source.xhtml">IgnoreUnused.hpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_channel_shuffle_layer_8cpp_source.xhtml#l00051">ChannelShuffleLayer::Accept()</a>, <a class="el" href="_convert_fp32_to_fp16_layer_8cpp_source.xhtml#l00051">ConvertFp32ToFp16Layer::Accept()</a>, <a class="el" href="_debug_layer_8cpp_source.xhtml#l00056">DebugLayer::Accept()</a>, <a class="el" href="_fake_quantization_layer_8cpp_source.xhtml#l00050">FakeQuantizationLayer::Accept()</a>, <a class="el" href="_map_layer_8cpp_source.xhtml#l00045">MapLayer::Accept()</a>, <a class="el" href="_mem_copy_layer_8cpp_source.xhtml#l00053">MemCopyLayer::Accept()</a>, <a class="el" href="_mem_import_layer_8cpp_source.xhtml#l00053">MemImportLayer::Accept()</a>, <a class="el" href="_convert_bf16_to_fp32_layer_8cpp_source.xhtml#l00051">ConvertBf16ToFp32Layer::Accept()</a>, <a class="el" href="_cast_layer_8cpp_source.xhtml#l00050">CastLayer::Accept()</a>, <a class="el" href="_convert_fp32_to_bf16_layer_8cpp_source.xhtml#l00052">ConvertFp32ToBf16Layer::Accept()</a>, <a class="el" href="_convert_fp16_to_fp32_layer_8cpp_source.xhtml#l00051">ConvertFp16ToFp32Layer::Accept()</a>, <a class="el" href="_unmap_layer_8cpp_source.xhtml#l00045">UnmapLayer::Accept()</a>, <a class="el" href="_pre_compiled_layer_8cpp_source.xhtml#l00053">PreCompiledLayer::Accept()</a>, <a class="el" href="_shape_layer_8cpp_source.xhtml#l00063">ShapeLayer::Accept()</a>, <a class="el" href="_convolution3d_layer_8cpp_source.xhtml#l00128">Convolution3dLayer::Accept()</a>, <a class="el" href="_unidirectional_sequence_lstm_layer_8cpp_source.xhtml#l00312">UnidirectionalSequenceLstmLayer::Accept()</a>, <a class="el" href="_inference_test_8hpp_source.xhtml#l00098">IInferenceTestCaseProvider::AddCommandLineOptions()</a>, <a class="el" href="_addition_test_impl_8cpp_source.xhtml#l00543">AdditionAfterMaxPoolTest()</a>, <a class="el" href="_addition_test_impl_8cpp_source.xhtml#l00256">AdditionBroadcast1ElementTestImpl()</a>, <a class="el" href="_addition_test_impl_8cpp_source.xhtml#l00167">AdditionBroadcastTestImpl()</a>, <a class="el" href="_cl_backend_default_allocator_8hpp_source.xhtml#l00019">ClBackendDefaultAllocator::allocate()</a>, <a class="el" href="_default_allocator_8hpp_source.xhtml#l00022">DefaultAllocator::allocate()</a>, <a class="el" href="backends_2reference_2workloads_2_arg_min_max_8cpp_source.xhtml#l00016">ArgMinMax()</a>, <a class="el" href="_activation_test_impl_8cpp_source.xhtml#l00023">BoundedReLuTestCommon()</a>, <a class="el" href="_activation_test_impl_8cpp_source.xhtml#l00188">BoundedReLuUint8UpperAndLowerBoundTest()</a>, <a class="el" href="_network_8cpp_source.xhtml#l01362">CalculateSlotOptionForOutput()</a>, <a class="el" href="include_2armnn_2backends_2_i_tensor_handle_8hpp_source.xhtml#l00085">ITensorHandle::CanBeImported()</a>, <a class="el" href="_neon_tensor_handle_8hpp_source.xhtml#l00117">NeonTensorHandle::CanBeImported()</a>, <a class="el" href="_cl_tensor_handle_8hpp_source.xhtml#l00133">ClTensorHandle::CanBeImported()</a>, <a class="el" href="_cast_test_impl_8cpp_source.xhtml#l00011">CastTest()</a>, <a class="el" href="_parser_flatbuffers_serialize_fixture_8hpp_source.xhtml#l00153">ParserFlatbuffersSerializeFixture::CheckTensors()</a>, <a class="el" href="_inference_test_8inl_source.xhtml#l00033">ClassifierTestCase&lt; TTestCaseDatabase, TModel &gt;::ClassifierTestCase()</a>, <a class="el" href="_cl_context_control_8cpp_source.xhtml#l00030">ClContextControl::ClContextControl()</a>, <a class="el" href="_cl_convolution3d_workload_8cpp_source.xhtml#l00056">ClConvolution3dWorkload::ClConvolution3dWorkload()</a>, <a class="el" href="_space_to_batch_nd_layer_8cpp_source.xhtml#l00037">SpaceToBatchNdLayer::Clone()</a>, <a class="el" href="_space_to_depth_layer_8cpp_source.xhtml#l00038">SpaceToDepthLayer::Clone()</a>, <a class="el" href="_activation_test_impl_8cpp_source.xhtml#l01221">CompareActivationTestImpl()</a>, <a class="el" href="_addition_test_impl_8cpp_source.xhtml#l00645">CompareAdditionTest()</a>, <a class="el" href="_batch_normalization_test_impl_8cpp_source.xhtml#l00612">CompareBatchNormTest()</a>, <a class="el" href="_multiplication_test_impl_8cpp_source.xhtml#l00525">CompareMultiplicationTest()</a>, <a class="el" href="_ref_per_axis_iterator_tests_8cpp_source.xhtml#l00015">CompareVector()</a>, <a class="el" href="_concat_test_impl_8cpp_source.xhtml#l01955">ConcatDifferentInputOutputQParamTest()</a>, <a class="el" href="_concat_test_impl_8cpp_source.xhtml#l02117">ConcatTest()</a>, <a class="el" href="_concat_test_impl_8cpp_source.xhtml#l02713">ConcatUint16Test()</a>, <a class="el" href="_concat_test_impl_8cpp_source.xhtml#l02429">ConcatUint8DifferentQParamsTest()</a>, <a class="el" href="_concat_test_impl_8cpp_source.xhtml#l02575">ConcatUint8Test()</a>, <a class="el" href="_activation_test_impl_8cpp_source.xhtml#l00315">ConstantLinearActivationTestCommon()</a>, <a class="el" href="_convert_bf16_to_fp32_test_impl_8cpp_source.xhtml#l00013">ConvertBf16ToFp32Test()</a>, <a class="el" href="_convert_fp32_to_bf16_test_impl_8cpp_source.xhtml#l00013">ConvertFp32ToBf16Test()</a>, <a class="el" href="_conv2d_test_impl_8cpp_source.xhtml#l01532">Convolution2d3x3Stride2x2BFloat16SmallValueTest()</a>, <a class="el" href="_conv2d_test_impl_8cpp_source.xhtml#l01425">Convolution2d3x3Stride2x2BFloat16Test()</a>, <a class="el" href="_workload_utils_8hpp_source.xhtml#l00046">CopyTensorContentsGeneric()</a>, <a class="el" href="backends_2backends_common_2test_2_mock_backend_8cpp_source.xhtml#l00106">MockBackend::CreateBackendProfilingContext()</a>, <a class="el" href="_sample_dynamic_tensor_handle_factory_8cpp_source.xhtml#l00023">SampleDynamicTensorHandleFactory::CreateSubTensorHandle()</a>, <a class="el" href="_ref_tensor_handle_factory_8cpp_source.xhtml#l00022">RefTensorHandleFactory::CreateSubTensorHandle()</a>, <a class="el" href="_sample_dynamic_workload_factory_8hpp_source.xhtml#l00033">SampleDynamicWorkloadFactory::CreateSubTensorHandle()</a>, <a class="el" href="_ref_workload_factory_8hpp_source.xhtml#l00052">RefWorkloadFactory::CreateSubTensorHandle()</a>, <a class="el" href="_sample_dynamic_tensor_handle_factory_8cpp_source.xhtml#l00037">SampleDynamicTensorHandleFactory::CreateTensorHandle()</a>, <a class="el" href="_ref_tensor_handle_factory_8cpp_source.xhtml#l00035">RefTensorHandleFactory::CreateTensorHandle()</a>, <a class="el" href="_mock_tensor_handle_factory_8cpp_source.xhtml#l00032">MockTensorHandleFactory::CreateTensorHandle()</a>, <a class="el" href="_cl_workload_factory_8cpp_source.xhtml#l00201">ClWorkloadFactory::CreateTensorHandle()</a>, <a class="el" href="include_2armnn_2backends_2_i_tensor_handle_factory_8hpp_source.xhtml#l00063">ITensorHandleFactory::CreateTensorHandle()</a>, <a class="el" href="_ref_workload_factory_8cpp_source.xhtml#l00126">RefWorkloadFactory::CreateTensorHandle()</a>, <a class="el" href="include_2armnn_test_utils_2_mock_backend_8hpp_source.xhtml#l00067">MockWorkloadFactory::CreateTensorHandle()</a>, <a class="el" href="_output_layer_8hpp_source.xhtml#l00027">OutputLayer::CreateTensorHandles()</a>, <a class="el" href="_map_layer_8cpp_source.xhtml#l00027">MapLayer::CreateWorkload()</a>, <a class="el" href="_input_layer_8cpp_source.xhtml#l00020">InputLayer::CreateWorkload()</a>, <a class="el" href="_mem_copy_layer_8cpp_source.xhtml#l00027">MemCopyLayer::CreateWorkload()</a>, <a class="el" href="_mem_import_layer_8cpp_source.xhtml#l00027">MemImportLayer::CreateWorkload()</a>, <a class="el" href="_output_layer_8cpp_source.xhtml#l00021">OutputLayer::CreateWorkload()</a>, <a class="el" href="_merge_layer_8cpp_source.xhtml#l00019">MergeLayer::CreateWorkload()</a>, <a class="el" href="_unmap_layer_8cpp_source.xhtml#l00027">UnmapLayer::CreateWorkload()</a>, <a class="el" href="_stand_in_layer_8cpp_source.xhtml#l00017">StandInLayer::CreateWorkload()</a>, <a class="el" href="include_2armnn_test_utils_2_mock_backend_8hpp_source.xhtml#l00029">MockBackend::CreateWorkloadFactory()</a>, <a class="el" href="_i_backend_internal_8cpp_source.xhtml#l00059">IBackendInternal::CreateWorkloadFactory()</a>, <a class="el" href="_base_iterator_8hpp_source.xhtml#l00128">QASymm8Decoder::DecodeTensor()</a>, <a class="el" href="_base_iterator_8hpp_source.xhtml#l00165">QASymmS8Decoder::DecodeTensor()</a>, <a class="el" href="_base_iterator_8hpp_source.xhtml#l00202">QSymmS8Decoder::DecodeTensor()</a>, <a class="el" href="_base_iterator_8hpp_source.xhtml#l00239">QSymm16Decoder::DecodeTensor()</a>, <a class="el" href="_base_iterator_8hpp_source.xhtml#l00278">BFloat16Decoder::DecodeTensor()</a>, <a class="el" href="_base_iterator_8hpp_source.xhtml#l00316">Float16Decoder::DecodeTensor()</a>, <a class="el" href="_base_iterator_8hpp_source.xhtml#l00352">Float32Decoder::DecodeTensor()</a>, <a class="el" href="_base_iterator_8hpp_source.xhtml#l00379">ScaledInt32Decoder::DecodeTensor()</a>, <a class="el" href="_base_iterator_8hpp_source.xhtml#l00415">Int32Decoder::DecodeTensor()</a>, <a class="el" href="_base_iterator_8hpp_source.xhtml#l00447">Int32ToInt32tDecoder::DecodeTensor()</a>, <a class="el" href="_base_iterator_8hpp_source.xhtml#l00479">BooleanDecoder::DecodeTensor()</a>, <a class="el" href="_base_iterator_8hpp_source.xhtml#l00512">BooleanDecoderBool::DecodeTensor()</a>, <a class="el" href="_base_iterator_8hpp_source.xhtml#l00860">QSymm8PerAxisDecoder::DecodeTensor()</a>, <a class="el" href="backends_2reference_2workloads_2_dequantize_8cpp_source.xhtml#l00013">Dequantize()</a>, <a class="el" href="_quantize_helper_8hpp_source.xhtml#l00045">SelectiveQuantizer&lt; T, false &gt;::Dequantize()</a>, <a class="el" href="_quantize_helper_8hpp_source.xhtml#l00061">SelectiveQuantizer&lt; armnn::Half, false &gt;::Dequantize()</a>, <a class="el" href="_quantize_helper_8hpp_source.xhtml#l00077">SelectiveQuantizer&lt; armnn::BFloat16, false &gt;::Dequantize()</a>, <a class="el" href="backends_2reference_2workloads_2_detection_post_process_8cpp_source.xhtml#l00140">DetectionPostProcess()</a>, <a class="el" href="_division_test_impl_8cpp_source.xhtml#l00019">DivisionByZeroTest()</a>, <a class="el" href="_profiling_8cpp_source.xhtml#l00229">ProfilerImpl::EndEvent()</a>, <a class="el" href="_loaded_network_8cpp_source.xhtml#l00737">LoadedNetwork::EnqueueWorkload()</a>, <a class="el" href="_ref_strided_slice_workload_8cpp_source.xhtml#l00023">RefStridedSliceWorkload::ExecuteAsync()</a>, <a class="el" href="_serializer_8cpp_source.xhtml#l01961">SerializerStrategy::ExecuteStrategy()</a>, <a class="el" href="_test_input_output_layer_visitor_8hpp_source.xhtml#l00030">TestInputLayerVisitor::ExecuteStrategy()</a>, <a class="el" href="_serializer_test_utils_8cpp_source.xhtml#l00021">LayerVerifierBase::ExecuteStrategy()</a>, <a class="el" href="_strategy_base_8hpp_source.xhtml#l00033">StrategyBase&lt; NoThrowStrategy &gt;::ExecuteStrategy()</a>, <a class="el" href="_fake_quantization_layer_8cpp_source.xhtml#l00057">FakeQuantizationLayer::ExecuteStrategy()</a>, <a class="el" href="_mem_copy_layer_8cpp_source.xhtml#l00060">MemCopyLayer::ExecuteStrategy()</a>, <a class="el" href="_const_tensor_layer_visitor_8hpp_source.xhtml#l00035">TestConvolution2dLayerVisitor::ExecuteStrategy()</a>, <a class="el" href="_mem_import_layer_8cpp_source.xhtml#l00060">MemImportLayer::ExecuteStrategy()</a>, <a class="el" href="_pre_compiled_layer_8cpp_source.xhtml#l00060">PreCompiledLayer::ExecuteStrategy()</a>, <a class="el" href="_serializer_test_utils_8hpp_source.xhtml#l00061">LayerVerifierBaseWithDescriptor&lt; Descriptor &gt;::ExecuteStrategy()</a>, <a class="el" href="_test_input_output_layer_visitor_8hpp_source.xhtml#l00065">TestOutputLayerVisitor::ExecuteStrategy()</a>, <a class="el" href="_const_tensor_layer_visitor_8hpp_source.xhtml#l00088">TestDepthwiseConvolution2dLayerVisitor::ExecuteStrategy()</a>, <a class="el" href="_serializer_test_utils_8hpp_source.xhtml#l00119">LayerVerifierBaseWithDescriptorAndConstants&lt; Descriptor &gt;::ExecuteStrategy()</a>, <a class="el" href="_const_tensor_layer_visitor_8hpp_source.xhtml#l00137">TestFullyConnectedLayerVistor::ExecuteStrategy()</a>, <a class="el" href="_const_tensor_layer_visitor_8hpp_source.xhtml#l00183">TestBatchNormalizationLayerVisitor::ExecuteStrategy()</a>, <a class="el" href="_const_tensor_layer_visitor_8hpp_source.xhtml#l00230">TestConstantLayerVisitor::ExecuteStrategy()</a>, <a class="el" href="_const_tensor_layer_visitor_8hpp_source.xhtml#l00355">TestLstmLayerVisitor::ExecuteStrategy()</a>, <a class="el" href="_const_tensor_layer_visitor_8hpp_source.xhtml#l00396">TestQLstmLayerVisitor::ExecuteStrategy()</a>, <a class="el" href="_const_tensor_layer_visitor_8hpp_source.xhtml#l00437">TestQuantizedLstmLayerVisitor::ExecuteStrategy()</a>, <a class="el" href="_execution_frame_8cpp_source.xhtml#l00014">ExecutionFrame::ExecuteWorkloads()</a>, <a class="el" href="_gatord_mock_main_8cpp_source.xhtml#l00020">exit_capture()</a>, <a class="el" href="_fake_quantization_test_impl_8cpp_source.xhtml#l00016">FakeQuantizationTest()</a>, <a class="el" href="_layer_support_common_8hpp_source.xhtml#l00062">FalseFunc()</a>, <a class="el" href="_layer_support_common_8hpp_source.xhtml#l00070">FalseFuncF16()</a>, <a class="el" href="_layer_support_common_8hpp_source.xhtml#l00078">FalseFuncF32()</a>, <a class="el" href="_layer_support_common_8hpp_source.xhtml#l00094">FalseFuncI32()</a>, <a class="el" href="_layer_support_common_8hpp_source.xhtml#l00086">FalseFuncU8()</a>, <a class="el" href="_layer_support_common_8hpp_source.xhtml#l00110">FalseInputFuncF16()</a>, <a class="el" href="_layer_support_common_8hpp_source.xhtml#l00102">FalseInputFuncF32()</a>, <a class="el" href="_layer_support_common_8hpp_source.xhtml#l00126">FalseOutputFuncF16()</a>, <a class="el" href="_layer_support_common_8hpp_source.xhtml#l00118">FalseOutputFuncF32()</a>, <a class="el" href="backends_2reference_2workloads_2_gather_8cpp_source.xhtml#l00017">Gather()</a>, <a class="el" href="_cl_import_tensor_handle_factory_8cpp_source.xhtml#l00124">ClImportTensorHandleFactory::GetCapabilities()</a>, <a class="el" href="_neon_tensor_handle_factory_8cpp_source.xhtml#l00120">NeonTensorHandleFactory::GetCapabilities()</a>, <a class="el" href="include_2armnn_2backends_2_i_tensor_handle_factory_8hpp_source.xhtml#l00089">ITensorHandleFactory::GetCapabilities()</a>, <a class="el" href="_profiling_mocks_8hpp_source.xhtml#l00615">MockCounterDirectory::GetCounter()</a>, <a class="el" href="_profiling_mocks_8hpp_source.xhtml#l00609">MockCounterDirectory::GetCounterSet()</a>, <a class="el" href="_profiling_mocks_8hpp_source.xhtml#l00603">MockCounterDirectory::GetDevice()</a>, <a class="el" href="_serializer_8cpp_source.xhtml#l00086">armnnSerializer::GetFlatBufferArgMinMaxFunction()</a>, <a class="el" href="_inference_test_image_8cpp_source.xhtml#l00310">GetImageDataInArmNnLayoutAsNormalizedFloats()</a>, <a class="el" href="_default_allocator_8hpp_source.xhtml#l00038">DefaultAllocator::GetMemoryRegionAtOffset()</a>, <a class="el" href="_cl_backend_default_allocator_8hpp_source.xhtml#l00041">ClBackendDefaultAllocator::GetMemoryRegionAtOffset()</a>, <a class="el" href="_i_custom_allocator_8hpp_source.xhtml#l00046">ICustomAllocator::GetMemoryRegionAtOffset()</a>, <a class="el" href="_deserializer_8cpp_source.xhtml#l00883">IDeserializer::DeserializerImpl::GetNetworkInputBindingInfo()</a>, <a class="el" href="_deserializer_8cpp_source.xhtml#l00899">IDeserializer::DeserializerImpl::GetNetworkOutputBindingInfo()</a>, <a class="el" href="_deserializer_8cpp_source.xhtml#l02690">IDeserializer::DeserializerImpl::GetNormalizationDescriptor()</a>, <a class="el" href="_loaded_network_8cpp_source.xhtml#l00602">LoadedNetwork::GetOutputTensorInfo()</a>, <a class="el" href="_deserializer_8cpp_source.xhtml#l02136">IDeserializer::DeserializerImpl::GetPooling2dDescriptor()</a>, <a class="el" href="_deserializer_8cpp_source.xhtml#l02231">IDeserializer::DeserializerImpl::GetPooling3dDescriptor()</a>, <a class="el" href="_profiling_mocks_8hpp_source.xhtml#l00166">MockProfilingConnectionFactory::GetProfilingConnection()</a>, <a class="el" href="include_2armnn_2backends_2_i_tensor_handle_8hpp_source.xhtml#l00075">ITensorHandle::Import()</a>, <a class="el" href="_cl_tensor_handle_8hpp_source.xhtml#l00122">ClTensorHandle::Import()</a>, <a class="el" href="_shape_layer_8cpp_source.xhtml#l00052">ShapeLayer::InferOutputShapes()</a>, <a class="el" href="_slice_layer_8cpp_source.xhtml#l00052">SliceLayer::InferOutputShapes()</a>, <a class="el" href="_stack_layer_8cpp_source.xhtml#l00035">StackLayer::InferOutputShapes()</a>, <a class="el" href="_stand_in_layer_8cpp_source.xhtml#l00031">StandInLayer::InferOutputShapes()</a>, <a class="el" href="_reshape_layer_8cpp_source.xhtml#l00035">ReshapeLayer::InferOutputShapes()</a>, <a class="el" href="_splitter_layer_8cpp_source.xhtml#l00202">SplitterLayer::InferOutputShapes()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00566">NeonLayerSupport::IsActivationSupported()</a>, <a class="el" href="_mock_import_layer_support_8hpp_source.xhtml#l00041">MockImportLayerSupport::IsAdditionSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00649">RefLayerSupport::IsArgMinMaxSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00682">RefLayerSupport::IsBatchNormalizationSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00729">RefLayerSupport::IsBatchToSpaceNdSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00809">RefLayerSupport::IsChannelShuffleSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00842">RefLayerSupport::IsComparisonSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00874">RefLayerSupport::IsConcatSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00721">NeonLayerSupport::IsConvertBf16ToFp32Supported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00731">NeonLayerSupport::IsConvertFp16ToFp32Supported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00741">NeonLayerSupport::IsConvertFp32ToBf16Supported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00751">NeonLayerSupport::IsConvertFp32ToFp16Supported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00996">RefLayerSupport::IsConvolution2dSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01078">RefLayerSupport::IsConvolution3dSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01178">RefLayerSupport::IsDepthToSpaceSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01208">RefLayerSupport::IsDepthwiseConvolutionSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01314">RefLayerSupport::IsDetectionPostProcessSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01395">RefLayerSupport::IsElementwiseUnarySupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01447">RefLayerSupport::IsFakeQuantizationSupported()</a>, <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00947">ClLayerSupport::IsFillSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00930">NeonLayerSupport::IsFillSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01465">RefLayerSupport::IsFillSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00942">NeonLayerSupport::IsFloorSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01490">RefLayerSupport::IsFloorSupported()</a>, <a class="el" href="_mock_import_layer_support_8hpp_source.xhtml#l00053">MockImportLayerSupport::IsInputSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01637">RefLayerSupport::IsInstanceNormalizationSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01669">RefLayerSupport::IsL2NormalizationSupported()</a>, <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>, <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01030">ClLayerSupport::IsLogicalBinarySupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01704">RefLayerSupport::IsLogicalBinarySupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01729">RefLayerSupport::IsLogSoftmaxSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01756">RefLayerSupport::IsLstmSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02074">RefLayerSupport::IsNormalizationSupported()</a>, <a class="el" href="_profiling_state_machine_8hpp_source.xhtml#l00036">ProfilingStateMachine::IsOneOfStates()</a>, <a class="el" href="_mock_import_layer_support_8hpp_source.xhtml#l00061">MockImportLayerSupport::IsOutputSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02113">RefLayerSupport::IsPadSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02144">RefLayerSupport::IsPermuteSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02175">RefLayerSupport::IsPooling2dSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02206">RefLayerSupport::IsPooling3dSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02238">RefLayerSupport::IsQLstmSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02298">RefLayerSupport::IsRankSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02313">RefLayerSupport::IsReduceSupported()</a>, <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01267">ClLayerSupport::IsReshapeSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01262">NeonLayerSupport::IsReshapeSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02343">RefLayerSupport::IsReshapeSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02367">RefLayerSupport::IsResizeSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02396">RefLayerSupport::IsShapeSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02414">RefLayerSupport::IsSliceSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02443">RefLayerSupport::IsSoftmaxSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02473">RefLayerSupport::IsSpaceToBatchNdSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02502">RefLayerSupport::IsSpaceToDepthSupported()</a>, <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01324">ClLayerSupport::IsSplitterSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01330">NeonLayerSupport::IsSplitterSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02533">RefLayerSupport::IsSplitterSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02564">RefLayerSupport::IsStackSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02598">RefLayerSupport::IsStridedSliceSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02700">RefLayerSupport::IsTransposeConvolution2dSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02770">RefLayerSupport::IsTransposeSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02801">RefLayerSupport::IsUnidirectionalSequenceLstmSupported()</a>, <a class="el" href="_layer_8cpp_source.xhtml#l00194">Layer::Layer()</a>, <a class="el" href="_log_softmax_8cpp_source.xhtml#l00029">LogSoftmax()</a>, <a class="el" href="_cl_import_tensor_handle_8hpp_source.xhtml#l00052">ClImportTensorHandle::Map()</a>, <a class="el" href="_cl_backend_8hpp_source.xhtml#l00247">ClBackend::ClBackendCustomAllocatorMemoryRegion::map()</a>, <a class="el" href="_cl_import_tensor_handle_8hpp_source.xhtml#l00401">ClImportSubTensorHandle::Map()</a>, <a class="el" href="_maximum_test_impl_8cpp_source.xhtml#l00019">MaximumSimpleTest()</a>, <a class="el" href="_minimum_test_impl_8cpp_source.xhtml#l00019">MinimumBroadcast1ElementTest1()</a>, <a class="el" href="_mirror_pad_test_impl_8cpp_source.xhtml#l00020">MirrorPad2dTestCommon()</a>, <a class="el" href="_mirror_pad_test_impl_8cpp_source.xhtml#l00066">MirrorPad3dTestCommon()</a>, <a class="el" href="_mirror_pad_test_impl_8cpp_source.xhtml#l00111">MirrorPad4dTestCommon()</a>, <a class="el" href="_neon_convolution3d_workload_8cpp_source.xhtml#l00056">NeonConvolution3dWorkload::NeonConvolution3dWorkload()</a>, <a class="el" href="_stub_command_handler_8hpp_source.xhtml#l00033">StubCommandHandler::operator()()</a>, <a class="el" href="_profiling_tests_8hpp_source.xhtml#l00184">TestFunctorA::operator()()</a>, <a class="el" href="_tf_lite_parser_8cpp_source.xhtml#l01861">TfLiteParserImpl::OutputShapeOfSqueeze()</a>, <a class="el" href="_pad_test_impl_8cpp_source.xhtml#l00020">Pad2dTestCommon()</a>, <a class="el" href="_pad_test_impl_8cpp_source.xhtml#l00096">Pad3dTestCommon()</a>, <a class="el" href="_pad_test_impl_8cpp_source.xhtml#l00183">Pad4dTestCommon()</a>, <a class="el" href="_pad_test_impl_8cpp_source.xhtml#l00425">PadQAsymmTestCommon()</a>, <a class="el" href="_concat_test_impl_8cpp_source.xhtml#l00173">PermuteInputsForConcat()</a>, <a class="el" href="_concat_test_impl_8cpp_source.xhtml#l00121">PermuteTensorData()</a>, <a class="el" href="_ref_convolution3d_workload_8cpp_source.xhtml#l00035">RefConvolution3dWorkload::PostAllocationConfigure()</a>, <a class="el" href="_prelu_test_impl_8hpp_source.xhtml#l00024">PreluTest()</a>, <a class="el" href="_inference_test_8hpp_source.xhtml#l00102">IInferenceTestCaseProvider::ProcessCommandLineOptions()</a>, <a class="el" href="_yolo_inference_test_8hpp_source.xhtml#l00032">YoloTestCase&lt; Model &gt;::ProcessResult()</a>, <a class="el" href="_quantize_helper_8hpp_source.xhtml#l00039">SelectiveQuantizer&lt; T, false &gt;::Quantize()</a>, <a class="el" href="_quantize_helper_8hpp_source.xhtml#l00055">SelectiveQuantizer&lt; armnn::Half, false &gt;::Quantize()</a>, <a class="el" href="_quantize_helper_8hpp_source.xhtml#l00071">SelectiveQuantizer&lt; armnn::BFloat16, false &gt;::Quantize()</a>, <a class="el" href="_rank_test_impl_8cpp_source.xhtml#l00015">RankTest()</a>, <a class="el" href="_profiling_mocks_8hpp_source.xhtml#l00132">MockProfilingConnection::ReadPacket()</a>, <a class="el" href="_profiling_tests_8hpp_source.xhtml#l00142">TestProfilingConnectionArmnnError::ReadPacket()</a>, <a class="el" href="_profiling_tests_8hpp_source.xhtml#l00161">TestProfilingConnectionBadAckPacket::ReadPacket()</a>, <a class="el" href="_counter_directory_8cpp_source.xhtml#l00181">CounterDirectory::RegisterCounter()</a>, <a class="el" href="_profiling_mocks_8hpp_source.xhtml#l00508">MockCounterDirectory::RegisterCounter()</a>, <a class="el" href="include_2armnn_2backends_2_workload_8hpp_source.xhtml#l00063">BaseWorkload&lt; Convolution2dQueueDescriptor &gt;::ReplaceInputTensorHandle()</a>, <a class="el" href="include_2armnn_2backends_2_workload_8hpp_source.xhtml#l00070">BaseWorkload&lt; Convolution2dQueueDescriptor &gt;::ReplaceOutputTensorHandle()</a>, <a class="el" href="_optimize_inverse_conversions_8hpp_source.xhtml#l00021">OptimizeInverseConversionsImpl::Run()</a>, <a class="el" href="_redirect_members_to_constant_inputs_8hpp_source.xhtml#l00023">RedirectMembersToConstantInputsImpl::Run()</a>, <a class="el" href="_optimize_inverse_permutes_8hpp_source.xhtml#l00023">OptimizeInversePermutesImpl&lt; PermuteType &gt;::Run()</a>, <a class="el" href="_squash_equal_siblings_8hpp_source.xhtml#l00025">SquashEqualSiblingsImpl&lt; Comparable &gt;::Run()</a>, <a class="el" href="_fuse_batch_norm_8hpp_source.xhtml#l00027">FuseBatchNorm&lt; ConvLayer, ArmnnType, T &gt;::Run()</a>, <a class="el" href="_convert_constants_8hpp_source.xhtml#l00114">ConvertConstants&lt; Converter, Predicate &gt;::Run()</a>, <a class="el" href="_profiling_mocks_8hpp_source.xhtml#l00405">MockSendCounterPacket::SendCounterDirectoryPacket()</a>, <a class="el" href="_profiling_mocks_8hpp_source.xhtml#l00416">MockSendCounterPacket::SendPeriodicCounterCapturePacket()</a>, <a class="el" href="_profiling_mocks_8hpp_source.xhtml#l00428">MockSendCounterPacket::SendPeriodicCounterSelectionPacket()</a>, <a class="el" href="_i_local_packet_handler_8hpp_source.xhtml#l00069">ILocalPacketHandler::SetConnection()</a>, <a class="el" href="_logging_8cpp_source.xhtml#l00073">SetLogFilter()</a>, <a class="el" href="_cl_import_tensor_handle_8hpp_source.xhtml#l00067">ClImportTensorHandle::SetMemoryGroup()</a>, <a class="el" href="_cl_import_tensor_handle_8hpp_source.xhtml#l00415">ClImportSubTensorHandle::SetMemoryGroup()</a>, <a class="el" href="_shape_test_impl_8cpp_source.xhtml#l00015">ShapeTest()</a>, <a class="el" href="_activation_test_impl_8cpp_source.xhtml#l00408">SimpleActivationTest()</a>, <a class="el" href="_convert_fp16_to_fp32_test_impl_8cpp_source.xhtml#l00016">SimpleConvertFp16ToFp32Test()</a>, <a class="el" href="_convert_fp32_to_fp16_test_impl_8cpp_source.xhtml#l00014">SimpleConvertFp32ToFp16Test()</a>, <a class="el" href="_conv2d_test_impl_8cpp_source.xhtml#l00596">SimpleConvolution2d3x3NhwcTestCommon()</a>, <a class="el" href="_conv2d_test_impl_8cpp_source.xhtml#l00651">SimpleConvolution2d3x3Stride2x2TestCommon()</a>, <a class="el" href="_conv2d_test_impl_8cpp_source.xhtml#l00368">SimpleConvolution2dNhwcTestImpl()</a>, <a class="el" href="_conv2d_test_impl_8cpp_source.xhtml#l00194">SimpleConvolution2dTestImpl()</a>, <a class="el" href="_fill_test_impl_8cpp_source.xhtml#l00015">SimpleFillTest()</a>, <a class="el" href="_floor_test_impl_8cpp_source.xhtml#l00015">SimpleFloorTest()</a>, <a class="el" href="_permute_test_impl_8hpp_source.xhtml#l00019">SimplePermuteTestImpl()</a>, <a class="el" href="_transpose_test_impl_8hpp_source.xhtml#l00020">SimpleTransposeTestImpl()</a>, <a class="el" href="backends_2reference_2workloads_2_slice_8cpp_source.xhtml#l00014">Slice()</a>, <a class="el" href="_activation_test_impl_8cpp_source.xhtml#l00844">SqrtNNTest()</a>, <a class="el" href="_open_cl_timer_8cpp_source.xhtml#l00021">OpenClTimer::Start()</a>, <a class="el" href="_memory_manager_8cpp_source.xhtml#l00013">MemoryManager::StoreMemToAllocate()</a>, <a class="el" href="_graph_8cpp_source.xhtml#l00444">Graph::SubstituteSubgraph()</a>, <a class="el" href="_debug_callback_test_8cpp_source.xhtml#l00014">TEST_SUITE()</a>, <a class="el" href="_test_dynamic_backend_8cpp_source.xhtml#l00012">TestDynamicBackendId()</a>, <a class="el" href="_layer_support_common_8hpp_source.xhtml#l00054">TrueFunc()</a>, <a class="el" href="_unidirectional_sequence_lstm_test_impl_8cpp_source.xhtml#l01672">UnidirectionalSequenceLstmInt8WithCifgWithPeepholeNoProjectionTest()</a>, <a class="el" href="_unidirectional_sequence_lstm_test_impl_8cpp_source.xhtml#l01317">UnidirectionalSequenceLstmLayerInt8NoCifgWithPeepholeWithProjectionTest()</a>, <a class="el" href="_unidirectional_sequence_lstm_test_impl_8cpp_source.xhtml#l01480">UnidirectionalSequenceLstmLayerInt8NoCifgWithPeepholeWithProjectionWithLayerNormTest()</a>, <a class="el" href="_unidirectional_sequence_lstm_test_impl_8cpp_source.xhtml#l01037">UnidirectionalSequenceLstmLayerInt8Test()</a>, <a class="el" href="_unidirectional_sequence_lstm_test_impl_8cpp_source.xhtml#l01177">UnidirectionalSequenceLstmLayerInt8TimeMajorTest()</a>, <a class="el" href="_unidirectional_sequence_lstm_test_impl_8cpp_source.xhtml#l00414">UnidirectionalSequenceLstmLayerNoCifgWithPeepholeWithProjectionTest()</a>, <a class="el" href="_unidirectional_sequence_lstm_test_impl_8cpp_source.xhtml#l00650">UnidirectionalSequenceLstmLayerNoCifgWithPeepholeWithProjectionWithLayerNormTest()</a>, <a class="el" href="_unidirectional_sequence_lstm_test_impl_8cpp_source.xhtml#l00875">UnidirectionalSequenceLstmWithCifgWithPeepholeNoProjectionTest()</a>, <a class="el" href="_cl_backend_8hpp_source.xhtml#l00276">ClBackend::ClBackendCustomAllocatorMemoryRegion::unmap()</a>, <a class="el" href="_cl_backend_8hpp_source.xhtml#l00098">ClBackend::UseCustomMemoryAllocator()</a>, <a class="el" href="_i_backend_internal_8hpp_source.xhtml#l00183">IBackendInternal::UseCustomMemoryAllocator()</a>, <a class="el" href="_profiling_mocks_8hpp_source.xhtml#l00701">MockProfilingServiceStatus::WaitForProfilingServiceActivation()</a>, <a class="el" href="_working_mem_handle_8cpp_source.xhtml#l00018">WorkingMemHandle::WorkingMemHandle()</a>, <a class="el" href="_profiling_tests_8hpp_source.xhtml#l00080">TestProfilingConnectionBase::WritePacket()</a>, <a class="el" href="_graph_8hpp_source.xhtml#l00378">Graph::LayerInGraph&lt; InputLayer &gt;::~LayerInGraph()</a>, <a class="el" href="_graph_8hpp_source.xhtml#l00404">Graph::LayerInGraph&lt; OutputLayer &gt;::~LayerInGraph()</a>, and <a class="el" href="_profiling_8hpp_source.xhtml#l00152">ScopedProfilingEvent::~ScopedProfilingEvent()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;{}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a0eec4a463a166fad55307d9f26ba3a68"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0eec4a463a166fad55307d9f26ba3a68">&#9670;&nbsp;</a></span>InitializeArmComputeClTensorData()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void armnn::InitializeArmComputeClTensorData </td>
+ <td>(</td>
+ <td class="paramtype">arm_compute::CLTensor &amp;&#160;</td>
+ <td class="paramname"><em>clTensor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_const_tensor_handle.xhtml">ConstTensorHandle</a> *&#160;</td>
+ <td class="paramname"><em>handle</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_workload_utils_8hpp_source.xhtml#l00115">115</a> of file <a class="el" href="_cl_workload_utils_8hpp_source.xhtml">ClWorkloadUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>.</p>
+<div class="fragment"><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;{</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(handle);</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; armcomputetensorutils::InitialiseArmComputeTensorEmpty(clTensor);</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keywordflow">switch</span>(handle-&gt;GetTensorInfo().GetDataType())</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; {</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keywordflow">case</span> DataType::Float16:</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <a class="code" href="namespacearmnn.xhtml#a73447f827b995cf90d4029151514b4ba">CopyArmComputeClTensorData</a>(clTensor, handle-&gt;GetConstTensor&lt;<a class="code" href="namespacearmnn.xhtml#a0f38fa92b2468d5378258a2b074c1a31">armnn::Half</a>&gt;());</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keywordflow">case</span> DataType::Float32:</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <a class="code" href="namespacearmnn.xhtml#a73447f827b995cf90d4029151514b4ba">CopyArmComputeClTensorData</a>(clTensor, handle-&gt;GetConstTensor&lt;<span class="keywordtype">float</span>&gt;());</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmU8:</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <a class="code" href="namespacearmnn.xhtml#a73447f827b995cf90d4029151514b4ba">CopyArmComputeClTensorData</a>(clTensor, handle-&gt;GetConstTensor&lt;uint8_t&gt;());</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmS8:</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS8:</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <a class="code" href="namespacearmnn.xhtml#a73447f827b995cf90d4029151514b4ba">CopyArmComputeClTensorData</a>(clTensor, handle-&gt;GetConstTensor&lt;int8_t&gt;());</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS16:</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <a class="code" href="namespacearmnn.xhtml#a73447f827b995cf90d4029151514b4ba">CopyArmComputeClTensorData</a>(clTensor, handle-&gt;GetConstTensor&lt;int16_t&gt;());</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keywordflow">case</span> DataType::Signed32:</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <a class="code" href="namespacearmnn.xhtml#a73447f827b995cf90d4029151514b4ba">CopyArmComputeClTensorData</a>(clTensor, handle-&gt;GetConstTensor&lt;int32_t&gt;());</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;Unexpected tensor type.&quot;</span>);</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; }</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;};</div><div class="ttc" id="_assert_8hpp_xhtml_a91c4dfde57907d7698c7531785690a7f"><div class="ttname"><a href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a></div><div class="ttdeci">#define ARMNN_ASSERT_MSG(COND, MSG)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00015">Assert.hpp:15</a></div></div>
+<div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a73447f827b995cf90d4029151514b4ba"><div class="ttname"><a href="namespacearmnn.xhtml#a73447f827b995cf90d4029151514b4ba">armnn::CopyArmComputeClTensorData</a></div><div class="ttdeci">void CopyArmComputeClTensorData(arm_compute::CLTensor &amp;dstTensor, const T *srcData)</div><div class="ttdef"><b>Definition:</b> <a href="_cl_workload_utils_8hpp_source.xhtml#l00055">ClWorkloadUtils.hpp:55</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a0f38fa92b2468d5378258a2b074c1a31"><div class="ttname"><a href="namespacearmnn.xhtml#a0f38fa92b2468d5378258a2b074c1a31">armnn::Half</a></div><div class="ttdeci">half_float::half Half</div><div class="ttdef"><b>Definition:</b> <a href="_half_8hpp_source.xhtml#l00018">Half.hpp:18</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="acf8e1f43fc13cf7603564cc15743fce2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acf8e1f43fc13cf7603564cc15743fce2">&#9670;&nbsp;</a></span>InitializeArmComputeTensorData()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void armnn::InitializeArmComputeTensorData </td>
+ <td>(</td>
+ <td class="paramtype">arm_compute::Tensor &amp;&#160;</td>
+ <td class="paramname"><em>tensor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_const_tensor_handle.xhtml">ConstTensorHandle</a> *&#160;</td>
+ <td class="paramname"><em>handle</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_workload_utils_8hpp_source.xhtml#l00060">60</a> of file <a class="el" href="_neon_workload_utils_8hpp_source.xhtml">NeonWorkloadUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>, <a class="el" href="_assert_8hpp_source.xhtml#l00015">ARMNN_ASSERT_MSG</a>, <a class="el" href="_neon_workload_utils_8hpp_source.xhtml#l00054">CopyArmComputeTensorData()</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">Float16</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">Float32</a>, <a class="el" href="include_2armnn_2backends_2_tensor_handle_8hpp_source.xhtml#l00028">ConstTensorHandle::GetConstTensor()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00198">TensorInfo::GetDataType()</a>, <a class="el" href="include_2armnn_2backends_2_tensor_handle_8hpp_source.xhtml#l00040">ConstTensorHandle::GetTensorInfo()</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">QAsymmS8</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">QAsymmU8</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">QSymmS16</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">QSymmS8</a>, and <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">Signed32</a>.</p>
+<div class="fragment"><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;{</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(handle);</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordflow">switch</span>(handle-&gt;GetTensorInfo().GetDataType())</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; {</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">case</span> DataType::Float16:</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, handle-&gt;GetConstTensor&lt;<a class="code" href="namespacearmnn.xhtml#a0f38fa92b2468d5378258a2b074c1a31">armnn::Half</a>&gt;());</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordflow">case</span> DataType::Float32:</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, handle-&gt;GetConstTensor&lt;<span class="keywordtype">float</span>&gt;());</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmU8:</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, handle-&gt;GetConstTensor&lt;uint8_t&gt;());</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS8:</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmS8:</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, handle-&gt;GetConstTensor&lt;int8_t&gt;());</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">case</span> DataType::Signed32:</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, handle-&gt;GetConstTensor&lt;int32_t&gt;());</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS16:</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, handle-&gt;GetConstTensor&lt;int16_t&gt;());</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;Unexpected tensor type.&quot;</span>);</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; }</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;};</div><div class="ttc" id="_assert_8hpp_xhtml_a91c4dfde57907d7698c7531785690a7f"><div class="ttname"><a href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a></div><div class="ttdeci">#define ARMNN_ASSERT_MSG(COND, MSG)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00015">Assert.hpp:15</a></div></div>
+<div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a1351e01f9fb983937caf79e353142b41"><div class="ttname"><a href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">armnn::CopyArmComputeTensorData</a></div><div class="ttdeci">void CopyArmComputeTensorData(arm_compute::Tensor &amp;dstTensor, const T *srcData)</div><div class="ttdef"><b>Definition:</b> <a href="_neon_workload_utils_8hpp_source.xhtml#l00054">NeonWorkloadUtils.hpp:54</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a0f38fa92b2468d5378258a2b074c1a31"><div class="ttname"><a href="namespacearmnn.xhtml#a0f38fa92b2468d5378258a2b074c1a31">armnn::Half</a></div><div class="ttdeci">half_float::half Half</div><div class="ttdef"><b>Definition:</b> <a href="_half_8hpp_source.xhtml#l00018">Half.hpp:18</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="adf69fa0e439ddb632462b42253d67b6a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adf69fa0e439ddb632462b42253d67b6a">&#9670;&nbsp;</a></span>InsertConvertBf16ToFp32LayersBefore()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::vector&lt; <a class="el" href="classarmnn_1_1_convert_bf16_to_fp32_layer.xhtml">ConvertBf16ToFp32Layer</a> * &gt; InsertConvertBf16ToFp32LayersBefore </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_graph.xhtml">Graph</a> &amp;&#160;</td>
+ <td class="paramname"><em>graph</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_layer.xhtml">Layer</a> &amp;&#160;</td>
+ <td class="paramname"><em>layer</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">bool&#160;</td>
+ <td class="paramname"><em>expectCorrectInputType</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_network_utils_8cpp_source.xhtml#l00051">51</a> of file <a class="el" href="_network_utils_8cpp_source.xhtml">NetworkUtils.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_layer_8hpp_source.xhtml#l00246">Layer::BeginInputSlots()</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">BFloat16</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00247">Layer::EndInputSlots()</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">Float32</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00056">InputSlot::GetConnectedOutputSlot()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00198">TensorInfo::GetDataType()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00321">Layer::GetInputSlot()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00316">Layer::GetName()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00318">Layer::GetNumInputSlots()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00323">Layer::GetOutputSlot()</a>, <a class="el" href="_layer_8cpp_source.xhtml#l00066">OutputSlot::GetTensorInfo()</a>, <a class="el" href="_graph_8hpp_source.xhtml#l00434">Graph::InsertNewLayer()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00199">TensorInfo::SetDataType()</a>, and <a class="el" href="_layer_8cpp_source.xhtml#l00061">OutputSlot::SetTensorInfo()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.xhtml#l00670">AttemptBackendAssignment()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;{</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; std::vector&lt;ConvertBf16ToFp32Layer*&gt; convertLayers;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; convertLayers.reserve(layer.GetNumInputSlots());</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="comment">// Insert a ConvertBf16ToFp32Layer before each input slot</span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; inputSlot = layer.BeginInputSlots(); inputSlot != layer.EndInputSlots(); ++inputSlot)</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; {</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordtype">bool</span> allowInsert = <span class="keyword">true</span>;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">if</span> (expectCorrectInputType)</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; {</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="comment">// Only insert ConvertBf16ToFp32Layer before BF16 input slots</span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; OutputSlot* connectedOutputSlot = inputSlot-&gt;GetConnectedOutputSlot();</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; allowInsert =</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; connectedOutputSlot &amp;&amp; connectedOutputSlot-&gt;GetTensorInfo().GetDataType() == DataType::BFloat16;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; }</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordflow">if</span> (allowInsert)</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; {</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keyword">const</span> std::string name =</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; std::string(<span class="stringliteral">&quot;convert_bf16_to_fp32-&quot;</span> + std::to_string(inputSlot-&gt;GetSlotIndex()) + <span class="stringliteral">&quot;-&quot;</span>) +</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; layer.GetName();</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; ConvertBf16ToFp32Layer* convertLayer =</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; graph.InsertNewLayer&lt;ConvertBf16ToFp32Layer&gt;(*inputSlot, name.c_str());</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; TensorInfo convertInfo = convertLayer-&gt;GetInputSlot(0).GetConnectedOutputSlot()-&gt;GetTensorInfo();</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; convertInfo.SetDataType(DataType::Float32);</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; convertLayer-&gt;GetOutputSlot().SetTensorInfo(convertInfo);</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; convertLayers.emplace_back(convertLayer);</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; }</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; }</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordflow">return</span> convertLayers;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="ad31c56533e4f9f9f51719599fbfcf7bb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad31c56533e4f9f9f51719599fbfcf7bb">&#9670;&nbsp;</a></span>InsertConvertFp16ToFp32LayersBefore()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::vector&lt; <a class="el" href="classarmnn_1_1_convert_fp16_to_fp32_layer.xhtml">ConvertFp16ToFp32Layer</a> * &gt; InsertConvertFp16ToFp32LayersBefore </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_graph.xhtml">Graph</a> &amp;&#160;</td>
+ <td class="paramname"><em>graph</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_layer.xhtml">Layer</a> &amp;&#160;</td>
+ <td class="paramname"><em>layer</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">bool&#160;</td>
+ <td class="paramname"><em>expectCorrectInputType</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_network_utils_8cpp_source.xhtml#l00129">129</a> of file <a class="el" href="_network_utils_8cpp_source.xhtml">NetworkUtils.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_layer_8hpp_source.xhtml#l00246">Layer::BeginInputSlots()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00247">Layer::EndInputSlots()</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">Float16</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">Float32</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00056">InputSlot::GetConnectedOutputSlot()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00198">TensorInfo::GetDataType()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00321">Layer::GetInputSlot()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00316">Layer::GetName()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00318">Layer::GetNumInputSlots()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00323">Layer::GetOutputSlot()</a>, <a class="el" href="_layer_8cpp_source.xhtml#l00066">OutputSlot::GetTensorInfo()</a>, <a class="el" href="_graph_8hpp_source.xhtml#l00434">Graph::InsertNewLayer()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00199">TensorInfo::SetDataType()</a>, and <a class="el" href="_layer_8cpp_source.xhtml#l00061">OutputSlot::SetTensorInfo()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.xhtml#l00670">AttemptBackendAssignment()</a>, <a class="el" href="_convert_fp32_network_to_fp16_8hpp_source.xhtml#l00018">ConvertFp32NetworkToFp16Impl::Run()</a>, and <a class="el" href="_optimizer_tests_8cpp_source.xhtml#l00306">TEST_SUITE()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;{</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; std::vector&lt;ConvertFp16ToFp32Layer*&gt; convertLayers;</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; convertLayers.reserve(layer.GetNumInputSlots());</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="comment">// Insert a ConvertFp16ToFp32Layer before each input slot</span></div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; inputSlot = layer.BeginInputSlots(); inputSlot != layer.EndInputSlots(); ++inputSlot)</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; {</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keywordtype">bool</span> allowInsert = <span class="keyword">true</span>;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keywordflow">if</span> (expectCorrectInputType)</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; {</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="comment">// Only insert ConvertFp16ToFp32Layer before FP16 input slots</span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; OutputSlot* connectedOutputSlot = inputSlot-&gt;GetConnectedOutputSlot();</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; allowInsert =</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; connectedOutputSlot &amp;&amp; connectedOutputSlot-&gt;GetTensorInfo().GetDataType() == DataType::Float16;</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; }</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordflow">if</span> (allowInsert)</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; {</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keyword">const</span> std::string name =</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; std::string(<span class="stringliteral">&quot;convert_fp16_to_fp32-&quot;</span> + std::to_string(inputSlot-&gt;GetSlotIndex()) + <span class="stringliteral">&quot;-&quot;</span>) +</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; layer.GetName();</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; ConvertFp16ToFp32Layer* convertLayer =</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; graph.InsertNewLayer&lt;ConvertFp16ToFp32Layer&gt;(*inputSlot, name.c_str());</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; TensorInfo convertInfo = convertLayer-&gt;GetInputSlot(0).GetConnectedOutputSlot()-&gt;GetTensorInfo();</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; convertInfo.SetDataType(DataType::Float32);</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; convertLayer-&gt;GetOutputSlot().SetTensorInfo(convertInfo);</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; convertLayers.emplace_back(convertLayer);</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; }</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; }</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="keywordflow">return</span> convertLayers;</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a8ae358a041b4adc33577e8b4c07b8d23"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8ae358a041b4adc33577e8b4c07b8d23">&#9670;&nbsp;</a></span>InsertConvertFp32ToBf16LayersAfter()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::vector&lt; <a class="el" href="classarmnn_1_1_convert_fp32_to_bf16_layer.xhtml">ConvertFp32ToBf16Layer</a> * &gt; InsertConvertFp32ToBf16LayersAfter </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_graph.xhtml">Graph</a> &amp;&#160;</td>
+ <td class="paramname"><em>graph</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_layer.xhtml">Layer</a> &amp;&#160;</td>
+ <td class="paramname"><em>layer</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_network_utils_8cpp_source.xhtml#l00168">168</a> of file <a class="el" href="_network_utils_8cpp_source.xhtml">NetworkUtils.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">BFloat16</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">Float32</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00056">InputSlot::GetConnectedOutputSlot()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00198">TensorInfo::GetDataType()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00321">Layer::GetInputSlot()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00316">Layer::GetName()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00319">Layer::GetNumOutputSlots()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00323">Layer::GetOutputSlot()</a>, <a class="el" href="_layer_8cpp_source.xhtml#l00066">OutputSlot::GetTensorInfo()</a>, <a class="el" href="_graph_8hpp_source.xhtml#l00434">Graph::InsertNewLayer()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00199">TensorInfo::SetDataType()</a>, and <a class="el" href="_layer_8cpp_source.xhtml#l00061">OutputSlot::SetTensorInfo()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.xhtml#l00670">AttemptBackendAssignment()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;{</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numOutputSlots = layer.GetNumOutputSlots();</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; std::vector&lt;ConvertFp32ToBf16Layer*&gt; convertLayers;</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; convertLayers.reserve(numOutputSlots);</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="comment">// Update Bf16 output slots to FP32 on current layer</span></div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; ChangeOutputBf16ToFp32(layer);</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160;</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="comment">// Insert a ConvertFp32ToBf16Layer after each FP32 output slot</span></div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> slotIndex = 0u; slotIndex &lt; numOutputSlots; ++slotIndex)</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; {</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; OutputSlot&amp; outputSlot = layer.GetOutputSlot(slotIndex);</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keywordflow">if</span>(outputSlot.GetTensorInfo().GetDataType() == DataType::Float32)</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; {</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="keyword">const</span> std::string name =</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; std::string(<span class="stringliteral">&quot;convert_fp32_to_bf16-&quot;</span> + std::to_string(slotIndex) + <span class="stringliteral">&quot;-&quot;</span>) + layer.GetName();</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; ConvertFp32ToBf16Layer* convertLayer =</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; graph.InsertNewLayer&lt;ConvertFp32ToBf16Layer&gt;(outputSlot, name.c_str());</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; TensorInfo convertInfo = convertLayer-&gt;GetInputSlot(0).GetConnectedOutputSlot()-&gt;GetTensorInfo();</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; convertInfo.SetDataType(DataType::BFloat16);</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; convertLayer-&gt;GetOutputSlot().SetTensorInfo(convertInfo);</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160;</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; convertLayers.emplace_back(convertLayer);</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; }</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; }</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keywordflow">return</span> convertLayers;</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a42f2d4a50337823a486cd89dc2ad057f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a42f2d4a50337823a486cd89dc2ad057f">&#9670;&nbsp;</a></span>InsertConvertFp32ToBf16LayersBefore()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::vector&lt; <a class="el" href="classarmnn_1_1_convert_fp32_to_bf16_layer.xhtml">ConvertFp32ToBf16Layer</a> * &gt; InsertConvertFp32ToBf16LayersBefore </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_graph.xhtml">Graph</a> &amp;&#160;</td>
+ <td class="paramname"><em>graph</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_layer.xhtml">Layer</a> &amp;&#160;</td>
+ <td class="paramname"><em>layer</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">bool&#160;</td>
+ <td class="paramname"><em>expectCorrectInputType</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_network_utils_8cpp_source.xhtml#l00090">90</a> of file <a class="el" href="_network_utils_8cpp_source.xhtml">NetworkUtils.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_layer_8hpp_source.xhtml#l00246">Layer::BeginInputSlots()</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">BFloat16</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00247">Layer::EndInputSlots()</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">Float32</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00056">InputSlot::GetConnectedOutputSlot()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00198">TensorInfo::GetDataType()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00321">Layer::GetInputSlot()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00316">Layer::GetName()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00318">Layer::GetNumInputSlots()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00323">Layer::GetOutputSlot()</a>, <a class="el" href="_layer_8cpp_source.xhtml#l00066">OutputSlot::GetTensorInfo()</a>, <a class="el" href="_graph_8hpp_source.xhtml#l00434">Graph::InsertNewLayer()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00199">TensorInfo::SetDataType()</a>, and <a class="el" href="_layer_8cpp_source.xhtml#l00061">OutputSlot::SetTensorInfo()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_convert_fp32_network_to_bf16_8hpp_source.xhtml#l00048">ConvertFp32NetworkToBf16Impl::Run()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;{</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; std::vector&lt;ConvertFp32ToBf16Layer*&gt; convertLayers;</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; convertLayers.reserve(layer.GetNumInputSlots());</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="comment">// Insert a ConvertFp32ToBf16Layer before each input slot</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; inputSlot = layer.BeginInputSlots(); inputSlot != layer.EndInputSlots(); ++inputSlot)</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; {</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keywordtype">bool</span> allowInsert = <span class="keyword">true</span>;</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">if</span> (expectCorrectInputType)</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; {</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="comment">// Only insert ConvertFp32ToBf16Layer before FP32 input slots</span></div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; OutputSlot* connectedOutputSlot = inputSlot-&gt;GetConnectedOutputSlot();</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; allowInsert =</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; connectedOutputSlot &amp;&amp; connectedOutputSlot-&gt;GetTensorInfo().GetDataType() == DataType::Float32;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; }</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordflow">if</span> (allowInsert)</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; {</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keyword">const</span> std::string name =</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; std::string(<span class="stringliteral">&quot;convert_fp32_to_bf16-&quot;</span> + std::to_string(inputSlot-&gt;GetSlotIndex()) + <span class="stringliteral">&quot;-&quot;</span>) +</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; layer.GetName();</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; ConvertFp32ToBf16Layer* convertLayer =</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; graph.InsertNewLayer&lt;ConvertFp32ToBf16Layer&gt;(*inputSlot, name.c_str());</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; TensorInfo convertInfo = convertLayer-&gt;GetInputSlot(0).GetConnectedOutputSlot()-&gt;GetTensorInfo();</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; convertInfo.SetDataType(DataType::BFloat16);</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; convertLayer-&gt;GetOutputSlot().SetTensorInfo(convertInfo);</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; convertLayers.emplace_back(convertLayer);</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; }</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; }</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keywordflow">return</span> convertLayers;</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="abf625e50a5eaeafce5b39580dc95a9d3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abf625e50a5eaeafce5b39580dc95a9d3">&#9670;&nbsp;</a></span>InsertConvertFp32ToFp16LayersAfter()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::vector&lt; <a class="el" href="classarmnn_1_1_convert_fp32_to_fp16_layer.xhtml">ConvertFp32ToFp16Layer</a> * &gt; InsertConvertFp32ToFp16LayersAfter </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_graph.xhtml">Graph</a> &amp;&#160;</td>
+ <td class="paramname"><em>graph</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_layer.xhtml">Layer</a> &amp;&#160;</td>
+ <td class="paramname"><em>layer</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_network_utils_8cpp_source.xhtml#l00201">201</a> of file <a class="el" href="_network_utils_8cpp_source.xhtml">NetworkUtils.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">Float16</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">Float32</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00056">InputSlot::GetConnectedOutputSlot()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00198">TensorInfo::GetDataType()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00321">Layer::GetInputSlot()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00316">Layer::GetName()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00319">Layer::GetNumOutputSlots()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00323">Layer::GetOutputSlot()</a>, <a class="el" href="_layer_8cpp_source.xhtml#l00066">OutputSlot::GetTensorInfo()</a>, <a class="el" href="_graph_8hpp_source.xhtml#l00434">Graph::InsertNewLayer()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00199">TensorInfo::SetDataType()</a>, and <a class="el" href="_layer_8cpp_source.xhtml#l00061">OutputSlot::SetTensorInfo()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.xhtml#l00670">AttemptBackendAssignment()</a>, <a class="el" href="_convert_fp32_network_to_fp16_8hpp_source.xhtml#l00018">ConvertFp32NetworkToFp16Impl::Run()</a>, and <a class="el" href="_optimizer_tests_8cpp_source.xhtml#l00306">TEST_SUITE()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;{</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numOutputSlots = layer.GetNumOutputSlots();</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; std::vector&lt;ConvertFp32ToFp16Layer*&gt; convertLayers;</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; convertLayers.reserve(numOutputSlots);</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="comment">// Update FP16 output slots to FP32 on current layer</span></div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; ChangeOutputFp16ToFp32(layer);</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160;</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="comment">// Insert a ConvertFp32ToFp16Layer after each FP32 output slot</span></div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> slotIndex = 0u; slotIndex &lt; numOutputSlots; ++slotIndex)</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; {</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; OutputSlot&amp; outputSlot = layer.GetOutputSlot(slotIndex);</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="keywordflow">if</span>(outputSlot.GetTensorInfo().GetDataType() == DataType::Float32)</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; {</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="keyword">const</span> std::string name =</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; std::string(<span class="stringliteral">&quot;convert_fp32_to_fp16-&quot;</span> + std::to_string(slotIndex) + <span class="stringliteral">&quot;-&quot;</span>) + layer.GetName();</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; ConvertFp32ToFp16Layer* convertLayer =</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; graph.InsertNewLayer&lt;ConvertFp32ToFp16Layer&gt;(outputSlot, name.c_str());</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160;</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; TensorInfo convertInfo = convertLayer-&gt;GetInputSlot(0).GetConnectedOutputSlot()-&gt;GetTensorInfo();</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; convertInfo.SetDataType(DataType::Float16);</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160;</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; convertLayer-&gt;GetOutputSlot().SetTensorInfo(convertInfo);</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160;</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; convertLayers.emplace_back(convertLayer);</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; }</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; }</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160;</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="keywordflow">return</span> convertLayers;</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a2616ffdae2db993af5c08019fb61860a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2616ffdae2db993af5c08019fb61860a">&#9670;&nbsp;</a></span>InsertDebugLayerAfter()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::vector&lt; <a class="el" href="classarmnn_1_1_debug_layer.xhtml">DebugLayer</a> * &gt; InsertDebugLayerAfter </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_graph.xhtml">Graph</a> &amp;&#160;</td>
+ <td class="paramname"><em>graph</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_layer.xhtml">Layer</a> &amp;&#160;</td>
+ <td class="paramname"><em>layer</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_network_utils_8cpp_source.xhtml#l00234">234</a> of file <a class="el" href="_network_utils_8cpp_source.xhtml">NetworkUtils.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00250">Layer::BeginOutputSlots()</a>, <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64">CpuRef</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00251">Layer::EndOutputSlots()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00056">InputSlot::GetConnectedOutputSlot()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00321">Layer::GetInputSlot()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00225">Layer::GetNameStr()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00319">Layer::GetNumOutputSlots()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00323">Layer::GetOutputSlot()</a>, <a class="el" href="_layer_8cpp_source.xhtml#l00066">OutputSlot::GetTensorInfo()</a>, <a class="el" href="_graph_8hpp_source.xhtml#l00434">Graph::InsertNewLayer()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00275">Layer::SetBackendId()</a>, and <a class="el" href="_layer_8cpp_source.xhtml#l00061">OutputSlot::SetTensorInfo()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_add_debug_8hpp_source.xhtml#l00019">AddDebugImpl::Run()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160;{</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; std::vector&lt;DebugLayer*&gt; debugLayers;</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; debugLayers.reserve(layer.GetNumOutputSlots());</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="comment">// Connect a DebugLayer to each output slot of the layer</span></div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; uint32_t outputSlotIdx = 0;</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> outputSlot = layer.BeginOutputSlots(); outputSlot != layer.EndOutputSlots(); ++outputSlot)</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; {</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keyword">const</span> std::string debugName = std::string(<span class="stringliteral">&quot;DebugLayerAfter&quot;</span>) + layer.GetNameStr() + <span class="stringliteral">&quot;_&quot;</span> +</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; std::to_string(outputSlotIdx);</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160;</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; DebugLayer* debugLayer =</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; graph.InsertNewLayer&lt;DebugLayer&gt;(*outputSlot, debugName.c_str());</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160;</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="comment">// Sets output tensor info for the debug layer.</span></div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(debugLayer-&gt;GetInputSlot(0).GetConnectedOutputSlot() == &amp;(*outputSlot));</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; TensorInfo debugInfo = debugLayer-&gt;GetInputSlot(0).GetConnectedOutputSlot()-&gt;GetTensorInfo();</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160;</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; debugLayer-&gt;GetOutputSlot().SetTensorInfo(debugInfo);</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160;</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="comment">// NOTE: It is OK to do this because DebugLayer is only supported on CpuRef</span></div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; debugLayer-&gt;SetBackendId(Compute::CpuRef);</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; debugLayers.emplace_back(debugLayer);</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160;</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; ++outputSlotIdx;</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; }</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160;</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keywordflow">return</span> debugLayers;</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160;}</div><div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ad5ca459a0ad2c2015f137170d9dd1cf8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad5ca459a0ad2c2015f137170d9dd1cf8">&#9670;&nbsp;</a></span>InstanceNorm()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void InstanceNorm </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_instance_normalization_queue_descriptor.xhtml">InstanceNormalizationQueueDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>data</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>inputInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>inputDecoder</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>outputEncoder</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_instance_norm_8cpp_source.xhtml#l00018">18</a> of file <a class="el" href="_instance_norm_8cpp_source.xhtml">InstanceNorm.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Decoder&lt; IType &gt;::Get()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00023">DataLayoutIndexed::GetChannelsIndex()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00024">DataLayoutIndexed::GetHeightIndex()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00028">DataLayoutIndexed::GetIndex()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00025">DataLayoutIndexed::GetWidthIndex()</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00827">InstanceNormalizationDescriptor::m_Beta</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00831">InstanceNormalizationDescriptor::m_DataLayout</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00829">InstanceNormalizationDescriptor::m_Eps</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00825">InstanceNormalizationDescriptor::m_Gamma</a>, <a class="el" href="include_2armnn_2backends_2_workload_data_8hpp_source.xhtml#l00054">QueueDescriptorWithParameters&lt; LayerDescriptor &gt;::m_Parameters</a>, and <a class="el" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_ref_instance_normalization_workload_8cpp_source.xhtml#l00026">RefInstanceNormalizationWorkload::ExecuteAsync()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;{</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">const</span> TensorShape inputShape = inputInfo.GetShape();</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml">armnnUtils::DataLayoutIndexed</a> dataLayout(data.m_Parameters.m_DataLayout);</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputBatches = inputShape[0];</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputHeight = inputShape[dataLayout.GetHeightIndex()];</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputWidth = inputShape[dataLayout.GetWidthIndex()];</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputChannels = inputShape[dataLayout.GetChannelsIndex()];</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordtype">float</span> beta = data.m_Parameters.m_Beta;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordtype">float</span> eps = data.m_Parameters.m_Eps;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordtype">float</span> gamma = data.m_Parameters.m_Gamma;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> n = 0; n &lt; inputBatches; ++n)</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; {</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> c = 0; c &lt; inputChannels; ++c)</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; {</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordtype">float</span> mean = 0, var = 0;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="comment">//Calculate Mean</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> h = 0; h &lt; inputHeight; h++)</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; {</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> w = 0; w &lt; inputWidth; w++)</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; {</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index = dataLayout.GetIndex(inputShape, n, c, h, w);</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; inputDecoder[index];</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordtype">float</span> value = inputDecoder.<a class="code" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Get</a>();</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; mean += value;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; }</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; }</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; mean /= <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span>(inputHeight * inputWidth);</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="comment">//Calculate Variance</span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> h = 0; h &lt; inputHeight; h++)</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; {</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> w = 0; w &lt; inputWidth; w++)</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; {</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index = dataLayout.GetIndex(inputShape, n, c, h, w);</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; inputDecoder[index];</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordtype">float</span> value = inputDecoder.<a class="code" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Get</a>();</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; var += (value - mean) * (value - mean);</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; }</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; }</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; var /= <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span>(inputHeight * inputWidth);</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="comment">// Apply Instance Normalisation</span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> h = 0; h &lt; inputHeight; ++h)</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; {</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> w = 0; w &lt; inputWidth; ++w)</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; {</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index = dataLayout.GetIndex(inputShape, n, c, h, w);</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; inputDecoder[index];</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; outputEncoder[index];</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; outputEncoder.<a class="code" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Set</a>((inputDecoder.<a class="code" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Get</a>() - mean) * gamma / std::sqrt ( var + eps) + beta);</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; }</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; }</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; }</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; }</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_encoder_xhtml_ae3b62b846a9c239f332830b9e36030eb"><div class="ttname"><a href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">armnn::Encoder::Set</a></div><div class="ttdeci">virtual void Set(IType right)=0</div></div>
+<div class="ttc" id="classarmnn_1_1_decoder_xhtml_ac729108381e2340bea12877971713ecb"><div class="ttname"><a href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">armnn::Decoder::Get</a></div><div class="ttdeci">virtual IType Get() const =0</div></div>
+<div class="ttc" id="classarmnn_utils_1_1_data_layout_indexed_xhtml"><div class="ttname"><a href="classarmnn_utils_1_1_data_layout_indexed.xhtml">armnnUtils::DataLayoutIndexed</a></div><div class="ttdoc">Provides access to the appropriate indexes for Channels, Height and Width based on DataLayout...</div><div class="ttdef"><b>Definition:</b> <a href="_data_layout_indexed_8hpp_source.xhtml#l00017">DataLayoutIndexed.hpp:17</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="abf6aad7bc221f8ad22b4d99cd020373b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abf6aad7bc221f8ad22b4d99cd020373b">&#9670;&nbsp;</a></span>IntersectionOverUnion()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float IntersectionOverUnion </td>
+ <td>(</td>
+ <td class="paramtype">const float *&#160;</td>
+ <td class="paramname"><em>boxI</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const float *&#160;</td>
+ <td class="paramname"><em>boxJ</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="backends_2reference_2workloads_2_detection_post_process_8cpp_source.xhtml#l00030">30</a> of file <a class="el" href="backends_2reference_2workloads_2_detection_post_process_8cpp_source.xhtml">DetectionPostProcess.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="backends_2reference_2workloads_2_detection_post_process_8cpp_source.xhtml#l00049">NonMaxSuppression()</a>, and <a class="el" href="_ref_detection_post_process_tests_8cpp_source.xhtml#l00013">TEST_SUITE()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;{</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="comment">// Box-corner format: ymin, xmin, ymax, xmax.</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> yMin = 0;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> xMin = 1;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> yMax = 2;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> xMax = 3;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordtype">float</span> areaI = (boxI[yMax] - boxI[yMin]) * (boxI[xMax] - boxI[xMin]);</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordtype">float</span> areaJ = (boxJ[yMax] - boxJ[yMin]) * (boxJ[xMax] - boxJ[xMin]);</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordtype">float</span> yMinIntersection = std::max(boxI[yMin], boxJ[yMin]);</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordtype">float</span> xMinIntersection = std::max(boxI[xMin], boxJ[xMin]);</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordtype">float</span> yMaxIntersection = std::min(boxI[yMax], boxJ[yMax]);</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordtype">float</span> xMaxIntersection = std::min(boxI[xMax], boxJ[xMax]);</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordtype">float</span> areaIntersection = std::max(yMaxIntersection - yMinIntersection, 0.0f) *</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; std::max(xMaxIntersection - xMinIntersection, 0.0f);</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordtype">float</span> areaUnion = areaI + areaJ - areaIntersection;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">return</span> areaIntersection / areaUnion;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a6e7dc8639c4b2f0a93031afff5182735"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6e7dc8639c4b2f0a93031afff5182735">&#9670;&nbsp;</a></span>IsActivationSupported()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsActivationSupported </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em> = <code>nullptr</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupportedMaxLength</em> = <code>1024</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. </p>
+
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>, and <a class="el" href="_i_layer_support_8hpp_source.xhtml#l00027">ILayerSupport::~ILayerSupport()</a>.</p>
+
+</div>
+</div>
+<a id="ab5569e5b664498e011e8bd92cc3cc5b2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab5569e5b664498e011e8bd92cc3cc5b2">&#9670;&nbsp;</a></span>IsAdditionSupported()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsAdditionSupported </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input0</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em> = <code>nullptr</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupportedMaxLength</em> = <code>1024</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. </p>
+
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>, and <a class="el" href="src_2backends_2backends_common_2test_2_mock_backend_8hpp_source.xhtml#l00175">MockLayerSupport::IsLayerSupported()</a>.</p>
+
+</div>
+</div>
+<a id="a49b7a701c6a0c569015309102221c702"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a49b7a701c6a0c569015309102221c702">&#9670;&nbsp;</a></span>IsBatchNormalizationSupported()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsBatchNormalizationSupported </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>mean</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>var</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>beta</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>gamma</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_batch_normalization_descriptor.xhtml">BatchNormalizationDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em> = <code>nullptr</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupportedMaxLength</em> = <code>1024</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. </p>
+
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+
+</div>
+</div>
+<a id="abb893c7adb7b64d0964bd244c46dd06b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abb893c7adb7b64d0964bd244c46dd06b">&#9670;&nbsp;</a></span>IsBatchToSpaceNdSupported()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsBatchToSpaceNdSupported </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_batch_to_space_nd_descriptor.xhtml">BatchToSpaceNdDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em> = <code>nullptr</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupportedMaxLength</em> = <code>1024</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. </p>
+
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+
+</div>
+</div>
+<a id="a3d504240723912bf9c76ff3afeaa25c5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3d504240723912bf9c76ff3afeaa25c5">&#9670;&nbsp;</a></span>IsBFloat16()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsBFloat16 </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>info</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ref_workload_factory_8cpp_source.xhtml#l00053">53</a> of file <a class="el" href="_ref_workload_factory_8cpp_source.xhtml">RefWorkloadFactory.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_ref_workload_factory_8cpp_source.xhtml#l00144">RefWorkloadFactory::CreateWorkload()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;{</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordflow">return</span> IsDataType&lt;DataType::BFloat16&gt;(<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>);</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c"><div class="ttname"><a href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">armnn::BoostLogSeverityMapping::info</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a08479ba047ffc8f571f8281f13ae76e7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a08479ba047ffc8f571f8281f13ae76e7">&#9670;&nbsp;</a></span>IsCapabilitySupported()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool IsCapabilitySupported </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">armnn::BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#ab24d74259a053475f6040dd701a01952">armnn::BackendCapability</a>&#160;</td>
+ <td class="paramname"><em>capability</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Convenience function to check a capability on a backend. </p>
+
+<p class="definition">Definition at line <a class="el" href="_backend_helper_8cpp_source.xhtml#l00114">114</a> of file <a class="el" href="_backend_helper_8cpp_source.xhtml">BackendHelper.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_deprecated_8hpp_source.xhtml#l00033">ARMNN_NO_DEPRECATE_WARN_BEGIN</a>, <a class="el" href="_deprecated_8hpp_source.xhtml#l00034">ARMNN_NO_DEPRECATE_WARN_END</a>, and <a class="el" href="_backend_registry_8cpp_source.xhtml#l00013">BackendRegistryInstance()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_backend_helper_8hpp_source.xhtml#l00026">LayerSupportHandle::LayerSupportHandle()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;{</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordtype">bool</span> hasCapability = <span class="keyword">false</span>;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span>&amp; backendRegistry = <a class="code" href="namespacearmnn.xhtml#ac2807505b850738bc8a1991ce669dd47">armnn::BackendRegistryInstance</a>();</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keywordflow">if</span> (backendRegistry.IsBackendRegistered(backend))</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; {</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keyword">auto</span> factoryFunc = backendRegistry.GetFactory(backend);</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keyword">auto</span> backendObject = factoryFunc();</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <a class="code" href="_deprecated_8hpp.xhtml#ab66a241a0ed3ee89c866e777b035d0ed">ARMNN_NO_DEPRECATE_WARN_BEGIN</a></div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; hasCapability = backendObject-&gt;HasCapability(capability);</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <a class="code" href="_deprecated_8hpp.xhtml#ad762b11b48e5c1d1c1743f529485728a">ARMNN_NO_DEPRECATE_WARN_END</a></div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; }</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keywordflow">return</span> hasCapability;</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;}</div><div class="ttc" id="_deprecated_8hpp_xhtml_ab66a241a0ed3ee89c866e777b035d0ed"><div class="ttname"><a href="_deprecated_8hpp.xhtml#ab66a241a0ed3ee89c866e777b035d0ed">ARMNN_NO_DEPRECATE_WARN_BEGIN</a></div><div class="ttdeci">#define ARMNN_NO_DEPRECATE_WARN_BEGIN</div><div class="ttdef"><b>Definition:</b> <a href="_deprecated_8hpp_source.xhtml#l00033">Deprecated.hpp:33</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ac2807505b850738bc8a1991ce669dd47"><div class="ttname"><a href="namespacearmnn.xhtml#ac2807505b850738bc8a1991ce669dd47">armnn::BackendRegistryInstance</a></div><div class="ttdeci">BackendRegistry &amp; BackendRegistryInstance()</div><div class="ttdef"><b>Definition:</b> <a href="_backend_registry_8cpp_source.xhtml#l00013">BackendRegistry.cpp:13</a></div></div>
+<div class="ttc" id="_deprecated_8hpp_xhtml_ad762b11b48e5c1d1c1743f529485728a"><div class="ttname"><a href="_deprecated_8hpp.xhtml#ad762b11b48e5c1d1c1743f529485728a">ARMNN_NO_DEPRECATE_WARN_END</a></div><div class="ttdeci">#define ARMNN_NO_DEPRECATE_WARN_END</div><div class="ttdef"><b>Definition:</b> <a href="_deprecated_8hpp_source.xhtml#l00034">Deprecated.hpp:34</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a757df85e956e425c1a082d35a98ca4a9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a757df85e956e425c1a082d35a98ca4a9">&#9670;&nbsp;</a></span>IsConcatSupported()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsConcatSupported </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::vector&lt; const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> *&gt;&#160;</td>
+ <td class="paramname"><em>inputs</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_origins_descriptor.xhtml">OriginsDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em> = <code>nullptr</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupportedMaxLength</em> = <code>1024</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. </p>
+
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+
+</div>
+</div>
+<a id="a0d2ad1212c8773f36160ef6e5e7db61f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0d2ad1212c8773f36160ef6e5e7db61f">&#9670;&nbsp;</a></span>IsConstantSupported()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsConstantSupported </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em> = <code>nullptr</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupportedMaxLength</em> = <code>1024</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. </p>
+
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+
+</div>
+</div>
+<a id="af9decd6720482e602efc6ac5ef7dab50"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af9decd6720482e602efc6ac5ef7dab50">&#9670;&nbsp;</a></span>IsConvertFp16ToFp32Supported()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsConvertFp16ToFp32Supported </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em> = <code>nullptr</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupportedMaxLength</em> = <code>1024</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. </p>
+
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+
+</div>
+</div>
+<a id="a080c11383c6a29b4295ae359cde5c19c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a080c11383c6a29b4295ae359cde5c19c">&#9670;&nbsp;</a></span>IsConvertFp32ToFp16Supported()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsConvertFp32ToFp16Supported </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em> = <code>nullptr</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupportedMaxLength</em> = <code>1024</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. </p>
+
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+
+</div>
+</div>
+<a id="aff785aa7c076b1d2f51f76fa0f0647e4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aff785aa7c076b1d2f51f76fa0f0647e4">&#9670;&nbsp;</a></span>IsConvolution2dSupported()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsConvolution2dSupported </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_convolution2d_descriptor.xhtml">Convolution2dDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>weights</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &gt; &amp;&#160;</td>
+ <td class="paramname"><em>biases</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em> = <code>nullptr</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupportedMaxLength</em> = <code>1024</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. </p>
+
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>, and <a class="el" href="src_2backends_2backends_common_2test_2_mock_backend_8hpp_source.xhtml#l00175">MockLayerSupport::IsLayerSupported()</a>.</p>
+
+</div>
+</div>
+<a id="a6a2e058d934e9d784eab57ee7121d69c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6a2e058d934e9d784eab57ee7121d69c">&#9670;&nbsp;</a></span>IsDataType()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsDataType </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>info</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ref_workload_factory_8cpp_source.xhtml#l00032">32</a> of file <a class="el" href="_ref_workload_factory_8cpp_source.xhtml">RefWorkloadFactory.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="include_2armnn_2backends_2_workload_info_8hpp_source.xhtml#l00018">WorkloadInfo::m_InputTensorInfos</a>, and <a class="el" href="include_2armnn_2backends_2_workload_info_8hpp_source.xhtml#l00019">WorkloadInfo::m_OutputTensorInfos</a>.</p>
+<div class="fragment"><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;{</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keyword">auto</span> checkType = [](<span class="keyword">const</span> TensorInfo&amp; tensorInfo) {<span class="keywordflow">return</span> tensorInfo.GetDataType() == ArmnnType;};</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">auto</span> it = std::find_if(std::begin(<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.m_InputTensorInfos), std::end(<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.m_InputTensorInfos), checkType);</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">if</span> (it != std::end(<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.m_InputTensorInfos))</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; {</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; }</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; it = std::find_if(std::begin(<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.m_OutputTensorInfos), std::end(<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.m_OutputTensorInfos), checkType);</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">if</span> (it != std::end(<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.m_OutputTensorInfos))</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; {</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; }</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c"><div class="ttname"><a href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">armnn::BoostLogSeverityMapping::info</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="aa6503439334e0a79181a51e084b0268f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa6503439334e0a79181a51e084b0268f">&#9670;&nbsp;</a></span>IsDebugSupported()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsDebugSupported </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em> = <code>nullptr</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupportedMaxLength</em> = <code>1024</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. </p>
+
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+
+</div>
+</div>
+<a id="a87f06345ddd902d027eb8f792ca8cdb4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a87f06345ddd902d027eb8f792ca8cdb4">&#9670;&nbsp;</a></span>IsDepthwiseConvolutionSupported()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsDepthwiseConvolutionSupported </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml">DepthwiseConvolution2dDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>weights</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &gt; &amp;&#160;</td>
+ <td class="paramname"><em>biases</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em> = <code>nullptr</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupportedMaxLength</em> = <code>1024</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. </p>
+
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+
+</div>
+</div>
+<a id="a1b4b4304198668d3af8e9d0c40d9343d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1b4b4304198668d3af8e9d0c40d9343d">&#9670;&nbsp;</a></span>IsDequantizeSupported()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsDequantizeSupported </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em> = <code>nullptr</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupportedMaxLength</em> = <code>1024</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. </p>
+
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+
+</div>
+</div>
+<a id="a3378acd6bc867577ee4bf1657945f1b5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3378acd6bc867577ee4bf1657945f1b5">&#9670;&nbsp;</a></span>IsDivisionSupported()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsDivisionSupported </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input0</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em> = <code>nullptr</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupportedMaxLength</em> = <code>1024</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. </p>
+
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+
+</div>
+</div>
+<a id="a5cdadf3ef2695b145f6861c919234e65"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5cdadf3ef2695b145f6861c919234e65">&#9670;&nbsp;</a></span>IsEqualSupported()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsEqualSupported </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input0</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em> = <code>nullptr</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupportedMaxLength</em> = <code>1024</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. </p>
+
+</div>
+</div>
+<a id="a4539c40ac5e36641f8ec10b88d658db1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4539c40ac5e36641f8ec10b88d658db1">&#9670;&nbsp;</a></span>IsFakeQuantizationSupported()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsFakeQuantizationSupported </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_fake_quantization_descriptor.xhtml">FakeQuantizationDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em> = <code>nullptr</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupportedMaxLength</em> = <code>1024</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. </p>
+
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+
+</div>
+</div>
+<a id="ad78d822be14a8d585cd038cf0e73cd7e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad78d822be14a8d585cd038cf0e73cd7e">&#9670;&nbsp;</a></span>IsFloat16()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsFloat16 </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>info</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ref_workload_factory_8cpp_source.xhtml#l00058">58</a> of file <a class="el" href="_ref_workload_factory_8cpp_source.xhtml">RefWorkloadFactory.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_ref_workload_factory_8cpp_source.xhtml#l00144">RefWorkloadFactory::CreateWorkload()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;{</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keywordflow">return</span> IsDataType&lt;DataType::Float16&gt;(<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>);</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c"><div class="ttname"><a href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">armnn::BoostLogSeverityMapping::info</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a2b6003e1d9226301e4badcac0b53c0ef"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2b6003e1d9226301e4badcac0b53c0ef">&#9670;&nbsp;</a></span>IsFloorSupported()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsFloorSupported </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em> = <code>nullptr</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupportedMaxLength</em> = <code>1024</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. </p>
+
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+
+</div>
+</div>
+<a id="a0a72d1f8a0d43ee551c7ac654f8816fa"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0a72d1f8a0d43ee551c7ac654f8816fa">&#9670;&nbsp;</a></span>IsFullyConnectedSupported()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsFullyConnectedSupported </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>weights</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>biases</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_fully_connected_descriptor.xhtml">FullyConnectedDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em> = <code>nullptr</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupportedMaxLength</em> = <code>1024</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. </p>
+
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+
+</div>
+</div>
+<a id="a1b71293424668995f13d6682af815938"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1b71293424668995f13d6682af815938">&#9670;&nbsp;</a></span>IsGreaterSupported()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsGreaterSupported </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input0</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em> = <code>nullptr</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupportedMaxLength</em> = <code>1024</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. </p>
+
+</div>
+</div>
+<a id="a3512b2f24950886288c5d01df1488f15"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3512b2f24950886288c5d01df1488f15">&#9670;&nbsp;</a></span>IsInputSupported()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsInputSupported </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em> = <code>nullptr</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupportedMaxLength</em> = <code>1024</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. </p>
+
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>, and <a class="el" href="src_2backends_2backends_common_2test_2_mock_backend_8hpp_source.xhtml#l00175">MockLayerSupport::IsLayerSupported()</a>.</p>
+
+</div>
+</div>
+<a id="a57862de9b939281d1fe0242a8f04ead9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a57862de9b939281d1fe0242a8f04ead9">&#9670;&nbsp;</a></span>IsL2NormalizationSupported()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsL2NormalizationSupported </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_l2_normalization_descriptor.xhtml">L2NormalizationDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em> = <code>nullptr</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupportedMaxLength</em> = <code>1024</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. </p>
+
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+
+</div>
+</div>
+<a id="a2c62d8aa5aeab36458f9ecfa5db1f785"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2c62d8aa5aeab36458f9ecfa5db1f785">&#9670;&nbsp;</a></span>IsLstmSupported()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsLstmSupported </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>outputStateIn</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>cellStateIn</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>scratchBuffer</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>outputStateOut</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>cellStateOut</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_lstm_descriptor.xhtml">LstmDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_lstm_input_params_info.xhtml">LstmInputParamsInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>paramsInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em> = <code>nullptr</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupportedMaxLength</em> = <code>1024</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. </p>
+
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+
+</div>
+</div>
+<a id="a977729771e5ab4263e933f785fa532a6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a977729771e5ab4263e933f785fa532a6">&#9670;&nbsp;</a></span>IsMaximumSupported()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsMaximumSupported </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input0</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>reasonIfUnSupported</em> = <code>nullptr</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>reasonIfUnSupportedMaxLength</em> = <code>0</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. </p>
+
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+
+</div>
+</div>
+<a id="a79698fa98352bffccc6723de84677680"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a79698fa98352bffccc6723de84677680">&#9670;&nbsp;</a></span>IsMeanSupported()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsMeanSupported </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_mean_descriptor.xhtml">MeanDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em> = <code>nullptr</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupportedMaxLength</em> = <code>1024</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. </p>
+
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+
+</div>
+</div>
+<a id="a1401f21967557c5f70830e06f9b10d4d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1401f21967557c5f70830e06f9b10d4d">&#9670;&nbsp;</a></span>IsMemCopySupported()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsMemCopySupported </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em> = <code>nullptr</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupportedMaxLength</em> = <code>1024</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. </p>
+
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+
+</div>
+</div>
+<a id="a8c24c4caabe9282b927f8777d7ca993f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8c24c4caabe9282b927f8777d7ca993f">&#9670;&nbsp;</a></span>IsMergeSupported()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsMergeSupported </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input0</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em> = <code>nullptr</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupportedMaxLength</em> = <code>1024</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. </p>
+
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+
+</div>
+</div>
+<a id="a29bdc2efd75bb437f4292dd9fcb5c89a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a29bdc2efd75bb437f4292dd9fcb5c89a">&#9670;&nbsp;</a></span>IsMinimumSupported()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsMinimumSupported </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input0</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em> = <code>nullptr</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupportedMaxLength</em> = <code>1024</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. </p>
+
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+
+</div>
+</div>
+<a id="a9624be7520f71d00bfb769d94e0b088b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9624be7520f71d00bfb769d94e0b088b">&#9670;&nbsp;</a></span>IsMultiplicationSupported()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsMultiplicationSupported </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input0</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em> = <code>nullptr</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupportedMaxLength</em> = <code>1024</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. </p>
+
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+
+</div>
+</div>
+<a id="a23d54c0b96b63178811174d5e7b2d328"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a23d54c0b96b63178811174d5e7b2d328">&#9670;&nbsp;</a></span>IsNormalizationSupported()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsNormalizationSupported </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_normalization_descriptor.xhtml">NormalizationDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em> = <code>nullptr</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupportedMaxLength</em> = <code>1024</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. </p>
+
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+
+</div>
+</div>
+<a id="ad05c0670c947d35d39b3b0217e9975cf"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad05c0670c947d35d39b3b0217e9975cf">&#9670;&nbsp;</a></span>IsOperationQueueDescriptor() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr bool armnn::IsOperationQueueDescriptor </td>
+ <td>(</td>
+ <td class="paramtype">const QueueDescriptorType &amp;&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ref_workload_factory_8hpp_source.xhtml#l00018">18</a> of file <a class="el" href="_ref_workload_factory_8hpp_source.xhtml">RefWorkloadFactory.hpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;{ <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a93e7b76d19b33076b2a4eae44014d5ea"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a93e7b76d19b33076b2a4eae44014d5ea">&#9670;&nbsp;</a></span>IsOperationQueueDescriptor() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr bool armnn::IsOperationQueueDescriptor </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_mem_copy_queue_descriptor.xhtml">MemCopyQueueDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ref_workload_factory_8hpp_source.xhtml#l00021">21</a> of file <a class="el" href="_ref_workload_factory_8hpp_source.xhtml">RefWorkloadFactory.hpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;{ <span class="keywordflow">return</span> <span class="keyword">false</span>; }</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a05323af66b9f762e269a27562a2bbdd0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a05323af66b9f762e269a27562a2bbdd0">&#9670;&nbsp;</a></span>IsOperationQueueDescriptor() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr bool armnn::IsOperationQueueDescriptor </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_constant_queue_descriptor.xhtml">ConstantQueueDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ref_workload_factory_8hpp_source.xhtml#l00024">24</a> of file <a class="el" href="_ref_workload_factory_8hpp_source.xhtml">RefWorkloadFactory.hpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;{ <span class="keywordflow">return</span> <span class="keyword">false</span>; }</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a91332212b6a2cc9c0ea32af03c600b4f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a91332212b6a2cc9c0ea32af03c600b4f">&#9670;&nbsp;</a></span>IsOperationQueueDescriptor() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr bool armnn::IsOperationQueueDescriptor </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_permute_queue_descriptor.xhtml">PermuteQueueDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ref_workload_factory_8hpp_source.xhtml#l00027">27</a> of file <a class="el" href="_ref_workload_factory_8hpp_source.xhtml">RefWorkloadFactory.hpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;{ <span class="keywordflow">return</span> <span class="keyword">false</span>; }</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a60699e7f86e142739ccddd43c20c4fc0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a60699e7f86e142739ccddd43c20c4fc0">&#9670;&nbsp;</a></span>IsOutputSupported()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsOutputSupported </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em> = <code>nullptr</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupportedMaxLength</em> = <code>1024</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. </p>
+
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>, and <a class="el" href="src_2backends_2backends_common_2test_2_mock_backend_8hpp_source.xhtml#l00175">MockLayerSupport::IsLayerSupported()</a>.</p>
+
+</div>
+</div>
+<a id="ae467c9a579c8fb41427227a1c1e1cb4c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae467c9a579c8fb41427227a1c1e1cb4c">&#9670;&nbsp;</a></span>IsPadSupported()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsPadSupported </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_pad_descriptor.xhtml">PadDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em> = <code>nullptr</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupportedMaxLength</em> = <code>1024</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. </p>
+
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+
+</div>
+</div>
+<a id="ab4c606b53ae4d03aec1fcfe537c757ef"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab4c606b53ae4d03aec1fcfe537c757ef">&#9670;&nbsp;</a></span>IsPermuteSupported()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsPermuteSupported </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_permute_descriptor.xhtml">PermuteDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em> = <code>nullptr</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupportedMaxLength</em> = <code>1024</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. </p>
+
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+
+</div>
+</div>
+<a id="af4f2d40a67380e91bd7ed0c1bcc4658f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af4f2d40a67380e91bd7ed0c1bcc4658f">&#9670;&nbsp;</a></span>IsPooling2dSupported()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsPooling2dSupported </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_pooling2d_descriptor.xhtml">Pooling2dDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em> = <code>nullptr</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupportedMaxLength</em> = <code>1024</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. </p>
+
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+
+</div>
+</div>
+<a id="a3b4773564c3fd8c88e697ffe0afbe10d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3b4773564c3fd8c88e697ffe0afbe10d">&#9670;&nbsp;</a></span>IsPreCompiledSupported()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsPreCompiledSupported </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em> = <code>nullptr</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupportedMaxLength</em> = <code>1024</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. </p>
+
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+
+</div>
+</div>
+<a id="a36d55a20000a7b50f7369c3ceeca46bd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a36d55a20000a7b50f7369c3ceeca46bd">&#9670;&nbsp;</a></span>IsPreluSupported()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsPreluSupported </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>alpha</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em> = <code>nullptr</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupportedMaxLength</em> = <code>1024</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. </p>
+
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+
+</div>
+</div>
+<a id="a47d136a5519331dee24f5e01b206ae7c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a47d136a5519331dee24f5e01b206ae7c">&#9670;&nbsp;</a></span>IsQAsymmS8()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsQAsymmS8 </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>info</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ref_workload_factory_8cpp_source.xhtml#l00073">73</a> of file <a class="el" href="_ref_workload_factory_8cpp_source.xhtml">RefWorkloadFactory.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_ref_workload_factory_8cpp_source.xhtml#l00144">RefWorkloadFactory::CreateWorkload()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;{</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">return</span> IsDataType&lt;DataType::QAsymmS8&gt;(<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>);</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c"><div class="ttname"><a href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">armnn::BoostLogSeverityMapping::info</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a37c36bbf668cd8a0d7dcd731c9b591d7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a37c36bbf668cd8a0d7dcd731c9b591d7">&#9670;&nbsp;</a></span>IsQAsymmU8()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsQAsymmU8 </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>info</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ref_workload_factory_8cpp_source.xhtml#l00078">78</a> of file <a class="el" href="_ref_workload_factory_8cpp_source.xhtml">RefWorkloadFactory.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_ref_workload_factory_8cpp_source.xhtml#l00144">RefWorkloadFactory::CreateWorkload()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;{</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">return</span> IsDataType&lt;DataType::QAsymmU8&gt;(<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>);</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c"><div class="ttname"><a href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">armnn::BoostLogSeverityMapping::info</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="abcd0d843d5736b78740ae73249b6b977"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abcd0d843d5736b78740ae73249b6b977">&#9670;&nbsp;</a></span>IsQSymmS16()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsQSymmS16 </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>info</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ref_workload_factory_8cpp_source.xhtml#l00063">63</a> of file <a class="el" href="_ref_workload_factory_8cpp_source.xhtml">RefWorkloadFactory.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_ref_workload_factory_8cpp_source.xhtml#l00144">RefWorkloadFactory::CreateWorkload()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;{</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordflow">return</span> IsDataType&lt;DataType::QSymmS16&gt;(<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>);</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c"><div class="ttname"><a href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">armnn::BoostLogSeverityMapping::info</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a09a7cd515c3b495e61b2a5116bf6a335"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a09a7cd515c3b495e61b2a5116bf6a335">&#9670;&nbsp;</a></span>IsQSymmS8()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsQSymmS8 </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>info</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ref_workload_factory_8cpp_source.xhtml#l00068">68</a> of file <a class="el" href="_ref_workload_factory_8cpp_source.xhtml">RefWorkloadFactory.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_ref_workload_factory_8cpp_source.xhtml#l00144">RefWorkloadFactory::CreateWorkload()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;{</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordflow">return</span> IsDataType&lt;DataType::QSymmS8&gt;(<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>);</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c"><div class="ttname"><a href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">armnn::BoostLogSeverityMapping::info</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ad91bc7bfe29186f5d78c28386c6c5309"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad91bc7bfe29186f5d78c28386c6c5309">&#9670;&nbsp;</a></span>IsQuantized8BitType()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr bool armnn::IsQuantized8BitType </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>&#160;</td>
+ <td class="paramname"><em>dataType</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00285">285</a> of file <a class="el" href="_types_utils_8hpp_source.xhtml">TypesUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">QAsymmS8</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">QAsymmU8</a>, and <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">QSymmS8</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_workload_data_8cpp_source.xhtml#l00027">GetBiasDataType()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00996">RefLayerSupport::IsConvolution2dSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01078">RefLayerSupport::IsConvolution3dSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01208">RefLayerSupport::IsDepthwiseConvolutionSupported()</a>, <a class="el" href="_types_utils_8hpp_source.xhtml#l00292">IsQuantizedType()</a>, and <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02700">RefLayerSupport::IsTransposeConvolution2dSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160;{</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="keywordflow">return</span> dataType == DataType::QAsymmU8 ||</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; dataType == DataType::QAsymmS8 ||</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; dataType == DataType::QSymmS8;</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a237992b29706fe1c1653dae916ea67ef"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a237992b29706fe1c1653dae916ea67ef">&#9670;&nbsp;</a></span>IsQuantizedLstmSupported()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsQuantizedLstmSupported </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>previousCellStateIn</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>previousOutputIn</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>cellStateOut</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_quantized_lstm_input_params_info.xhtml">QuantizedLstmInputParamsInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>paramsInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em> = <code>nullptr</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupportedMaxLength</em> = <code>1024</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. </p>
+
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+
+</div>
+</div>
+<a id="ad44c007f21af2d0375e3ef9400a1b275"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad44c007f21af2d0375e3ef9400a1b275">&#9670;&nbsp;</a></span>IsQuantizedType() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr bool armnn::IsQuantizedType </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00280">280</a> of file <a class="el" href="_types_utils_8hpp_source.xhtml">TypesUtils.hpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_multiplication_workload_8cpp_source.xhtml#l00047">ClMultiplicationWorkload::ClMultiplicationWorkload()</a>, <a class="el" href="_ref_workload_factory_8cpp_source.xhtml#l00144">RefWorkloadFactory::CreateWorkload()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00506">TensorInfo::IsQuantized()</a>, <a class="el" href="_neon_multiplication_workload_8cpp_source.xhtml#l00047">NeonMultiplicationWorkload::NeonMultiplicationWorkload()</a>, <a class="el" href="_workload_data_8cpp_source.xhtml#l02495">QuantizeQueueDescriptor::Validate()</a>, and <a class="el" href="_workload_data_8cpp_source.xhtml#l02824">DequantizeQueueDescriptor::Validate()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160;{</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keywordflow">return</span> std::is_integral&lt;T&gt;::value;</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="aa172264d7075abf828e0b6894996a561"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa172264d7075abf828e0b6894996a561">&#9670;&nbsp;</a></span>IsQuantizedType() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr bool armnn::IsQuantizedType </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>&#160;</td>
+ <td class="paramname"><em>dataType</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00292">292</a> of file <a class="el" href="_types_utils_8hpp_source.xhtml">TypesUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_types_utils_8hpp_source.xhtml#l00285">IsQuantized8BitType()</a>, and <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">QSymmS16</a>.</p>
+<div class="fragment"><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;{</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keywordflow">return</span> dataType == DataType::QSymmS16 || <a class="code" href="namespacearmnn.xhtml#ad91bc7bfe29186f5d78c28386c6c5309">IsQuantized8BitType</a>(dataType);</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ad91bc7bfe29186f5d78c28386c6c5309"><div class="ttname"><a href="namespacearmnn.xhtml#ad91bc7bfe29186f5d78c28386c6c5309">armnn::IsQuantized8BitType</a></div><div class="ttdeci">constexpr bool IsQuantized8BitType(DataType dataType)</div><div class="ttdef"><b>Definition:</b> <a href="_types_utils_8hpp_source.xhtml#l00285">TypesUtils.hpp:285</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a6b10dc0d12c7f4a52ad01b9975dbe908"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6b10dc0d12c7f4a52ad01b9975dbe908">&#9670;&nbsp;</a></span>IsReadyForSplitAssignment()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsReadyForSplitAssignment </td>
+ <td>(</td>
+ <td class="paramtype">LayerSelectionInfo::LayerInfoContainer &amp;&#160;</td>
+ <td class="paramname"><em>layerInfos</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">LayerSelectionInfo &amp;&#160;</td>
+ <td class="paramname"><em>layerInfo</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_subgraph_view_selector_8cpp_source.xhtml#l00374">374</a> of file <a class="el" href="_subgraph_view_selector_8cpp_source.xhtml">SubgraphViewSelector.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_subgraph_view_selector_8cpp_source.xhtml#l00267">ForEachLayerInput()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_subgraph_view_selector_8cpp_source.xhtml#l00389">SubgraphViewSelector::SelectSubgraphs()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160;{</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; <span class="keywordtype">bool</span> ready = <span class="keyword">true</span>;</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <a class="code" href="namespacearmnn.xhtml#afce94270d9c4a51cd0c4ac6a58af4e26">ForEachLayerInput</a>(layerInfos, layerInfo,</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; [&amp;ready](LayerSelectionInfo&amp; parentInfo)</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; {</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <span class="keywordflow">if</span> (!parentInfo.m_IsProcessed)</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; {</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; ready = false;</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; }</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; });</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <span class="keywordflow">return</span> ready;</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_afce94270d9c4a51cd0c4ac6a58af4e26"><div class="ttname"><a href="namespacearmnn.xhtml#afce94270d9c4a51cd0c4ac6a58af4e26">armnn::ForEachLayerInput</a></div><div class="ttdeci">void ForEachLayerInput(LayerSelectionInfo::LayerInfoContainer &amp;layerInfos, LayerSelectionInfo &amp;layerInfo, Delegate function)</div><div class="ttdef"><b>Definition:</b> <a href="_subgraph_view_selector_8cpp_source.xhtml#l00267">SubgraphViewSelector.cpp:267</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="aefa2e47c23dc8faac4b7edb12b5d1c2c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aefa2e47c23dc8faac4b7edb12b5d1c2c">&#9670;&nbsp;</a></span>IsReduceSupported()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsReduceSupported </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_reduce_descriptor.xhtml">ReduceDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em> = <code>nullptr</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupportedMaxLength</em> = <code>1024</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. </p>
+
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+
+</div>
+</div>
+<a id="af5014cbc003abcf201d4372b0012734c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af5014cbc003abcf201d4372b0012734c">&#9670;&nbsp;</a></span>IsReshapeSupported()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsReshapeSupported </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_reshape_descriptor.xhtml">ReshapeDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em> = <code>nullptr</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupportedMaxLength</em> = <code>1024</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. </p>
+
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+
+</div>
+</div>
+<a id="a0c70182e7d26983945ae75229d607cce"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0c70182e7d26983945ae75229d607cce">&#9670;&nbsp;</a></span>IsResizeSupported()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsResizeSupported </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_resize_descriptor.xhtml">ResizeDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em> = <code>nullptr</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupportedMaxLength</em> = <code>1024</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. </p>
+
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+
+</div>
+</div>
+<a id="a9d6e15bfef3872d70d5a3b74a25ac788"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9d6e15bfef3872d70d5a3b74a25ac788">&#9670;&nbsp;</a></span>IsRsqrtSupported()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsRsqrtSupported </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em> = <code>nullptr</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupportedMaxLength</em> = <code>1024</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. </p>
+
+</div>
+</div>
+<a id="a87b99791ccf8793961db67ea19eb6fa4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a87b99791ccf8793961db67ea19eb6fa4">&#9670;&nbsp;</a></span>IsSigned32()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsSigned32 </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>info</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ref_workload_factory_8cpp_source.xhtml#l00048">48</a> of file <a class="el" href="_ref_workload_factory_8cpp_source.xhtml">RefWorkloadFactory.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_ref_workload_factory_8cpp_source.xhtml#l00144">RefWorkloadFactory::CreateWorkload()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;{</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordflow">return</span> IsDataType&lt;DataType::Signed32&gt;(<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>);</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c"><div class="ttname"><a href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">armnn::BoostLogSeverityMapping::info</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a242f6c2f0376aaacd7d65a6f1498dea9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a242f6c2f0376aaacd7d65a6f1498dea9">&#9670;&nbsp;</a></span>IsSoftmaxSupported()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsSoftmaxSupported </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_softmax_descriptor.xhtml">SoftmaxDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em> = <code>nullptr</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupportedMaxLength</em> = <code>1024</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. </p>
+
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+
+</div>
+</div>
+<a id="a55f4c243c58ee7a084f4a674d3c69948"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a55f4c243c58ee7a084f4a674d3c69948">&#9670;&nbsp;</a></span>IsSpaceToBatchNdSupported()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsSpaceToBatchNdSupported </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_space_to_batch_nd_descriptor.xhtml">SpaceToBatchNdDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em> = <code>nullptr</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupportedMaxLength</em> = <code>1024</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. </p>
+
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+
+</div>
+</div>
+<a id="a32e51e4810a549b4a15d59ba73c64d2c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a32e51e4810a549b4a15d59ba73c64d2c">&#9670;&nbsp;</a></span>IsSpaceToDepthSupported()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsSpaceToDepthSupported </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_space_to_depth_descriptor.xhtml">SpaceToDepthDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em> = <code>nullptr</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupportedMaxLength</em> = <code>1024</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. </p>
+
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+
+</div>
+</div>
+<a id="adf1e16300483fadf9fd19299ca8a67c4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adf1e16300483fadf9fd19299ca8a67c4">&#9670;&nbsp;</a></span>IsSplitterSupported()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsSplitterSupported </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::vector&lt; std::reference_wrapper&lt; <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &gt;&gt; &amp;&#160;</td>
+ <td class="paramname"><em>outputs</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_views_descriptor.xhtml">ViewsDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em> = <code>nullptr</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupportedMaxLength</em> = <code>1024</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. </p>
+
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+
+</div>
+</div>
+<a id="a10e8442be2b8596afd5770e98b904caa"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a10e8442be2b8596afd5770e98b904caa">&#9670;&nbsp;</a></span>IsStackSupported()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsStackSupported </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::vector&lt; const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> *&gt;&#160;</td>
+ <td class="paramname"><em>inputs</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_stack_descriptor.xhtml">StackDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em> = <code>nullptr</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupportedMaxLength</em> = <code>1024</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. </p>
+
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+
+</div>
+</div>
+<a id="a8fdc5d28344915ccc0503e2e62b597ab"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8fdc5d28344915ccc0503e2e62b597ab">&#9670;&nbsp;</a></span>IsStridedSliceSupported()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsStridedSliceSupported </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_strided_slice_descriptor.xhtml">StridedSliceDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em> = <code>nullptr</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupportedMaxLength</em> = <code>1024</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. </p>
+
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+
+</div>
+</div>
+<a id="a1a74a4ecd0f25e6031ef05210a0cfe51"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1a74a4ecd0f25e6031ef05210a0cfe51">&#9670;&nbsp;</a></span>IsSubtractionSupported()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsSubtractionSupported </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input0</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em> = <code>nullptr</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupportedMaxLength</em> = <code>1024</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. </p>
+
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+
+</div>
+</div>
+<a id="af6dbe371ec651a8e0063624fdf32afc0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af6dbe371ec651a8e0063624fdf32afc0">&#9670;&nbsp;</a></span>IsSupportedForDataTypeGeneric()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsSupportedForDataTypeGeneric </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; std::string &amp;&gt;&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>&#160;</td>
+ <td class="paramname"><em>dataType</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Float16Func&#160;</td>
+ <td class="paramname"><em>float16FuncPtr</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Float32Func&#160;</td>
+ <td class="paramname"><em>float32FuncPtr</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Uint8Func&#160;</td>
+ <td class="paramname"><em>uint8FuncPtr</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Int32Func&#160;</td>
+ <td class="paramname"><em>int32FuncPtr</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">BooleanFunc&#160;</td>
+ <td class="paramname"><em>booleanFuncPtr</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Params &amp;&amp;...&#160;</td>
+ <td class="paramname"><em>params</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layer_support_common_8hpp_source.xhtml#l00027">27</a> of file <a class="el" href="_layer_support_common_8hpp_source.xhtml">LayerSupportCommon.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">Boolean</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">Float16</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">Float32</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">QAsymmU8</a>, and <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">Signed32</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00941">RefLayerSupport::IsConvertFp16ToFp32Supported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00976">RefLayerSupport::IsConvertFp32ToFp16Supported()</a>, and <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00942">NeonLayerSupport::IsFloorSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;{</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">switch</span>(dataType)</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; {</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">case</span> DataType::Float16:</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">return</span> float16FuncPtr(reasonIfUnsupported, std::forward&lt;Params&gt;(params)...);</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordflow">case</span> DataType::Float32:</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">return</span> float32FuncPtr(reasonIfUnsupported, std::forward&lt;Params&gt;(params)...);</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmU8:</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordflow">return</span> uint8FuncPtr(reasonIfUnsupported, std::forward&lt;Params&gt;(params)...);</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordflow">case</span> DataType::Signed32:</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">return</span> int32FuncPtr(reasonIfUnsupported, std::forward&lt;Params&gt;(params)...);</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">case</span> DataType::Boolean:</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordflow">return</span> booleanFuncPtr(reasonIfUnsupported, std::forward&lt;Params&gt;(params)...);</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; }</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="ae8a3ee5f60ae5ae2df15626eaf727ed0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae8a3ee5f60ae5ae2df15626eaf727ed0">&#9670;&nbsp;</a></span>IsSwitchSupported()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsSwitchSupported </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input0</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output0</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em> = <code>nullptr</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupportedMaxLength</em> = <code>1024</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. </p>
+
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+
+</div>
+</div>
+<a id="ac6cc8e0bd35d229486fe6d844d88e0d4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac6cc8e0bd35d229486fe6d844d88e0d4">&#9670;&nbsp;</a></span>IsTransposeConvolution2dSupported()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::IsTransposeConvolution2dSupported </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_transpose_convolution2d_descriptor.xhtml">TransposeConvolution2dDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>weights</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &gt; &amp;&#160;</td>
+ <td class="paramname"><em>biases</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em> = <code>nullptr</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupportedMaxLength</em> = <code>1024</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated in favor of <a class="el" href="classarmnn_1_1_i_backend.xhtml" title="Each backend should implement an IBackend. ">IBackend</a> and <a class="el" href="classarmnn_1_1_i_layer_support.xhtml">ILayerSupport</a> interfaces. </p>
+
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+
+</div>
+</div>
+<a id="ac4fb1513cf6f4f3f40ab3d6559ec4067"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac4fb1513cf6f4f3f40ab3d6559ec4067">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[1/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const T *&#160;</td>
+ <td class="paramname"> = <code>nullptr</code></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="afb1e69829289fb07cc349c0884f27abd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afb1e69829289fb07cc349c0884f27abd">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[2/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_activation_layer.xhtml">ActivationLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00109">109</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="acc630e11a5baa28ad5723568a7a60109"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acc630e11a5baa28ad5723568a7a60109">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[3/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_addition_layer.xhtml">AdditionLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00110">110</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a324e860c347972fce7a1c07531bed06e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a324e860c347972fce7a1c07531bed06e">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[4/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_arg_min_max_layer.xhtml">ArgMinMaxLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00111">111</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="ae22db3ab5196edbb2e4e5244adc512e3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae22db3ab5196edbb2e4e5244adc512e3">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[5/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_batch_normalization_layer.xhtml">BatchNormalizationLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00112">112</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a87ffe3fb58ec36989d343e53e23fb0f8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a87ffe3fb58ec36989d343e53e23fb0f8">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[6/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_batch_to_space_nd_layer.xhtml">BatchToSpaceNdLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00113">113</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a0bce3e1a80419bc6966f60c8f2db9b92"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0bce3e1a80419bc6966f60c8f2db9b92">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[7/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_cast_layer.xhtml">CastLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00114">114</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="af99801cff508d065bede5283a0ea1dc9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af99801cff508d065bede5283a0ea1dc9">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[8/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_channel_shuffle_layer.xhtml">ChannelShuffleLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00115">115</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a43b8024cb70c07116be132ca28b12a21"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a43b8024cb70c07116be132ca28b12a21">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[9/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_comparison_layer.xhtml">ComparisonLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00116">116</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a300c356944bb1e9d2dff6191d1c3501c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a300c356944bb1e9d2dff6191d1c3501c">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[10/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_concat_layer.xhtml">ConcatLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00117">117</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a307007c2249288fe158bfdfaf9e1c413"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a307007c2249288fe158bfdfaf9e1c413">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[11/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_constant_layer.xhtml">ConstantLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00118">118</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="ac5837b21d9501669ef31d1a74661671c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac5837b21d9501669ef31d1a74661671c">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[12/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_convert_bf16_to_fp32_layer.xhtml">ConvertBf16ToFp32Layer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00119">119</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a4471d39d8390fc550c1f8688639e66f5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4471d39d8390fc550c1f8688639e66f5">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[13/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_convert_fp16_to_fp32_layer.xhtml">ConvertFp16ToFp32Layer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00120">120</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="afa4c37edb872b9dd64f0f0153a93e43f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afa4c37edb872b9dd64f0f0153a93e43f">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[14/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_convert_fp32_to_bf16_layer.xhtml">ConvertFp32ToBf16Layer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00121">121</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="af8df06bed5f1257864645e45948afa5c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af8df06bed5f1257864645e45948afa5c">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[15/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_convert_fp32_to_fp16_layer.xhtml">ConvertFp32ToFp16Layer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00122">122</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="ab2f52d0c728933e36f581a07676d9fe9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab2f52d0c728933e36f581a07676d9fe9">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[16/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_convolution2d_layer.xhtml">Convolution2dLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00123">123</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a8aa8025b92a7d302536ab63c1f0ea99c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8aa8025b92a7d302536ab63c1f0ea99c">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[17/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_convolution3d_layer.xhtml">Convolution3dLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00124">124</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="ad596268fcd03c87a4b6fde86f4732546"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad596268fcd03c87a4b6fde86f4732546">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[18/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_debug_layer.xhtml">DebugLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00125">125</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a939154289f544a02baec0735b27b8894"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a939154289f544a02baec0735b27b8894">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[19/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_depth_to_space_layer.xhtml">DepthToSpaceLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00126">126</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a26a46c27bca08b5bd26abba341f1d795"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a26a46c27bca08b5bd26abba341f1d795">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[20/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_depthwise_convolution2d_layer.xhtml">DepthwiseConvolution2dLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00127">127</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a95e2d190d7483017b4f4841dd07776e5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a95e2d190d7483017b4f4841dd07776e5">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[21/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_dequantize_layer.xhtml">DequantizeLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00128">128</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a22772d461066f995cd72d13066b0f46d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a22772d461066f995cd72d13066b0f46d">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[22/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_detection_post_process_layer.xhtml">DetectionPostProcessLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00129">129</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a955b1001b8c57c60ce443a1e31468f20"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a955b1001b8c57c60ce443a1e31468f20">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[23/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_division_layer.xhtml">DivisionLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00130">130</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a72f7601d11f32c8d9ccb49a80fcf662a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a72f7601d11f32c8d9ccb49a80fcf662a">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[24/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_elementwise_unary_layer.xhtml">ElementwiseUnaryLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00131">131</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a4acae0cdcdfab8e941af5c4e42e58cb3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4acae0cdcdfab8e941af5c4e42e58cb3">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[25/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_fake_quantization_layer.xhtml">FakeQuantizationLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00132">132</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a12fdb9a7f3cb197316e3e67e036216dc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a12fdb9a7f3cb197316e3e67e036216dc">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[26/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_fill_layer.xhtml">FillLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00133">133</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a575f5487e62465b6b9edbc447a26f32f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a575f5487e62465b6b9edbc447a26f32f">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[27/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_floor_layer.xhtml">FloorLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00134">134</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="aa689e4a3aa77e9d9e5851f566c5eb8b3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa689e4a3aa77e9d9e5851f566c5eb8b3">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[28/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_fully_connected_layer.xhtml">FullyConnectedLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00135">135</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a548fb17a9bff172e751ae4bd3add62b5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a548fb17a9bff172e751ae4bd3add62b5">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[29/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_gather_layer.xhtml">GatherLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00136">136</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="adef1c8c63daa9d348a29e74eac33a054"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adef1c8c63daa9d348a29e74eac33a054">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[30/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00137">137</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a57bcf309be7adcc91001834979f87bde"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a57bcf309be7adcc91001834979f87bde">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[31/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_instance_normalization_layer.xhtml">InstanceNormalizationLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00138">138</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a36f16b97bcb662caaa4eae24ea16cccf"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a36f16b97bcb662caaa4eae24ea16cccf">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[32/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_l2_normalization_layer.xhtml">L2NormalizationLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00139">139</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a78bb83e7a83c970a54ffe923386a79d0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a78bb83e7a83c970a54ffe923386a79d0">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[33/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_logical_binary_layer.xhtml">LogicalBinaryLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00140">140</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="afb6f9bd4f43118749a0336074bed7b35"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afb6f9bd4f43118749a0336074bed7b35">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[34/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_log_softmax_layer.xhtml">LogSoftmaxLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00141">141</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a0d08fb555c6d1cba705fd73b71797a28"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0d08fb555c6d1cba705fd73b71797a28">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[35/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_lstm_layer.xhtml">LstmLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00142">142</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="ac2bd34e0328cda2e23ccb4c79fa72960"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac2bd34e0328cda2e23ccb4c79fa72960">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[36/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_map_layer.xhtml">MapLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00143">143</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a6b231c8a547d4030d9a4a1618810c20b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6b231c8a547d4030d9a4a1618810c20b">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[37/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_maximum_layer.xhtml">MaximumLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00144">144</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="af079ba32db74f53aba1ad19193cd2a4b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af079ba32db74f53aba1ad19193cd2a4b">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[38/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_mean_layer.xhtml">MeanLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00145">145</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="aa17969606f64ea581c28431f2395e653"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa17969606f64ea581c28431f2395e653">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[39/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_mem_copy_layer.xhtml">MemCopyLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00146">146</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a70f3d83f6d1e3918eab895c8083058fa"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a70f3d83f6d1e3918eab895c8083058fa">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[40/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_mem_import_layer.xhtml">MemImportLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00147">147</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a9e8199bdc39f928f694591a41d7aa0c0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9e8199bdc39f928f694591a41d7aa0c0">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[41/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_merge_layer.xhtml">MergeLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00148">148</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="ad32a13408ace1c1fa520ed64a2cbe70f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad32a13408ace1c1fa520ed64a2cbe70f">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[42/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_minimum_layer.xhtml">MinimumLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00149">149</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a40f1546c0fa69f318eeab4b29cc64b70"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a40f1546c0fa69f318eeab4b29cc64b70">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[43/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_multiplication_layer.xhtml">MultiplicationLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00150">150</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a140713619ee498a149854a5376b8d072"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a140713619ee498a149854a5376b8d072">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[44/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_normalization_layer.xhtml">NormalizationLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00151">151</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a7a6e68f66d1d3819640b0f2d46a55fd1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7a6e68f66d1d3819640b0f2d46a55fd1">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[45/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00152">152</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="ab6f1994db909dcc399cb1f8bc50c2d3d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab6f1994db909dcc399cb1f8bc50c2d3d">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[46/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_pad_layer.xhtml">PadLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00153">153</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a1e6b17606926b8f69dbeda7f7ff1df95"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1e6b17606926b8f69dbeda7f7ff1df95">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[47/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_permute_layer.xhtml">PermuteLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00154">154</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="ade84059b48b38da3a233bed287864c5b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ade84059b48b38da3a233bed287864c5b">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[48/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_pooling2d_layer.xhtml">Pooling2dLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00155">155</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a5afa84427b91f83f2977382da7a9c62f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5afa84427b91f83f2977382da7a9c62f">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[49/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_pooling3d_layer.xhtml">Pooling3dLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00156">156</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a6e5eaa19ff232f11daa9a1c6caccf7fe"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6e5eaa19ff232f11daa9a1c6caccf7fe">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[50/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_pre_compiled_layer.xhtml">PreCompiledLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00157">157</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a58a5defa35b12773a97760efadffef4f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a58a5defa35b12773a97760efadffef4f">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[51/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_prelu_layer.xhtml">PreluLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00158">158</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="aaaaf64c0888ab25bfae770bd4c2ec34b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aaaaf64c0888ab25bfae770bd4c2ec34b">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[52/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_quantize_layer.xhtml">QuantizeLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00159">159</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a1da1712abdf8eb56a3fd34d09a30f88a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1da1712abdf8eb56a3fd34d09a30f88a">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[53/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_q_lstm_layer.xhtml">QLstmLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00160">160</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a31bcd6f755df954a4d7b020a09499105"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a31bcd6f755df954a4d7b020a09499105">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[54/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_quantized_lstm_layer.xhtml">QuantizedLstmLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00161">161</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a0c5d6fb244a3e38da85257afb91edd80"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0c5d6fb244a3e38da85257afb91edd80">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[55/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_rank_layer.xhtml">RankLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00162">162</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a2419883b22222c7bad914095ae3a9ad2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2419883b22222c7bad914095ae3a9ad2">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[56/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_reduce_layer.xhtml">ReduceLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00163">163</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a6a17f58da2071720e3003a56a092aab3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6a17f58da2071720e3003a56a092aab3">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[57/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_reshape_layer.xhtml">ReshapeLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00164">164</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="aafc370ea363f0565c3a8bced1e37c79e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aafc370ea363f0565c3a8bced1e37c79e">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[58/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_resize_layer.xhtml">ResizeLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00165">165</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a914ed6d4cdc4525ff0020148d4c4155c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a914ed6d4cdc4525ff0020148d4c4155c">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[59/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_shape_layer.xhtml">ShapeLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00166">166</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a3cbbb4e00618b072ace46751e660a295"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3cbbb4e00618b072ace46751e660a295">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[60/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_slice_layer.xhtml">SliceLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00167">167</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="af6af4b51e08d3e811620811ab5e0cd2d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af6af4b51e08d3e811620811ab5e0cd2d">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[61/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_softmax_layer.xhtml">SoftmaxLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00168">168</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="ac2d31ced5505a9d05287f5b71d25e34a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac2d31ced5505a9d05287f5b71d25e34a">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[62/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_space_to_batch_nd_layer.xhtml">SpaceToBatchNdLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00169">169</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a81c31de4f532a95ab85ed6d999029332"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a81c31de4f532a95ab85ed6d999029332">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[63/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_space_to_depth_layer.xhtml">SpaceToDepthLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00170">170</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a24d3abbfc1ed81df673452c7148aa0cc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a24d3abbfc1ed81df673452c7148aa0cc">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[64/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_splitter_layer.xhtml">SplitterLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00171">171</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="ab676aab9119d1417764849099a099ecf"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab676aab9119d1417764849099a099ecf">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[65/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_stack_layer.xhtml">StackLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00172">172</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a1b5ff142f1d4420a8d83d9bcff1bfff4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1b5ff142f1d4420a8d83d9bcff1bfff4">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[66/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_stand_in_layer.xhtml">StandInLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00173">173</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="ad640080ff4ea3e4f9ff05823e32ce15f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad640080ff4ea3e4f9ff05823e32ce15f">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[67/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_strided_slice_layer.xhtml">StridedSliceLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00174">174</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a9cc235c8c5e2ef3d2788cd558d676b0a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9cc235c8c5e2ef3d2788cd558d676b0a">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[68/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_subtraction_layer.xhtml">SubtractionLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00175">175</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a110b9fdf7f17a1d065cd59ebc4bb76f7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a110b9fdf7f17a1d065cd59ebc4bb76f7">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[69/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_switch_layer.xhtml">SwitchLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00176">176</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="af44c8ebb1b55f4c42cc301d0bf030aa5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af44c8ebb1b55f4c42cc301d0bf030aa5">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[70/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_transpose_layer.xhtml">TransposeLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00177">177</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a60af5a86cf0261d0bdf4312736ab4461"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a60af5a86cf0261d0bdf4312736ab4461">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[71/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_transpose_convolution2d_layer.xhtml">TransposeConvolution2dLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00178">178</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a598dbe8e8dfddfede22b52ebd0d437cb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a598dbe8e8dfddfede22b52ebd0d437cb">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[72/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_unidirectional_sequence_lstm_layer.xhtml">UnidirectionalSequenceLstmLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00179">179</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="aac367be4f6169b13d3a8a9250d2283d6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aac367be4f6169b13d3a8a9250d2283d6">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[73/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_unmap_layer.xhtml">UnmapLayer</a> *&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layers_fwd_8hpp_source.xhtml#l00180">180</a> of file <a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a71f2cc06b097cb5c4f0a1f48130a823b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a71f2cc06b097cb5c4f0a1f48130a823b">&#9670;&nbsp;</a></span>LevelToString()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::string armnn::LevelToString </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3d">LogSeverity</a>&#160;</td>
+ <td class="paramname"><em>level</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_logging_8hpp_source.xhtml#l00015">15</a> of file <a class="el" href="_logging_8hpp_source.xhtml">Logging.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4aa603905470e2a5b8c13e96b579ef0dba">Debug</a>, <a class="el" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da902b0d55fddef6f8d651fe1035b7d4bd">Error</a>, <a class="el" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da882384ec38ce8d9582b57e70861730e4">Fatal</a>, <a class="el" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da4059b0251f66a18cb56f544728796875">Info</a>, <a class="el" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3dadd4ec0ac4e58f7c32a01244ae91150b1">Trace</a>, and <a class="el" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da0eaadb4fcb48a0a0ed7bc9868be9fbaa">Warning</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_logging_8hpp_source.xhtml#l00095">ScopedRecord::ScopedRecord()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;{</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; <span class="keywordflow">switch</span>(level)</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; {</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keywordflow">case</span> LogSeverity::Trace:</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Trace&quot;</span>;</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#a5aae369ef847a00062925cea8e9be9c4">LogSeverity::Debug</a>:</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Debug&quot;</span>;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordflow">case</span> LogSeverity::Info:</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Info&quot;</span>;</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keywordflow">case</span> LogSeverity::Warning:</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Warning&quot;</span>;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keywordflow">case</span> LogSeverity::Error:</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Error&quot;</span>;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordflow">case</span> LogSeverity::Fatal:</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Fatal&quot;</span>;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Log&quot;</span>;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; }</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a5aae369ef847a00062925cea8e9be9c4"><div class="ttname"><a href="namespacearmnn.xhtml#a5aae369ef847a00062925cea8e9be9c4">armnn::Debug</a></div><div class="ttdeci">void Debug(const TensorInfo &amp;inputInfo, const T *inputData, LayerGuid guid, const std::string &amp;layerName, unsigned int slotIndex)</div><div class="ttdef"><b>Definition:</b> <a href="_debug_8cpp_source.xhtml#l00019">Debug.cpp:19</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ac52e04c0e349e25bcdaa72c27395ef8f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac52e04c0e349e25bcdaa72c27395ef8f">&#9670;&nbsp;</a></span>LogSoftmax()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void LogSoftmax </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>inputInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="namespacearmnn.xhtml#ac14705405cbcdd580df613de6766fe65">LogSoftmaxDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_log_softmax_8cpp_source.xhtml#l00029">29</a> of file <a class="el" href="_log_softmax_8cpp_source.xhtml">LogSoftmax.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00015">ARMNN_ASSERT_MSG</a>, <a class="el" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Decoder&lt; IType &gt;::Get()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00174">TensorShape::GetNumDimensions()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00195">TensorInfo::GetNumDimensions()</a>, <a class="el" href="_tensor_utils_8cpp_source.xhtml#l00134">armnnUtils::GetNumElementsBetween()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</a>, <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused()</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00165">SoftmaxDescriptor::m_Axis</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00163">SoftmaxDescriptor::m_Beta</a>, <a class="el" href="_numeric_cast_8hpp_source.xhtml#l00035">numeric_cast()</a>, and <a class="el" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_test_name_and_descriptor_layer_visitor_8cpp_source.xhtml#l00274">TEST_SUITE()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;{</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numDimensions = inputInfo.GetNumDimensions();</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordtype">bool</span> axisIsValid = ValidateAxis(descriptor.m_Axis, numDimensions);</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(axisIsValid,</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="stringliteral">&quot;Axis index is not in range [-numDimensions, numDimensions).&quot;</span>);</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(axisIsValid);</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> uAxis = descriptor.m_Axis &lt; 0 ?</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; numDimensions - <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(std::abs(descriptor.m_Axis)) :</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; armnn::numeric_cast&lt;unsigned int&gt;(descriptor.m_Axis);</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keyword">const</span> TensorShape&amp; inputShape = inputInfo.GetShape();</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outerSize = <a class="code" href="namespacearmnn_utils.xhtml#af57864f5e03358d14c2988edae912b8b">armnnUtils::GetNumElementsBetween</a>(inputShape, 0, uAxis);</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> axisSize = inputShape[uAxis];</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> innerSize = <a class="code" href="namespacearmnn_utils.xhtml#af57864f5e03358d14c2988edae912b8b">armnnUtils::GetNumElementsBetween</a>(inputShape,</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; uAxis + 1,</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; inputShape.GetNumDimensions());</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outer = 0; outer &lt; outerSize; ++outer)</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; {</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inner = 0; inner &lt; innerSize; ++inner)</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; {</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="comment">// Find max</span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; input[outer * axisSize * innerSize + inner];</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordtype">float</span> maxValue = input.<a class="code" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Get</a>();</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 1u; i &lt; axisSize; ++i)</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; {</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; input[(outer * axisSize + i) * innerSize + inner];</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; maxValue = std::max(maxValue, input.<a class="code" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Get</a>());</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; }</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="comment">// Compute sum</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordtype">float</span> sum = 0.0f;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0u; i &lt; axisSize; ++i)</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; {</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; input[(outer * axisSize + i) * innerSize + inner];</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; sum += std::exp((input.<a class="code" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Get</a>() - maxValue) * descriptor.m_Beta);</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; }</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="comment">// Compute log sum</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keyword">const</span> <span class="keywordtype">float</span> logSum = std::log(sum);</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="comment">// Compute result</span></div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0u; i &lt; axisSize; ++i)</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; {</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index = (outer * axisSize + i) * innerSize + inner;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; input [index];</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; output[index];</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; output.<a class="code" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Set</a>((input.<a class="code" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Get</a>() - maxValue) * descriptor.m_Beta - logSum);</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; }</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; }</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; }</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;}</div><div class="ttc" id="namespacearmnn_utils_xhtml_af57864f5e03358d14c2988edae912b8b"><div class="ttname"><a href="namespacearmnn_utils.xhtml#af57864f5e03358d14c2988edae912b8b">armnnUtils::GetNumElementsBetween</a></div><div class="ttdeci">unsigned int GetNumElementsBetween(const armnn::TensorShape &amp;shape, unsigned int firstAxisInclusive, unsigned int lastAxisExclusive)</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_utils_8cpp_source.xhtml#l00134">TensorUtils.cpp:134</a></div></div>
+<div class="ttc" id="classarmnn_1_1_encoder_xhtml_ae3b62b846a9c239f332830b9e36030eb"><div class="ttname"><a href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">armnn::Encoder::Set</a></div><div class="ttdeci">virtual void Set(IType right)=0</div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="classarmnn_1_1_decoder_xhtml_ac729108381e2340bea12877971713ecb"><div class="ttname"><a href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">armnn::Decoder::Get</a></div><div class="ttdeci">virtual IType Get() const =0</div></div>
+<div class="ttc" id="_assert_8hpp_xhtml_a91c4dfde57907d7698c7531785690a7f"><div class="ttname"><a href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a></div><div class="ttdeci">#define ARMNN_ASSERT_MSG(COND, MSG)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00015">Assert.hpp:15</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a375ca3cff9f1b005d1412dc5f3cf5b6e"><div class="ttname"><a href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a></div><div class="ttdeci">std::enable_if_t&lt; std::is_unsigned&lt; Source &gt;::value &amp;&amp;std::is_unsigned&lt; Dest &gt;::value, Dest &gt; numeric_cast(Source source)</div><div class="ttdef"><b>Definition:</b> <a href="_numeric_cast_8hpp_source.xhtml#l00035">NumericCast.hpp:35</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a27ecdfeeea12de313f2b97d309a35d9d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a27ecdfeeea12de313f2b97d309a35d9d">&#9670;&nbsp;</a></span>LowerString()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::string armnn::LowerString </td>
+ <td>(</td>
+ <td class="paramtype">std::string&#160;</td>
+ <td class="paramname"><em>value</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_backend_context_8cpp_source.xhtml#l00062">62</a> of file <a class="el" href="_cl_backend_context_8cpp_source.xhtml">ClBackendContext.cpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;{</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; std::transform(value.begin(), value.end(), value.begin(),</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; [](<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> c){ <span class="keywordflow">return</span> std::tolower(c); });</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">return</span> value;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a952423703fa6b92f18d19df3995633b4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a952423703fa6b92f18d19df3995633b4">&#9670;&nbsp;</a></span>LstmImpl()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void LstmImpl </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_lstm_descriptor.xhtml">LstmDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>inputInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>outputInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> &amp;&#160;</td>
+ <td class="paramname"><em>inputToOutputWeightsShape</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> &amp;&#160;</td>
+ <td class="paramname"><em>recurrentToOutputWeightsShape</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
+ <td class="paramname"><em>inputData</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
+ <td class="paramname"><em>outputStateIn</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
+ <td class="paramname"><em>cellStateIn</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
+ <td class="paramname"><em>outputStateOut</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
+ <td class="paramname"><em>cellStateOut</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
+ <td class="paramname"><em>cellStateOutDecoder</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
+ <td class="paramname"><em>outputDecoder</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
+ <td class="paramname"><em>inputToInputWeightsTensor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
+ <td class="paramname"><em>inputToForgetWeightsTensor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
+ <td class="paramname"><em>inputToCellWeightsTensor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
+ <td class="paramname"><em>inputToOutputWeightsTensor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
+ <td class="paramname"><em>recurrentToInputWeightsTensor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
+ <td class="paramname"><em>recurrentToForgetWeightsTensor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
+ <td class="paramname"><em>recurrentToCellWeightsTensor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
+ <td class="paramname"><em>recurrentToOutputWeightsTensor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
+ <td class="paramname"><em>cellToInputWeightsTensor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
+ <td class="paramname"><em>cellToForgetWeightsTensor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
+ <td class="paramname"><em>cellToOutputWeightsTensor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
+ <td class="paramname"><em>inputGateBiasTensor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
+ <td class="paramname"><em>forgetGateBiasTensor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
+ <td class="paramname"><em>cellBiasTensor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
+ <td class="paramname"><em>outputGateBiasTensor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
+ <td class="paramname"><em>projectionWeightsTensor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
+ <td class="paramname"><em>projectionBiasTensor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
+ <td class="paramname"><em>inputLayerNormWeights</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
+ <td class="paramname"><em>forgetLayerNormWeights</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
+ <td class="paramname"><em>cellLayerNormWeights</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
+ <td class="paramname"><em>outputLayerNormWeights</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
+ <td class="paramname"><em>inputGateScratch</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
+ <td class="paramname"><em>cellScratch</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
+ <td class="paramname"><em>forgetGateScratch</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
+ <td class="paramname"><em>outputGateScratch</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
+ <td class="paramname"><em>inputGateScratchDecoder</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
+ <td class="paramname"><em>cellScratchDecoder</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
+ <td class="paramname"><em>forgetGateScratchDecoder</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt; &amp;&#160;</td>
+ <td class="paramname"><em>outputGateScratchDecoder</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float&#160;</td>
+ <td class="paramname"><em>layerNormEpsilon</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_lstm_8cpp_source.xhtml#l00013">13</a> of file <a class="el" href="_lstm_8cpp_source.xhtml">Lstm.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_activation_8cpp_source.xhtml#l00013">Activation()</a>, <a class="el" href="_lstm_utils_8cpp_source.xhtml#l00229">ClipVector()</a>, <a class="el" href="_lstm_utils_8cpp_source.xhtml#l00244">CopyVector()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00198">TensorInfo::GetDataType()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01104">LstmDescriptor::m_ActivationFunc</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01110">LstmDescriptor::m_CifgEnabled</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01106">LstmDescriptor::m_ClippingThresCell</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01108">LstmDescriptor::m_ClippingThresProj</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01116">LstmDescriptor::m_LayerNormEnabled</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01112">LstmDescriptor::m_PeepholeEnabled</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01114">LstmDescriptor::m_ProjectionEnabled</a>, <a class="el" href="_lstm_utils_8cpp_source.xhtml#l00087">MatrixBatchVectorMultiplyAccumulate()</a>, <a class="el" href="_lstm_utils_8cpp_source.xhtml#l00040">MeanStddevNormalization()</a>, <a class="el" href="_lstm_utils_8cpp_source.xhtml#l00258">SetActivationParameters()</a>, <a class="el" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa21eebb164e4b8b9bcf64fdb4d8d5dff4">Sigmoid</a>, <a class="el" href="_lstm_utils_8cpp_source.xhtml#l00173">Sub1Vector()</a>, <a class="el" href="_lstm_utils_8cpp_source.xhtml#l00016">VectorBatchVectorAdd()</a>, <a class="el" href="_lstm_utils_8cpp_source.xhtml#l00113">VectorBatchVectorAssign()</a>, <a class="el" href="_lstm_utils_8cpp_source.xhtml#l00152">VectorBatchVectorCwiseProduct()</a>, <a class="el" href="_lstm_utils_8cpp_source.xhtml#l00131">VectorBatchVectorCwiseProductAccumulate()</a>, <a class="el" href="_lstm_utils_8cpp_source.xhtml#l00187">VectorVectorCwiseProduct()</a>, <a class="el" href="_lstm_utils_8cpp_source.xhtml#l00204">VectorVectorCwiseProductAccumulate()</a>, and <a class="el" href="_lstm_utils_8cpp_source.xhtml#l00076">ZeroVector()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_ref_lstm_workload_8cpp_source.xhtml#l00047">RefLstmWorkload::ExecuteAsync()</a>, and <a class="el" href="_ref_unidirectional_sequence_lstm_workload_8cpp_source.xhtml#l00051">RefUnidirectionalSequenceLstmWorkload::ExecuteAsync()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;{</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="comment">// This is a porting of the LSTM::Eval() method in the Android code base</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="comment">// Refer to: android/frameworks/ml/nn/common/operations/LSTM.cpp</span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keyword">const</span> TensorShape&amp; inputShape = inputInfo.GetShape();</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>&amp; outputType = outputInfo.GetDataType();</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keyword">const</span> uint32_t nBatch = inputShape[0];</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keyword">const</span> uint32_t nInput = inputShape[1];</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keyword">const</span> uint32_t nCell = inputToOutputWeightsShape[0];</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keyword">const</span> uint32_t nOutput = recurrentToOutputWeightsShape[1];</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keyword">const</span> <span class="keywordtype">bool</span> useCifg = descriptor.m_CifgEnabled;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keyword">const</span> <span class="keywordtype">bool</span> usePeephole = descriptor.m_PeepholeEnabled;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keyword">const</span> <span class="keywordtype">bool</span> useLayerNorm = descriptor.m_LayerNormEnabled;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">if</span> (!useLayerNorm)</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; {</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="comment">// Initialize scratch buffers with bias.</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">if</span> (!useCifg)</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; {</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <a class="code" href="_lstm_utils_8cpp.xhtml#a8c4a96233c9b62c76d611316da11124b">VectorBatchVectorAssign</a>(*inputGateBiasTensor,</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; nCell, nBatch, *inputGateScratch);</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; }</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <a class="code" href="_lstm_utils_8cpp.xhtml#a8c4a96233c9b62c76d611316da11124b">VectorBatchVectorAssign</a>(*forgetGateBiasTensor,</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; nCell, nBatch, *forgetGateScratch);</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <a class="code" href="_lstm_utils_8cpp.xhtml#a8c4a96233c9b62c76d611316da11124b">VectorBatchVectorAssign</a>(*cellBiasTensor,</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; nCell, nBatch, *cellScratch);</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <a class="code" href="_lstm_utils_8cpp.xhtml#a8c4a96233c9b62c76d611316da11124b">VectorBatchVectorAssign</a>(*outputGateBiasTensor,</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; nCell, nBatch, *outputGateScratch);</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; }</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; {</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="comment">// Initialize scratch buffers with zeroes.</span></div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordflow">if</span> (!useCifg)</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; {</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <a class="code" href="_lstm_utils_8cpp.xhtml#a4c20bc573b70e89327b334f924da97b5">ZeroVector</a>(*inputGateScratch, nCell * nBatch);</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; }</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <a class="code" href="_lstm_utils_8cpp.xhtml#a4c20bc573b70e89327b334f924da97b5">ZeroVector</a>(*forgetGateScratch, nCell * nBatch);</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <a class="code" href="_lstm_utils_8cpp.xhtml#a4c20bc573b70e89327b334f924da97b5">ZeroVector</a>(*cellScratch , nCell * nBatch);</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <a class="code" href="_lstm_utils_8cpp.xhtml#a4c20bc573b70e89327b334f924da97b5">ZeroVector</a>(*outputGateScratch, nCell * nBatch);</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; }</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="comment">// For each batch and cell: compute input_weight * input.</span></div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">if</span> (!useCifg)</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; {</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <a class="code" href="_lstm_utils_8cpp.xhtml#ab93a2c78551c3d3aba8ddcafb792a36d">MatrixBatchVectorMultiplyAccumulate</a>(*inputToInputWeightsTensor,</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; nCell, nInput, *inputData, nBatch, *inputGateScratch);</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; }</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <a class="code" href="_lstm_utils_8cpp.xhtml#ab93a2c78551c3d3aba8ddcafb792a36d">MatrixBatchVectorMultiplyAccumulate</a>(*inputToForgetWeightsTensor,</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; nCell, nInput, *inputData, nBatch, *forgetGateScratch);</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <a class="code" href="_lstm_utils_8cpp.xhtml#ab93a2c78551c3d3aba8ddcafb792a36d">MatrixBatchVectorMultiplyAccumulate</a>(*inputToCellWeightsTensor,</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; nCell, nInput, *inputData, nBatch, *cellScratch);</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <a class="code" href="_lstm_utils_8cpp.xhtml#ab93a2c78551c3d3aba8ddcafb792a36d">MatrixBatchVectorMultiplyAccumulate</a>(*inputToOutputWeightsTensor,</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; nCell, nInput, *inputData, nBatch, *outputGateScratch);</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="comment">// For each batch and cell: compute recurrent_weight * output_state.</span></div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keywordflow">if</span> (!useCifg)</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; {</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <a class="code" href="_lstm_utils_8cpp.xhtml#ab93a2c78551c3d3aba8ddcafb792a36d">MatrixBatchVectorMultiplyAccumulate</a>(*recurrentToInputWeightsTensor,</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; nCell, nOutput, *outputStateIn, nBatch, *inputGateScratch);</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; }</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <a class="code" href="_lstm_utils_8cpp.xhtml#ab93a2c78551c3d3aba8ddcafb792a36d">MatrixBatchVectorMultiplyAccumulate</a>(*recurrentToForgetWeightsTensor,</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; nCell, nOutput, *outputStateIn, nBatch, *forgetGateScratch);</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <a class="code" href="_lstm_utils_8cpp.xhtml#ab93a2c78551c3d3aba8ddcafb792a36d">MatrixBatchVectorMultiplyAccumulate</a>(*recurrentToCellWeightsTensor,</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; nCell, nOutput, *outputStateIn, nBatch, *cellScratch);</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <a class="code" href="_lstm_utils_8cpp.xhtml#ab93a2c78551c3d3aba8ddcafb792a36d">MatrixBatchVectorMultiplyAccumulate</a>(*recurrentToOutputWeightsTensor,</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; nCell, nOutput, *outputStateIn, nBatch, *outputGateScratch);</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="comment">// For each batch and cell: update input gate.</span></div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordflow">if</span> (!useCifg)</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; {</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keywordflow">if</span> (usePeephole)</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; {</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <a class="code" href="_lstm_utils_8cpp.xhtml#a796323e16216b880043dc5ebbaa2372b">VectorBatchVectorCwiseProductAccumulate</a>(*cellToInputWeightsTensor,</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; nCell, *cellStateIn, nBatch, *inputGateScratch);</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; }</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordflow">if</span> (useLayerNorm)</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; {</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <a class="code" href="_lstm_utils_8cpp.xhtml#a0ed27dd6d6125a06bf654080f4184360">MeanStddevNormalization</a>(*inputGateScratchDecoder,</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; *inputGateScratch, nCell, nBatch, layerNormEpsilon);</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <a class="code" href="_lstm_utils_8cpp.xhtml#a1d7ad9698b02282a57fdb17b3af745f9">VectorBatchVectorCwiseProduct</a>(*inputLayerNormWeights,</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; nCell, *inputGateScratchDecoder, nBatch, *inputGateScratch);</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <a class="code" href="_lstm_utils_8cpp.xhtml#a389c4bbafd0fff7060cbb183f20a2134">VectorBatchVectorAdd</a>(*inputGateBiasTensor,</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; nCell, *inputGateScratchDecoder, nBatch, *inputGateScratch);</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; }</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <a class="code" href="namespacearmnn.xhtml#a7636fbbc4f8ea2d0cf9f3ac2d12a4c62">Activation</a>(*inputGateScratchDecoder, *inputGateScratch,</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; TensorInfo({nCell, nBatch}, outputType),</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; ActivationFunction::Sigmoid, 0, 0);</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; }</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="comment">// For each batch and cell: update forget gate.</span></div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keywordflow">if</span> (usePeephole)</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; {</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <a class="code" href="_lstm_utils_8cpp.xhtml#a796323e16216b880043dc5ebbaa2372b">VectorBatchVectorCwiseProductAccumulate</a>(*cellToForgetWeightsTensor, nCell,</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; *cellStateIn, nBatch, *forgetGateScratch);</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; }</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordflow">if</span> (useLayerNorm)</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; {</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <a class="code" href="_lstm_utils_8cpp.xhtml#a0ed27dd6d6125a06bf654080f4184360">MeanStddevNormalization</a>(*forgetGateScratchDecoder,</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; *forgetGateScratch, nCell, nBatch, layerNormEpsilon);</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <a class="code" href="_lstm_utils_8cpp.xhtml#a1d7ad9698b02282a57fdb17b3af745f9">VectorBatchVectorCwiseProduct</a>(*forgetLayerNormWeights,</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; nCell, *forgetGateScratchDecoder, nBatch, *forgetGateScratch);</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <a class="code" href="_lstm_utils_8cpp.xhtml#a389c4bbafd0fff7060cbb183f20a2134">VectorBatchVectorAdd</a>(*forgetGateBiasTensor,</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; nCell, *forgetGateScratchDecoder, nBatch, *forgetGateScratch);</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; }</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <a class="code" href="namespacearmnn.xhtml#a7636fbbc4f8ea2d0cf9f3ac2d12a4c62">Activation</a>(*forgetGateScratchDecoder, *forgetGateScratch,</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; TensorInfo({nCell, nBatch}, outputType),</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; ActivationFunction::Sigmoid, 0, 0);</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="comment">// For each batch and cell: update the cell.</span></div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordflow">if</span> (useLayerNorm)</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; {</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <a class="code" href="_lstm_utils_8cpp.xhtml#a0ed27dd6d6125a06bf654080f4184360">MeanStddevNormalization</a>(*cellScratchDecoder,</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; *cellScratch, nCell, nBatch, layerNormEpsilon);</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <a class="code" href="_lstm_utils_8cpp.xhtml#a1d7ad9698b02282a57fdb17b3af745f9">VectorBatchVectorCwiseProduct</a>(*cellLayerNormWeights,</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; nCell, *cellScratchDecoder, nBatch, *cellScratch);</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <a class="code" href="_lstm_utils_8cpp.xhtml#a389c4bbafd0fff7060cbb183f20a2134">VectorBatchVectorAdd</a>(*cellBiasTensor,</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; nCell, *cellScratchDecoder, nBatch, *cellScratch);</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; }</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160;</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <a class="code" href="_lstm_utils_8cpp.xhtml#a5b81dc0a1a9a2bccab8bb79dfa3e77b7">VectorVectorCwiseProduct</a>(*forgetGateScratchDecoder, *cellStateIn, nBatch * nCell, *cellStateOut);</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9ea">ActivationFunction</a> armnnActivationFunc = ActivationFunction::Sigmoid;</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keywordtype">float</span> a = 0;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keywordtype">float</span> b = 0;</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <a class="code" href="_lstm_utils_8cpp.xhtml#afc83b9418e9721cee21de245cb8533de">SetActivationParameters</a>(descriptor.m_ActivationFunc, armnnActivationFunc, a, b);</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keywordflow">if</span> (descriptor.m_ActivationFunc &gt; 0)</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; {</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <a class="code" href="namespacearmnn.xhtml#a7636fbbc4f8ea2d0cf9f3ac2d12a4c62">Activation</a>(*cellScratchDecoder, *cellScratch,</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; TensorInfo({nCell, nBatch}, outputType),</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; armnnActivationFunc, a, b);</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; }</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keywordflow">if</span> (useCifg)</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; {</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <a class="code" href="_lstm_utils_8cpp.xhtml#aca7bd1dff180b6a5de894537f8220793">Sub1Vector</a>(*forgetGateScratchDecoder, nBatch * nCell, *forgetGateScratch);</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <a class="code" href="_lstm_utils_8cpp.xhtml#a2e653f948d93f4177f267a7b1b4ed47d">VectorVectorCwiseProductAccumulate</a>(</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; *cellScratchDecoder, *forgetGateScratchDecoder, nBatch * nCell, *cellStateOut);</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; }</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; {</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <a class="code" href="_lstm_utils_8cpp.xhtml#a2e653f948d93f4177f267a7b1b4ed47d">VectorVectorCwiseProductAccumulate</a>(</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; *cellScratchDecoder, *inputGateScratchDecoder, nBatch * nCell, *cellStateOut);</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; }</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keywordflow">if</span> (descriptor.m_ClippingThresCell &gt; 0.0)</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; {</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <a class="code" href="_lstm_utils_8cpp.xhtml#a117781e8e9b7321722bbdd8ff74b484a">ClipVector</a>(*cellStateOutDecoder, nBatch * nCell, descriptor.m_ClippingThresCell, *cellStateOut);</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; }</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="comment">// For each batch and cell: update the output gate.</span></div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="keywordflow">if</span> (usePeephole)</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; {</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <a class="code" href="_lstm_utils_8cpp.xhtml#a796323e16216b880043dc5ebbaa2372b">VectorBatchVectorCwiseProductAccumulate</a>(*cellToOutputWeightsTensor,</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; nCell, *cellStateOutDecoder, nBatch, *outputGateScratch);</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; }</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keywordflow">if</span> (useLayerNorm)</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; {</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <a class="code" href="_lstm_utils_8cpp.xhtml#a0ed27dd6d6125a06bf654080f4184360">MeanStddevNormalization</a>(*outputGateScratchDecoder,</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; *outputGateScratch, nCell, nBatch, layerNormEpsilon);</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <a class="code" href="_lstm_utils_8cpp.xhtml#a1d7ad9698b02282a57fdb17b3af745f9">VectorBatchVectorCwiseProduct</a>(*outputLayerNormWeights,</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; nCell, *outputGateScratchDecoder, nBatch, *outputGateScratch);</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <a class="code" href="_lstm_utils_8cpp.xhtml#a389c4bbafd0fff7060cbb183f20a2134">VectorBatchVectorAdd</a>(*outputGateBiasTensor,</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; nCell, *outputGateScratchDecoder, nBatch, *outputGateScratch);</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; }</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <a class="code" href="namespacearmnn.xhtml#a7636fbbc4f8ea2d0cf9f3ac2d12a4c62">Activation</a>(*outputGateScratchDecoder, *outputGateScratch,</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; TensorInfo({nCell, nBatch}, outputType),</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; ActivationFunction::Sigmoid, 0, 0);</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160;</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keywordflow">if</span> (descriptor.m_ActivationFunc &gt; 0)</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; {</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <a class="code" href="namespacearmnn.xhtml#a7636fbbc4f8ea2d0cf9f3ac2d12a4c62">Activation</a>(*cellStateOutDecoder, *cellScratch,</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; TensorInfo({nCell, nBatch}, outputType),</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; armnnActivationFunc, a, b);</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; }</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <a class="code" href="_lstm_utils_8cpp.xhtml#a5b81dc0a1a9a2bccab8bb79dfa3e77b7">VectorVectorCwiseProduct</a>(*outputGateScratchDecoder, *cellScratchDecoder, nBatch * nCell, *outputGateScratch);</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="comment">// For each batch: update the projection and output_state.</span></div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="keywordflow">if</span> (descriptor.m_ProjectionEnabled)</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; {</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keywordflow">if</span> (projectionBiasTensor)</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; {</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <a class="code" href="_lstm_utils_8cpp.xhtml#a8c4a96233c9b62c76d611316da11124b">VectorBatchVectorAssign</a>(*projectionBiasTensor,</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; nOutput, nBatch, *output);</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; }</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <a class="code" href="_lstm_utils_8cpp.xhtml#ab93a2c78551c3d3aba8ddcafb792a36d">MatrixBatchVectorMultiplyAccumulate</a>(*projectionWeightsTensor,</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; nOutput, nCell, *outputGateScratchDecoder, nBatch, *output);</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160;</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keywordflow">if</span> (descriptor.m_ClippingThresProj &gt; 0.0)</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; {</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <a class="code" href="_lstm_utils_8cpp.xhtml#a117781e8e9b7321722bbdd8ff74b484a">ClipVector</a>(*outputDecoder, nBatch * nOutput, descriptor.m_ClippingThresProj, *output);</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; }</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; }</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; {</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <a class="code" href="_lstm_utils_8cpp.xhtml#a00d8a623c04f1120f6fee3fe38d1cee9">CopyVector</a>(*outputGateScratchDecoder, nBatch * nOutput, *output);</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; }</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <a class="code" href="_lstm_utils_8cpp.xhtml#a00d8a623c04f1120f6fee3fe38d1cee9">CopyVector</a>(*outputDecoder, nBatch * nOutput, *outputStateOut);</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160;}</div><div class="ttc" id="_lstm_utils_8cpp_xhtml_a0ed27dd6d6125a06bf654080f4184360"><div class="ttname"><a href="_lstm_utils_8cpp.xhtml#a0ed27dd6d6125a06bf654080f4184360">MeanStddevNormalization</a></div><div class="ttdeci">void MeanStddevNormalization(armnn::Decoder&lt; float &gt; &amp;input_vector, armnn::Encoder&lt; float &gt; &amp;output_vector, uint32_t v_size, uint32_t n_batch, float normalization_epsilon)</div><div class="ttdef"><b>Definition:</b> <a href="_lstm_utils_8cpp_source.xhtml#l00040">LstmUtils.cpp:40</a></div></div>
+<div class="ttc" id="_lstm_utils_8cpp_xhtml_a389c4bbafd0fff7060cbb183f20a2134"><div class="ttname"><a href="_lstm_utils_8cpp.xhtml#a389c4bbafd0fff7060cbb183f20a2134">VectorBatchVectorAdd</a></div><div class="ttdeci">void VectorBatchVectorAdd(armnn::Decoder&lt; float &gt; &amp;vector, uint32_t vSize, armnn::Decoder&lt; float &gt; &amp;batchVector, uint32_t nBatch, armnn::Encoder&lt; float &gt; &amp;outResult)</div><div class="ttdef"><b>Definition:</b> <a href="_lstm_utils_8cpp_source.xhtml#l00016">LstmUtils.cpp:16</a></div></div>
+<div class="ttc" id="_lstm_utils_8cpp_xhtml_a117781e8e9b7321722bbdd8ff74b484a"><div class="ttname"><a href="_lstm_utils_8cpp.xhtml#a117781e8e9b7321722bbdd8ff74b484a">ClipVector</a></div><div class="ttdeci">void ClipVector(armnn::Decoder&lt; float &gt; &amp;vector, uint32_t vSize, float absLimit, armnn::Encoder&lt; float &gt; &amp;outResult)</div><div class="ttdef"><b>Definition:</b> <a href="_lstm_utils_8cpp_source.xhtml#l00229">LstmUtils.cpp:229</a></div></div>
+<div class="ttc" id="_lstm_utils_8cpp_xhtml_aca7bd1dff180b6a5de894537f8220793"><div class="ttname"><a href="_lstm_utils_8cpp.xhtml#aca7bd1dff180b6a5de894537f8220793">Sub1Vector</a></div><div class="ttdeci">void Sub1Vector(armnn::Decoder&lt; float &gt; &amp;vector, uint32_t vSize, armnn::Encoder&lt; float &gt; &amp;result)</div><div class="ttdef"><b>Definition:</b> <a href="_lstm_utils_8cpp_source.xhtml#l00173">LstmUtils.cpp:173</a></div></div>
+<div class="ttc" id="_lstm_utils_8cpp_xhtml_a00d8a623c04f1120f6fee3fe38d1cee9"><div class="ttname"><a href="_lstm_utils_8cpp.xhtml#a00d8a623c04f1120f6fee3fe38d1cee9">CopyVector</a></div><div class="ttdeci">void CopyVector(armnn::Decoder&lt; float &gt; &amp;vector, uint32_t vSize, armnn::Encoder&lt; float &gt; &amp;outResult)</div><div class="ttdef"><b>Definition:</b> <a href="_lstm_utils_8cpp_source.xhtml#l00244">LstmUtils.cpp:244</a></div></div>
+<div class="ttc" id="_lstm_utils_8cpp_xhtml_a796323e16216b880043dc5ebbaa2372b"><div class="ttname"><a href="_lstm_utils_8cpp.xhtml#a796323e16216b880043dc5ebbaa2372b">VectorBatchVectorCwiseProductAccumulate</a></div><div class="ttdeci">void VectorBatchVectorCwiseProductAccumulate(armnn::Decoder&lt; float &gt; &amp;vector, uint32_t vSize, armnn::Decoder&lt; float &gt; &amp;batchVector, uint32_t nBatch, armnn::Encoder&lt; float &gt; &amp;outResult)</div><div class="ttdef"><b>Definition:</b> <a href="_lstm_utils_8cpp_source.xhtml#l00131">LstmUtils.cpp:131</a></div></div>
+<div class="ttc" id="_lstm_utils_8cpp_xhtml_a4c20bc573b70e89327b334f924da97b5"><div class="ttname"><a href="_lstm_utils_8cpp.xhtml#a4c20bc573b70e89327b334f924da97b5">ZeroVector</a></div><div class="ttdeci">void ZeroVector(armnn::Encoder&lt; float &gt; &amp;vector, uint32_t vSize)</div><div class="ttdef"><b>Definition:</b> <a href="_lstm_utils_8cpp_source.xhtml#l00076">LstmUtils.cpp:76</a></div></div>
+<div class="ttc" id="_lstm_utils_8cpp_xhtml_a5b81dc0a1a9a2bccab8bb79dfa3e77b7"><div class="ttname"><a href="_lstm_utils_8cpp.xhtml#a5b81dc0a1a9a2bccab8bb79dfa3e77b7">VectorVectorCwiseProduct</a></div><div class="ttdeci">void VectorVectorCwiseProduct(armnn::Decoder&lt; float &gt; &amp;vector1, armnn::Decoder&lt; float &gt; &amp;vector2, uint32_t vSize, armnn::Encoder&lt; float &gt; &amp;outResult)</div><div class="ttdef"><b>Definition:</b> <a href="_lstm_utils_8cpp_source.xhtml#l00187">LstmUtils.cpp:187</a></div></div>
+<div class="ttc" id="_lstm_utils_8cpp_xhtml_a1d7ad9698b02282a57fdb17b3af745f9"><div class="ttname"><a href="_lstm_utils_8cpp.xhtml#a1d7ad9698b02282a57fdb17b3af745f9">VectorBatchVectorCwiseProduct</a></div><div class="ttdeci">void VectorBatchVectorCwiseProduct(armnn::Decoder&lt; float &gt; &amp;vector, uint32_t vSize, armnn::Decoder&lt; float &gt; &amp;batchVector, uint32_t nBatch, armnn::Encoder&lt; float &gt; &amp;outResult)</div><div class="ttdef"><b>Definition:</b> <a href="_lstm_utils_8cpp_source.xhtml#l00152">LstmUtils.cpp:152</a></div></div>
+<div class="ttc" id="_lstm_utils_8cpp_xhtml_ab93a2c78551c3d3aba8ddcafb792a36d"><div class="ttname"><a href="_lstm_utils_8cpp.xhtml#ab93a2c78551c3d3aba8ddcafb792a36d">MatrixBatchVectorMultiplyAccumulate</a></div><div class="ttdeci">void MatrixBatchVectorMultiplyAccumulate(armnn::Decoder&lt; float &gt; &amp;matrix, uint32_t mRows, uint32_t mCols, armnn::Decoder&lt; float &gt; &amp;vector, uint32_t nBatch, armnn::Encoder&lt; float &gt; &amp;outResult)</div><div class="ttdef"><b>Definition:</b> <a href="_lstm_utils_8cpp_source.xhtml#l00087">LstmUtils.cpp:87</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a></div><div class="ttdeci">DataType</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00035">Types.hpp:35</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a7636fbbc4f8ea2d0cf9f3ac2d12a4c62"><div class="ttname"><a href="namespacearmnn.xhtml#a7636fbbc4f8ea2d0cf9f3ac2d12a4c62">armnn::Activation</a></div><div class="ttdeci">float Activation(float in, ActivationFunction function, float a, float b)</div><div class="ttdef"><b>Definition:</b> <a href="_activation_8cpp_source.xhtml#l00013">Activation.cpp:13</a></div></div>
+<div class="ttc" id="_lstm_utils_8cpp_xhtml_a2e653f948d93f4177f267a7b1b4ed47d"><div class="ttname"><a href="_lstm_utils_8cpp.xhtml#a2e653f948d93f4177f267a7b1b4ed47d">VectorVectorCwiseProductAccumulate</a></div><div class="ttdeci">void VectorVectorCwiseProductAccumulate(armnn::Decoder&lt; float &gt; &amp;vector1, armnn::Decoder&lt; float &gt; &amp;vector2, uint32_t vSize, armnn::Encoder&lt; float &gt; &amp;outResult)</div><div class="ttdef"><b>Definition:</b> <a href="_lstm_utils_8cpp_source.xhtml#l00204">LstmUtils.cpp:204</a></div></div>
+<div class="ttc" id="_lstm_utils_8cpp_xhtml_a8c4a96233c9b62c76d611316da11124b"><div class="ttname"><a href="_lstm_utils_8cpp.xhtml#a8c4a96233c9b62c76d611316da11124b">VectorBatchVectorAssign</a></div><div class="ttdeci">void VectorBatchVectorAssign(armnn::Decoder&lt; float &gt; &amp;vector, uint32_t vSize, uint32_t nBatch, armnn::Encoder&lt; float &gt; &amp;outBatchVector)</div><div class="ttdef"><b>Definition:</b> <a href="_lstm_utils_8cpp_source.xhtml#l00113">LstmUtils.cpp:113</a></div></div>
+<div class="ttc" id="_lstm_utils_8cpp_xhtml_afc83b9418e9721cee21de245cb8533de"><div class="ttname"><a href="_lstm_utils_8cpp.xhtml#afc83b9418e9721cee21de245cb8533de">SetActivationParameters</a></div><div class="ttdeci">void SetActivationParameters(uint32_t activation, armnn::ActivationFunction &amp;outArmnnActivation, float &amp;outA, float &amp;outB)</div><div class="ttdef"><b>Definition:</b> <a href="_lstm_utils_8cpp_source.xhtml#l00258">LstmUtils.cpp:258</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a56297e0f7b215eea46c818cb7528d9ea"><div class="ttname"><a href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9ea">armnn::ActivationFunction</a></div><div class="ttdeci">ActivationFunction</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00073">Types.hpp:73</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a1545cb162c5a64d75d9c0c05e8ea387c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1545cb162c5a64d75d9c0c05e8ea387c">&#9670;&nbsp;</a></span>MakeDecoder() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::unique_ptr&lt;<a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt;T&gt; &gt; armnn::MakeDecoder </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>info</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const void *&#160;</td>
+ <td class="paramname"><em>data</em> = <code>nullptr</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_decoders_8hpp_source.xhtml#l00066">66</a> of file <a class="el" href="_decoders_8hpp_source.xhtml">Decoders.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00015">ARMNN_ASSERT_MSG</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">BFloat16</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">Boolean</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">Float16</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">Float32</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00198">TensorInfo::GetDataType()</a>, <a class="el" href="_tensor_utils_8cpp_source.xhtml#l00173">armnnUtils::GetPerAxisParams()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00480">TensorInfo::GetQuantizationOffset()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00463">TensorInfo::GetQuantizationScale()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00448">TensorInfo::HasPerAxisQuantization()</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">QAsymmS8</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">QAsymmU8</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">QSymmS16</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">QSymmS8</a>, and <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">Signed32</a>.</p>
+<div class="fragment"><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;{</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">switch</span>(<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetDataType())</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; {</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmS8:</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; {</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;QASymmS8Decoder&gt;(</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keyword">static_cast&lt;</span><span class="keyword">const </span>int8_t*<span class="keyword">&gt;</span>(data),</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; }</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmU8:</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; {</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;QASymm8Decoder&gt;(</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keyword">static_cast&lt;</span><span class="keyword">const </span>uint8_t*<span class="keyword">&gt;</span>(data),</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; }</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS16:</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; {</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;QSymm16Decoder&gt;(</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keyword">static_cast&lt;</span><span class="keyword">const </span>int16_t*<span class="keyword">&gt;</span>(data),</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; }</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordflow">case</span> DataType::BFloat16:</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; {</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;BFloat16Decoder&gt;(<span class="keyword">static_cast&lt;</span><span class="keyword">const </span><a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">BFloat16</a>*<span class="keyword">&gt;</span>(data));</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; }</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordflow">case</span> DataType::Float16:</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; {</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;Float16Decoder&gt;(<span class="keyword">static_cast&lt;</span><span class="keyword">const </span><a class="code" href="namespacearmnn.xhtml#a0f38fa92b2468d5378258a2b074c1a31">Half</a>*<span class="keyword">&gt;</span>(data));</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; }</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordflow">case</span> DataType::Float32:</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; {</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;Float32Decoder&gt;(<span class="keyword">static_cast&lt;</span><span class="keyword">const </span><span class="keywordtype">float</span>*<span class="keyword">&gt;</span>(data));</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; }</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordflow">case</span> DataType::Signed32:</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; {</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keywordflow">return</span> MakeSigned32Decoder(info, data);</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; }</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS8:</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; {</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.HasPerAxisQuantization())</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; {</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; std::pair&lt;unsigned int, std::vector&lt;float&gt;&gt; params = <a class="code" href="namespacearmnn_utils.xhtml#a1826e433f7e6817976a8175b4ef8296c">armnnUtils::GetPerAxisParams</a>(info);</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;QSymm8PerAxisDecoder&gt;(<span class="keyword">static_cast&lt;</span><span class="keyword">const </span>int8_t*<span class="keyword">&gt;</span>(data), info);</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; }</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; {</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;QSymmS8Decoder&gt;(</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keyword">static_cast&lt;</span><span class="keyword">const </span>int8_t*<span class="keyword">&gt;</span>(data),</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; }</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; }</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">armnn::DataType::Boolean</a>:</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; {</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;BooleanDecoder&gt;(<span class="keyword">static_cast&lt;</span><span class="keyword">const </span>uint8_t*<span class="keyword">&gt;</span>(data));</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; }</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; {</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;Unsupported Data Type!&quot;</span>);</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; }</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; }</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">armnn::DataType::Boolean</a></div></div>
+<div class="ttc" id="namespacearmnn_utils_xhtml_a1826e433f7e6817976a8175b4ef8296c"><div class="ttname"><a href="namespacearmnn_utils.xhtml#a1826e433f7e6817976a8175b4ef8296c">armnnUtils::GetPerAxisParams</a></div><div class="ttdeci">std::pair&lt; unsigned int, std::vector&lt; float &gt; &gt; GetPerAxisParams(const armnn::TensorInfo &amp;info)</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_utils_8cpp_source.xhtml#l00173">TensorUtils.cpp:173</a></div></div>
+<div class="ttc" id="_assert_8hpp_xhtml_a91c4dfde57907d7698c7531785690a7f"><div class="ttname"><a href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a></div><div class="ttdeci">#define ARMNN_ASSERT_MSG(COND, MSG)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00015">Assert.hpp:15</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">armnn::DataType::BFloat16</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c"><div class="ttname"><a href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">armnn::BoostLogSeverityMapping::info</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a0f38fa92b2468d5378258a2b074c1a31"><div class="ttname"><a href="namespacearmnn.xhtml#a0f38fa92b2468d5378258a2b074c1a31">armnn::Half</a></div><div class="ttdeci">half_float::half Half</div><div class="ttdef"><b>Definition:</b> <a href="_half_8hpp_source.xhtml#l00018">Half.hpp:18</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="adb59a379c467b6d48874e946183b4d21"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adb59a379c467b6d48874e946183b4d21">&#9670;&nbsp;</a></span>MakeDecoder() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::unique_ptr&lt;<a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt;float&gt; &gt; armnn::MakeDecoder </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>info</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const void *&#160;</td>
+ <td class="paramname"><em>data</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_decoders_8hpp_source.xhtml#l00066">66</a> of file <a class="el" href="_decoders_8hpp_source.xhtml">Decoders.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00015">ARMNN_ASSERT_MSG</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">BFloat16</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">Boolean</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">Float16</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">Float32</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00198">TensorInfo::GetDataType()</a>, <a class="el" href="_tensor_utils_8cpp_source.xhtml#l00173">armnnUtils::GetPerAxisParams()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00480">TensorInfo::GetQuantizationOffset()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00463">TensorInfo::GetQuantizationScale()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00448">TensorInfo::HasPerAxisQuantization()</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">QAsymmS8</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">QAsymmU8</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">QSymmS16</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">QSymmS8</a>, and <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">Signed32</a>.</p>
+<div class="fragment"><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;{</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">switch</span>(<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetDataType())</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; {</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmS8:</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; {</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;QASymmS8Decoder&gt;(</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keyword">static_cast&lt;</span><span class="keyword">const </span>int8_t*<span class="keyword">&gt;</span>(data),</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; }</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmU8:</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; {</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;QASymm8Decoder&gt;(</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keyword">static_cast&lt;</span><span class="keyword">const </span>uint8_t*<span class="keyword">&gt;</span>(data),</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; }</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS16:</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; {</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;QSymm16Decoder&gt;(</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keyword">static_cast&lt;</span><span class="keyword">const </span>int16_t*<span class="keyword">&gt;</span>(data),</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; }</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordflow">case</span> DataType::BFloat16:</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; {</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;BFloat16Decoder&gt;(<span class="keyword">static_cast&lt;</span><span class="keyword">const </span><a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">BFloat16</a>*<span class="keyword">&gt;</span>(data));</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; }</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordflow">case</span> DataType::Float16:</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; {</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;Float16Decoder&gt;(<span class="keyword">static_cast&lt;</span><span class="keyword">const </span><a class="code" href="namespacearmnn.xhtml#a0f38fa92b2468d5378258a2b074c1a31">Half</a>*<span class="keyword">&gt;</span>(data));</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; }</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordflow">case</span> DataType::Float32:</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; {</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;Float32Decoder&gt;(<span class="keyword">static_cast&lt;</span><span class="keyword">const </span><span class="keywordtype">float</span>*<span class="keyword">&gt;</span>(data));</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; }</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordflow">case</span> DataType::Signed32:</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; {</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keywordflow">return</span> MakeSigned32Decoder(info, data);</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; }</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS8:</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; {</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.HasPerAxisQuantization())</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; {</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; std::pair&lt;unsigned int, std::vector&lt;float&gt;&gt; params = <a class="code" href="namespacearmnn_utils.xhtml#a1826e433f7e6817976a8175b4ef8296c">armnnUtils::GetPerAxisParams</a>(info);</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;QSymm8PerAxisDecoder&gt;(<span class="keyword">static_cast&lt;</span><span class="keyword">const </span>int8_t*<span class="keyword">&gt;</span>(data), info);</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; }</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; {</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;QSymmS8Decoder&gt;(</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keyword">static_cast&lt;</span><span class="keyword">const </span>int8_t*<span class="keyword">&gt;</span>(data),</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; }</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; }</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">armnn::DataType::Boolean</a>:</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; {</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;BooleanDecoder&gt;(<span class="keyword">static_cast&lt;</span><span class="keyword">const </span>uint8_t*<span class="keyword">&gt;</span>(data));</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; }</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; {</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;Unsupported Data Type!&quot;</span>);</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; }</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; }</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">armnn::DataType::Boolean</a></div></div>
+<div class="ttc" id="namespacearmnn_utils_xhtml_a1826e433f7e6817976a8175b4ef8296c"><div class="ttname"><a href="namespacearmnn_utils.xhtml#a1826e433f7e6817976a8175b4ef8296c">armnnUtils::GetPerAxisParams</a></div><div class="ttdeci">std::pair&lt; unsigned int, std::vector&lt; float &gt; &gt; GetPerAxisParams(const armnn::TensorInfo &amp;info)</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_utils_8cpp_source.xhtml#l00173">TensorUtils.cpp:173</a></div></div>
+<div class="ttc" id="_assert_8hpp_xhtml_a91c4dfde57907d7698c7531785690a7f"><div class="ttname"><a href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a></div><div class="ttdeci">#define ARMNN_ASSERT_MSG(COND, MSG)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00015">Assert.hpp:15</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">armnn::DataType::BFloat16</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c"><div class="ttname"><a href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">armnn::BoostLogSeverityMapping::info</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a0f38fa92b2468d5378258a2b074c1a31"><div class="ttname"><a href="namespacearmnn.xhtml#a0f38fa92b2468d5378258a2b074c1a31">armnn::Half</a></div><div class="ttdeci">half_float::half Half</div><div class="ttdef"><b>Definition:</b> <a href="_half_8hpp_source.xhtml#l00018">Half.hpp:18</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a59c4fab5981602d8117d0b024eafd9ec"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a59c4fab5981602d8117d0b024eafd9ec">&#9670;&nbsp;</a></span>MakeDecoder() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::unique_ptr&lt;<a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt;bool&gt; &gt; armnn::MakeDecoder </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>info</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const void *&#160;</td>
+ <td class="paramname"><em>data</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_decoders_8hpp_source.xhtml#l00136">136</a> of file <a class="el" href="_decoders_8hpp_source.xhtml">Decoders.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00015">ARMNN_ASSERT_MSG</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">Boolean</a>, and <a class="el" href="_tensor_8hpp_source.xhtml#l00198">TensorInfo::GetDataType()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;{</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordflow">switch</span>(<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetDataType())</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; {</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keywordflow">case</span> DataType::Boolean:</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; {</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;BooleanDecoderBool&gt;(<span class="keyword">static_cast&lt;</span><span class="keyword">const </span>uint8_t*<span class="keyword">&gt;</span>(data));</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; }</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; {</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;Unsupported Data Type!&quot;</span>);</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; }</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; }</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;}</div><div class="ttc" id="_assert_8hpp_xhtml_a91c4dfde57907d7698c7531785690a7f"><div class="ttname"><a href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a></div><div class="ttdeci">#define ARMNN_ASSERT_MSG(COND, MSG)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00015">Assert.hpp:15</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c"><div class="ttname"><a href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">armnn::BoostLogSeverityMapping::info</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a21c5697c38df92463d1e767db8a95267"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a21c5697c38df92463d1e767db8a95267">&#9670;&nbsp;</a></span>MakeDecoder() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::unique_ptr&lt;<a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt;int32_t&gt; &gt; armnn::MakeDecoder </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>info</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const void *&#160;</td>
+ <td class="paramname"><em>data</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_decoders_8hpp_source.xhtml#l00154">154</a> of file <a class="el" href="_decoders_8hpp_source.xhtml">Decoders.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00015">ARMNN_ASSERT_MSG</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00198">TensorInfo::GetDataType()</a>, and <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">Signed32</a>.</p>
+<div class="fragment"><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;{</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keywordflow">switch</span>(<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetDataType())</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; {</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="keywordflow">case</span> DataType::Signed32:</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; {</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;Int32ToInt32tDecoder&gt;(<span class="keyword">static_cast&lt;</span><span class="keyword">const </span>int32_t*<span class="keyword">&gt;</span>(data));</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; }</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; {</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;Unsupported Data Type!&quot;</span>);</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; }</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; }</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;}</div><div class="ttc" id="_assert_8hpp_xhtml_a91c4dfde57907d7698c7531785690a7f"><div class="ttname"><a href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a></div><div class="ttdeci">#define ARMNN_ASSERT_MSG(COND, MSG)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00015">Assert.hpp:15</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c"><div class="ttname"><a href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">armnn::BoostLogSeverityMapping::info</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a56867cc5245724ab56953604b1eec9ee"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a56867cc5245724ab56953604b1eec9ee">&#9670;&nbsp;</a></span>MakeEncoder() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::unique_ptr&lt;<a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt;T&gt; &gt; armnn::MakeEncoder </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>info</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void *&#160;</td>
+ <td class="paramname"><em>data</em> = <code>nullptr</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_encoders_8hpp_source.xhtml#l00021">21</a> of file <a class="el" href="_encoders_8hpp_source.xhtml">Encoders.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00015">ARMNN_ASSERT_MSG</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">BFloat16</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">Boolean</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">Float16</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">Float32</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00198">TensorInfo::GetDataType()</a>, <a class="el" href="_tensor_utils_8cpp_source.xhtml#l00173">armnnUtils::GetPerAxisParams()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00480">TensorInfo::GetQuantizationOffset()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00463">TensorInfo::GetQuantizationScale()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00448">TensorInfo::HasPerAxisQuantization()</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">QAsymmS8</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">QAsymmU8</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">QSymmS16</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">QSymmS8</a>, and <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">Signed32</a>.</p>
+<div class="fragment"><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;{</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordflow">switch</span>(<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetDataType())</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; {</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">armnn::DataType::QAsymmS8</a>:</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; {</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;QASymmS8Encoder&gt;(</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keyword">static_cast&lt;</span>int8_t*<span class="keyword">&gt;</span>(data),</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; }</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">armnn::DataType::QAsymmU8</a>:</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; {</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;QASymm8Encoder&gt;(</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">static_cast&lt;</span>uint8_t*<span class="keyword">&gt;</span>(data),</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; }</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS8:</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; {</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.HasPerAxisQuantization())</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; {</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; std::pair&lt;unsigned int, std::vector&lt;float&gt;&gt; params = <a class="code" href="namespacearmnn_utils.xhtml#a1826e433f7e6817976a8175b4ef8296c">armnnUtils::GetPerAxisParams</a>(info);</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;QSymm8PerAxisEncoder&gt;(</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keyword">static_cast&lt;</span>int8_t*<span class="keyword">&gt;</span>(data),</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; params.second,</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; params.first);</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; }</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; {</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;QSymmS8Encoder&gt;(</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keyword">static_cast&lt;</span>int8_t*<span class="keyword">&gt;</span>(data),</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; }</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; }</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">armnn::DataType::QSymmS16</a>:</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; {</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;QSymm16Encoder&gt;(</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keyword">static_cast&lt;</span>int16_t*<span class="keyword">&gt;</span>(data),</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; }</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">armnn::DataType::Signed32</a>:</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; {</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;Int32Encoder&gt;(<span class="keyword">static_cast&lt;</span>int32_t*<span class="keyword">&gt;</span>(data));</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; }</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">armnn::DataType::BFloat16</a>:</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; {</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;BFloat16Encoder&gt;(<span class="keyword">static_cast&lt;</span><a class="code" href="classarmnn_1_1_b_float16.xhtml">armnn::BFloat16</a>*<span class="keyword">&gt;</span>(data));</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; }</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">armnn::DataType::Float16</a>:</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; {</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;Float16Encoder&gt;(<span class="keyword">static_cast&lt;</span><a class="code" href="namespacearmnn.xhtml#a0f38fa92b2468d5378258a2b074c1a31">Half</a>*<span class="keyword">&gt;</span>(data));</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; }</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a>:</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; {</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;Float32Encoder&gt;(<span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span>*<span class="keyword">&gt;</span>(data));</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; }</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; {</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;Unsupported target Data Type!&quot;</span>);</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; }</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; }</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">armnn::DataType::Signed32</a></div></div>
+<div class="ttc" id="classarmnn_1_1_b_float16_xhtml"><div class="ttname"><a href="classarmnn_1_1_b_float16.xhtml">armnn::BFloat16</a></div><div class="ttdef"><b>Definition:</b> <a href="_b_float16_8hpp_source.xhtml#l00015">BFloat16.hpp:15</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">armnn::DataType::QAsymmS8</a></div></div>
+<div class="ttc" id="namespacearmnn_utils_xhtml_a1826e433f7e6817976a8175b4ef8296c"><div class="ttname"><a href="namespacearmnn_utils.xhtml#a1826e433f7e6817976a8175b4ef8296c">armnnUtils::GetPerAxisParams</a></div><div class="ttdeci">std::pair&lt; unsigned int, std::vector&lt; float &gt; &gt; GetPerAxisParams(const armnn::TensorInfo &amp;info)</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_utils_8cpp_source.xhtml#l00173">TensorUtils.cpp:173</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">armnn::DataType::QSymmS16</a></div></div>
+<div class="ttc" id="_assert_8hpp_xhtml_a91c4dfde57907d7698c7531785690a7f"><div class="ttname"><a href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a></div><div class="ttdeci">#define ARMNN_ASSERT_MSG(COND, MSG)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00015">Assert.hpp:15</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">armnn::DataType::QAsymmU8</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">armnn::DataType::Float16</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">armnn::DataType::BFloat16</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c"><div class="ttname"><a href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">armnn::BoostLogSeverityMapping::info</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a0f38fa92b2468d5378258a2b074c1a31"><div class="ttname"><a href="namespacearmnn.xhtml#a0f38fa92b2468d5378258a2b074c1a31">armnn::Half</a></div><div class="ttdeci">half_float::half Half</div><div class="ttdef"><b>Definition:</b> <a href="_half_8hpp_source.xhtml#l00018">Half.hpp:18</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a363da7c8d642ea382e3bd2f1c6283d52"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a363da7c8d642ea382e3bd2f1c6283d52">&#9670;&nbsp;</a></span>MakeEncoder() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::unique_ptr&lt;<a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt;float&gt; &gt; armnn::MakeEncoder </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>info</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void *&#160;</td>
+ <td class="paramname"><em>data</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_encoders_8hpp_source.xhtml#l00021">21</a> of file <a class="el" href="_encoders_8hpp_source.xhtml">Encoders.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00015">ARMNN_ASSERT_MSG</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">BFloat16</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">Float16</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">Float32</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00198">TensorInfo::GetDataType()</a>, <a class="el" href="_tensor_utils_8cpp_source.xhtml#l00173">armnnUtils::GetPerAxisParams()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00480">TensorInfo::GetQuantizationOffset()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00463">TensorInfo::GetQuantizationScale()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00448">TensorInfo::HasPerAxisQuantization()</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">QAsymmS8</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">QAsymmU8</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">QSymmS16</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">QSymmS8</a>, and <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">Signed32</a>.</p>
+<div class="fragment"><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;{</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordflow">switch</span>(<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetDataType())</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; {</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">armnn::DataType::QAsymmS8</a>:</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; {</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;QASymmS8Encoder&gt;(</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keyword">static_cast&lt;</span>int8_t*<span class="keyword">&gt;</span>(data),</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; }</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">armnn::DataType::QAsymmU8</a>:</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; {</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;QASymm8Encoder&gt;(</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">static_cast&lt;</span>uint8_t*<span class="keyword">&gt;</span>(data),</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; }</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS8:</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; {</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.HasPerAxisQuantization())</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; {</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; std::pair&lt;unsigned int, std::vector&lt;float&gt;&gt; params = <a class="code" href="namespacearmnn_utils.xhtml#a1826e433f7e6817976a8175b4ef8296c">armnnUtils::GetPerAxisParams</a>(info);</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;QSymm8PerAxisEncoder&gt;(</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keyword">static_cast&lt;</span>int8_t*<span class="keyword">&gt;</span>(data),</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; params.second,</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; params.first);</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; }</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; {</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;QSymmS8Encoder&gt;(</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keyword">static_cast&lt;</span>int8_t*<span class="keyword">&gt;</span>(data),</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; }</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; }</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">armnn::DataType::QSymmS16</a>:</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; {</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;QSymm16Encoder&gt;(</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keyword">static_cast&lt;</span>int16_t*<span class="keyword">&gt;</span>(data),</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; }</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">armnn::DataType::Signed32</a>:</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; {</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;Int32Encoder&gt;(<span class="keyword">static_cast&lt;</span>int32_t*<span class="keyword">&gt;</span>(data));</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; }</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">armnn::DataType::BFloat16</a>:</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; {</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;BFloat16Encoder&gt;(<span class="keyword">static_cast&lt;</span><a class="code" href="classarmnn_1_1_b_float16.xhtml">armnn::BFloat16</a>*<span class="keyword">&gt;</span>(data));</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; }</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">armnn::DataType::Float16</a>:</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; {</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;Float16Encoder&gt;(<span class="keyword">static_cast&lt;</span><a class="code" href="namespacearmnn.xhtml#a0f38fa92b2468d5378258a2b074c1a31">Half</a>*<span class="keyword">&gt;</span>(data));</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; }</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a>:</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; {</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;Float32Encoder&gt;(<span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span>*<span class="keyword">&gt;</span>(data));</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; }</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; {</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;Unsupported target Data Type!&quot;</span>);</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; }</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; }</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">armnn::DataType::Signed32</a></div></div>
+<div class="ttc" id="classarmnn_1_1_b_float16_xhtml"><div class="ttname"><a href="classarmnn_1_1_b_float16.xhtml">armnn::BFloat16</a></div><div class="ttdef"><b>Definition:</b> <a href="_b_float16_8hpp_source.xhtml#l00015">BFloat16.hpp:15</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">armnn::DataType::QAsymmS8</a></div></div>
+<div class="ttc" id="namespacearmnn_utils_xhtml_a1826e433f7e6817976a8175b4ef8296c"><div class="ttname"><a href="namespacearmnn_utils.xhtml#a1826e433f7e6817976a8175b4ef8296c">armnnUtils::GetPerAxisParams</a></div><div class="ttdeci">std::pair&lt; unsigned int, std::vector&lt; float &gt; &gt; GetPerAxisParams(const armnn::TensorInfo &amp;info)</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_utils_8cpp_source.xhtml#l00173">TensorUtils.cpp:173</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">armnn::DataType::QSymmS16</a></div></div>
+<div class="ttc" id="_assert_8hpp_xhtml_a91c4dfde57907d7698c7531785690a7f"><div class="ttname"><a href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a></div><div class="ttdeci">#define ARMNN_ASSERT_MSG(COND, MSG)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00015">Assert.hpp:15</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">armnn::DataType::QAsymmU8</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">armnn::DataType::Float16</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">armnn::DataType::BFloat16</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c"><div class="ttname"><a href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">armnn::BoostLogSeverityMapping::info</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a0f38fa92b2468d5378258a2b074c1a31"><div class="ttname"><a href="namespacearmnn.xhtml#a0f38fa92b2468d5378258a2b074c1a31">armnn::Half</a></div><div class="ttdeci">half_float::half Half</div><div class="ttdef"><b>Definition:</b> <a href="_half_8hpp_source.xhtml#l00018">Half.hpp:18</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a6fcd01a9cdee158d3022ad089c27c078"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6fcd01a9cdee158d3022ad089c27c078">&#9670;&nbsp;</a></span>MakeEncoder() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::unique_ptr&lt;<a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt;bool&gt; &gt; armnn::MakeEncoder </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>info</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void *&#160;</td>
+ <td class="paramname"><em>data</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_encoders_8hpp_source.xhtml#l00090">90</a> of file <a class="el" href="_encoders_8hpp_source.xhtml">Encoders.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00015">ARMNN_ASSERT_MSG</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">Boolean</a>, and <a class="el" href="_tensor_8hpp_source.xhtml#l00198">TensorInfo::GetDataType()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;{</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordflow">switch</span>(<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetDataType())</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; {</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">armnn::DataType::Boolean</a>:</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; {</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;BooleanEncoder&gt;(<span class="keyword">static_cast&lt;</span>uint8_t*<span class="keyword">&gt;</span>(data));</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; }</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; {</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;Cannot encode from boolean. Not supported target Data Type!&quot;</span>);</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; }</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; }</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">armnn::DataType::Boolean</a></div></div>
+<div class="ttc" id="_assert_8hpp_xhtml_a91c4dfde57907d7698c7531785690a7f"><div class="ttname"><a href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a></div><div class="ttdeci">#define ARMNN_ASSERT_MSG(COND, MSG)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00015">Assert.hpp:15</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c"><div class="ttname"><a href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">armnn::BoostLogSeverityMapping::info</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ae5cb90ec4c498ed366d2ca03a270ab91"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae5cb90ec4c498ed366d2ca03a270ab91">&#9670;&nbsp;</a></span>MakeEncoder() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::unique_ptr&lt;<a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt;int32_t&gt; &gt; armnn::MakeEncoder </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>info</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void *&#160;</td>
+ <td class="paramname"><em>data</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_encoders_8hpp_source.xhtml#l00108">108</a> of file <a class="el" href="_encoders_8hpp_source.xhtml">Encoders.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00015">ARMNN_ASSERT_MSG</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00198">TensorInfo::GetDataType()</a>, and <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">Signed32</a>.</p>
+<div class="fragment"><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;{</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordflow">switch</span>(<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetDataType())</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; {</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordflow">case</span> DataType::Signed32:</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; {</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;Int32ToInt32tEncoder&gt;(<span class="keyword">static_cast&lt;</span>int32_t*<span class="keyword">&gt;</span>(data));</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; }</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; {</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;Unsupported Data Type!&quot;</span>);</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; }</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; }</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;}</div><div class="ttc" id="_assert_8hpp_xhtml_a91c4dfde57907d7698c7531785690a7f"><div class="ttname"><a href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a></div><div class="ttdeci">#define ARMNN_ASSERT_MSG(COND, MSG)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00015">Assert.hpp:15</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c"><div class="ttname"><a href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">armnn::BoostLogSeverityMapping::info</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a35d5394615a3062b629db056d414ae4f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a35d5394615a3062b629db056d414ae4f">&#9670;&nbsp;</a></span>MakeInfo()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::DetectionPostProcessLayerInfo armnn::MakeInfo </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_detection_post_process_descriptor.xhtml">DetectionPostProcessDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_detection_post_process_workload_8cpp_source.xhtml#l00017">17</a> of file <a class="el" href="_neon_detection_post_process_workload_8cpp_source.xhtml">NeonDetectionPostProcessWorkload.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_descriptors_8hpp_source.xhtml#l00709">DetectionPostProcessDescriptor::m_DetectionsPerClass</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00707">DetectionPostProcessDescriptor::m_MaxClassesPerDetection</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00705">DetectionPostProcessDescriptor::m_MaxDetections</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00713">DetectionPostProcessDescriptor::m_NmsIouThreshold</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00711">DetectionPostProcessDescriptor::m_NmsScoreThreshold</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00715">DetectionPostProcessDescriptor::m_NumClasses</a>, and <a class="el" href="_descriptors_8hpp_source.xhtml#l00717">DetectionPostProcessDescriptor::m_UseRegularNms</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_detection_post_process_workload_8cpp_source.xhtml#l00032">NeonDetectionPostProcessValidate()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;{</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keywordflow">return</span> arm_compute::DetectionPostProcessLayerInfo(descriptor.m_MaxDetections,</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; descriptor.m_MaxClassesPerDetection,</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; descriptor.m_NmsScoreThreshold,</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; descriptor.m_NmsIouThreshold,</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; descriptor.m_NumClasses,</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; { descriptor.m_ScaleX,</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; descriptor.m_ScaleY,</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; descriptor.m_ScaleW,</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; descriptor.m_ScaleH },</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; descriptor.m_UseRegularNms,</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; descriptor.m_DetectionsPerClass);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="aa7427025a851113a492de0b68b23d22a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa7427025a851113a492de0b68b23d22a">&#9670;&nbsp;</a></span>MakeOptimizations()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classarmnn_1_1_optimizer.xhtml#ad1794808004025d6e06c176507197b24">Optimizer::Optimizations</a> armnn::MakeOptimizations </td>
+ <td>(</td>
+ <td class="paramtype">Args &amp;&amp;...&#160;</td>
+ <td class="paramname"><em>args</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_optimizer_8hpp_source.xhtml#l00043">43</a> of file <a class="el" href="_optimizer_8hpp_source.xhtml">Optimizer.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_optimizer_8hpp_source.xhtml#l00030">Append()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.xhtml#l01680">Optimize()</a>, and <a class="el" href="_add_broadcast_reshape_layer_tests_8cpp_source.xhtml#l00015">TEST_SUITE()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;{</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; Optimizer::Optimizations optimizations;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <a class="code" href="namespacearmnn.xhtml#a0c8a28b71e49c04596289ff281e58f1a">Append</a>(optimizations, std::forward&lt;Args&gt;(args)...);</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">return</span> optimizations;</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a0c8a28b71e49c04596289ff281e58f1a"><div class="ttname"><a href="namespacearmnn.xhtml#a0c8a28b71e49c04596289ff281e58f1a">armnn::Append</a></div><div class="ttdeci">void Append(Optimizer::Optimizations &amp;optimizations, Front &amp;&amp;front, Others &amp;&amp;... others)</div><div class="ttdef"><b>Definition:</b> <a href="_optimizer_8hpp_source.xhtml#l00036">Optimizer.hpp:36</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a77780137c47f528921f6537447060f05"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a77780137c47f528921f6537447060f05">&#9670;&nbsp;</a></span>MakeOptional()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt;T&gt; armnn::MakeOptional </td>
+ <td>(</td>
+ <td class="paramtype">Args &amp;&amp;...&#160;</td>
+ <td class="paramname"><em>args</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Utility template that constructs an object of type T in-place and wraps it inside an Optional&lt;T&gt; object. </p>
+
+<p class="definition">Definition at line <a class="el" href="_optional_8hpp_source.xhtml#l00305">305</a> of file <a class="el" href="_optional_8hpp_source.xhtml">Optional.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_optional_8hpp_source.xhtml#l00041">CONSTRUCT_IN_PLACE</a>.</p>
+<div class="fragment"><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160;{</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <span class="keywordflow">return</span> Optional&lt;T&gt;(<a class="code" href="_optional_8hpp.xhtml#acbec11f88a308826fa811f370d363a4a">CONSTRUCT_IN_PLACE</a>, std::forward&lt;Args&gt;(args)...);</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;}</div><div class="ttc" id="_optional_8hpp_xhtml_acbec11f88a308826fa811f370d363a4a"><div class="ttname"><a href="_optional_8hpp.xhtml#acbec11f88a308826fa811f370d363a4a">CONSTRUCT_IN_PLACE</a></div><div class="ttdeci">#define CONSTRUCT_IN_PLACE</div><div class="ttdef"><b>Definition:</b> <a href="_optional_8hpp_source.xhtml#l00041">Optional.hpp:41</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a2cf1ea7140f419eba6d60d01dd0a795a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2cf1ea7140f419eba6d60d01dd0a795a">&#9670;&nbsp;</a></span>MakeTransformIterator()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="classarmnn_1_1_transform_iterator.xhtml">TransformIterator</a>&lt;Function, Iterator&gt; armnn::MakeTransformIterator </td>
+ <td>(</td>
+ <td class="paramtype">Iterator&#160;</td>
+ <td class="paramname"><em>i</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Function&#160;</td>
+ <td class="paramname"><em>f</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_transform_iterator_8hpp_source.xhtml#l00081">81</a> of file <a class="el" href="_transform_iterator_8hpp_source.xhtml">TransformIterator.hpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_transform_iterator_test_8cpp_source.xhtml#l00014">TEST_SUITE()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;{</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordflow">return</span> TransformIterator&lt;Function, Iterator&gt;(i, f);</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a4e3efb65a77cf35dc5dc09e4f3646029"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4e3efb65a77cf35dc5dc09e4f3646029">&#9670;&nbsp;</a></span>MirrorPad()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void MirrorPad </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>inputInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>outputInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> *&#160;</td>
+ <td class="paramname"><em>inputHandle</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> *&#160;</td>
+ <td class="paramname"><em>outputHandle</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_pad_queue_descriptor.xhtml">PadQueueDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>data</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="backends_2reference_2workloads_2_mirror_pad_8cpp_source.xhtml#l00059">59</a> of file <a class="el" href="backends_2reference_2workloads_2_mirror_pad_8cpp_source.xhtml">MirrorPad.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_tensor_8cpp_source.xhtml#l00174">TensorShape::GetNumDimensions()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00196">TensorInfo::GetNumElements()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01176">PadDescriptor::m_PaddingMode</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01170">PadDescriptor::m_PadList</a>, <a class="el" href="include_2armnn_2backends_2_workload_data_8hpp_source.xhtml#l00054">QueueDescriptorWithParameters&lt; LayerDescriptor &gt;::m_Parameters</a>, <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml#a9afbc055a017adf1bc38ee137bca6e90">ITensorHandle::Map()</a>, <a class="el" href="namespacearmnn.xhtml#a14d24d90ab4ba2956e92e27890ba4c91a74de3e45e4491e956e8dc18d841d9b00">Reflect</a>, <a class="el" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>, and <a class="el" href="namespacearmnn.xhtml#a14d24d90ab4ba2956e92e27890ba4c91af334649ef5e5d0ffe200751d07012626">Symmetric</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_ref_pad_workload_8cpp_source.xhtml#l00021">RefPadWorkload::ExecuteAsync()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;{</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keyword">auto</span> padList = data.m_Parameters.m_PadList;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <a class="code" href="namespacearmnn.xhtml#a14d24d90ab4ba2956e92e27890ba4c91">PaddingMode</a> paddingMode = data.m_Parameters.m_PaddingMode;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; TensorShape outputShape = outputInfo.GetShape();</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; TensorShape inputShape = inputInfo.GetShape();</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numOutputElements = outputInfo.GetNumElements();</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numInputDimensions = inputShape.GetNumDimensions();</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; assert(numInputDimensions == outputShape.GetNumDimensions());</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="comment">// If padding mode is Reflect then both paddings must be no greater than inputShape(i) - 1.</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="comment">// If padding mode is Symmetric then both paddings must be no greater than inputShape(i).</span></div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> isReflect = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(paddingMode == PaddingMode::Reflect);</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; padList.size(); ++i)</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; {</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">if</span>(padList.at(i).first &gt; (inputShape[i] - isReflect) ||</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; padList.at(i).second &gt; (inputShape[i] - isReflect))</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; {</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>(<span class="stringliteral">&quot;Paddings must be less (Reflect) or &quot;</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="stringliteral">&quot;equal (Symmetric) to the dimension size.&quot;</span>);</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; }</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; }</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keyword">auto</span> inputData = MakeDecoder&lt;float&gt;(inputInfo, inputHandle-&gt;Map());</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keyword">auto</span> outData = MakeEncoder&lt;float&gt;(outputInfo, outputHandle-&gt;Map());</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; Decoder&lt;float&gt;&amp; input = *inputData;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; Encoder&lt;float&gt;&amp; output = *outData;</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx = 0; idx &lt; numOutputElements; ++idx)</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; {</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="comment">// Get the coordinates of the current index in vector form. E.g inx 1 = [0, 0, 0, 1 ]</span></div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keyword">const</span> std::vector&lt;unsigned int&gt; coord = IndexToCoord(outputShape, idx);</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; std::vector&lt;unsigned int&gt; dimensions;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; std::vector&lt;unsigned int&gt; coords;</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; numInputDimensions; ++i)</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; {</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; dimensions.emplace_back(i);</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; coords.emplace_back(coord[i]);</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; }</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keyword">auto</span> isInPadding = [&amp;](<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i)</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; {</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordflow">return</span> (coords[i] &lt; padList[i].first || coords[i] &gt; inputShape[i] + padList[i].first - 1);</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; };</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keyword">auto</span> getReflectIndex = [&amp;](<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i) -&gt; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span></div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; {</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keywordflow">if</span>(isInPadding(i))</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; {</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordflow">if</span>(coords[i] &lt; padList[i].first)</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; {</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordflow">return</span> padList[i].first - coords[i];</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; }</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; {</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keywordflow">return</span> 2 * inputShape[i] + padList[i].first - 2 - coords[i];</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; }</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; }</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keywordflow">return</span> coords[i] - padList[i].first;</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; };</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keyword">auto</span> getSymmetricIndex = [&amp;](<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i) -&gt; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span></div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; {</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordflow">if</span>(isInPadding(i))</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; {</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordflow">if</span>(coords[i] &lt; padList[i].first)</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; {</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">return</span> padList[i].first - coords[i] - 1;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; }</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; {</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keywordflow">return</span> 2 * inputShape[i] + padList[i].first - 1 - coords[i];</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; }</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; }</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keywordflow">return</span> coords[i] - padList[i].first;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; };</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="comment">// Location of the value in the input tensor to use in the output.</span></div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; std::vector&lt;unsigned int&gt; coordOfInput;</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="comment">// any_of works as a loop here to check if any of the dimensions are in the padding.</span></div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="comment">// If dimensions is in the padding area, then create the coordinates of the location in the</span></div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="comment">// input tensor to use in the output.</span></div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="comment">// E.g.</span></div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="comment">// Input tensor = [ 1, 2, 3 ], Rank = 1.</span></div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="comment">// Output tensor = [ 2, 1, 2, 3, 1 ] if Reflect or [ 1, 1, 2, 3, 3 ] if Symmetric with a padding of (1, 1).</span></div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="comment">// So it will either return [ 1 ] or [ 0 ] which is used to set the first value in the output tensor and so on.</span></div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keywordflow">if</span>(std::any_of(dimensions.begin(), dimensions.end(), isInPadding))</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; {</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="keywordflow">switch</span>(paddingMode)</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; {</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keywordflow">case</span> PaddingMode::Reflect:</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; {</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; numInputDimensions; ++i)</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; {</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; coordOfInput.emplace_back(getReflectIndex(i));</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; }</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; }</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keywordflow">case</span> PaddingMode::Symmetric:</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; {</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; numInputDimensions; ++i)</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; {</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; coordOfInput.emplace_back(getSymmetricIndex(i));</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; }</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; }</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Padding mode not supported.&quot;</span>);</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; }</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; }</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; {</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; numInputDimensions; ++i)</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; {</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; coordOfInput.emplace_back(coord[i] - padList[i].first);</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; }</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; }</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160;</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="comment">// Set output value using the coordinate of the input value to use.</span></div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> indexOfInput = CoordToIndex(inputShape, coordOfInput);</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160;</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; input[indexOfInput];</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="keyword">auto</span> inputValue = input.Get();</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160;</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; output[idx];</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; output.Set(inputValue);</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; }</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a14d24d90ab4ba2956e92e27890ba4c91"><div class="ttname"><a href="namespacearmnn.xhtml#a14d24d90ab4ba2956e92e27890ba4c91">armnn::PaddingMode</a></div><div class="ttdeci">PaddingMode</div><div class="ttdoc">The padding mode controls whether the padding should be filled with constant values (Constant)...</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00173">Types.hpp:173</a></div></div>
+<div class="ttc" id="classarmnn_1_1_invalid_argument_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00080">Exceptions.hpp:80</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a45b766383cdec8158468af9c226056b4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a45b766383cdec8158468af9c226056b4">&#9670;&nbsp;</a></span>MockBackendId()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr const char * MockBackendId </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="armnn_test_utils_2_mock_backend_8cpp_source.xhtml#l00013">13</a> of file <a class="el" href="armnn_test_utils_2_mock_backend_8cpp_source.xhtml">MockBackend.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="armnn_test_utils_2_mock_backend_8cpp_source.xhtml#l00018">MockBackend::GetIdStatic()</a>, <a class="el" href="backends_2backends_common_2test_2_mock_backend_8cpp_source.xhtml#l00127">MockBackend::OptimizeSubgraphView()</a>, <a class="el" href="_backend_profiling_tests_8cpp_source.xhtml#l00114">TEST_SUITE()</a>, and <a class="el" href="backends_2backends_common_2test_2_mock_backend_8cpp_source.xhtml#l00077">MockBackendInitialiser::~MockBackendInitialiser()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;{</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;CpuMock&quot;</span>;</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="ac38529227e1adeef300d31625826382b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac38529227e1adeef300d31625826382b">&#9670;&nbsp;</a></span>MockImportBackendId()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr const char* armnn::MockImportBackendId </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_mock_import_backend_8hpp_source.xhtml#l00012">12</a> of file <a class="el" href="_mock_import_backend_8hpp_source.xhtml">MockImportBackend.hpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_mock_import_backend_8cpp_source.xhtml#l00043">MockImportBackend::GetIdStatic()</a>, and <a class="el" href="_neon_fallback_tests_8cpp_source.xhtml#l00013">TEST_SUITE()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;{ <span class="keywordflow">return</span> <span class="stringliteral">&quot;MockRef&quot;</span>; }</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a7e3b0eb2d8e1d5849abfab90f2b49145"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7e3b0eb2d8e1d5849abfab90f2b49145">&#9670;&nbsp;</a></span>MockTensorHandleFactoryId()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr const char* armnn::MockTensorHandleFactoryId </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_mock_tensor_handle_factory_8hpp_source.xhtml#l00014">14</a> of file <a class="el" href="_mock_tensor_handle_factory_8hpp_source.xhtml">MockTensorHandleFactory.hpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_mock_tensor_handle_factory_8cpp_source.xhtml#l00014">MockTensorHandleFactory::GetIdStatic()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;{</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Arm/Mock/TensorHandleFactory&quot;</span>;</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="afc773aec6f845adc0cc547ce475dfe3f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afc773aec6f845adc0cc547ce475dfe3f">&#9670;&nbsp;</a></span>NeonAbsWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonAbsWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_abs_workload_8cpp_source.xhtml#l00017">17</a> of file <a class="el" href="_neon_abs_workload_8cpp_source.xhtml">NeonAbsWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00883">NeonLayerSupport::IsElementwiseUnarySupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;{</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keywordflow">return</span> arm_compute::NEAbsLayer::validate(&amp;aclInput, &amp;aclOutput);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a46495807633a01d826851e1cb498f071"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a46495807633a01d826851e1cb498f071">&#9670;&nbsp;</a></span>NeonActivationWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonActivationWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_activation_workload_8cpp_source.xhtml#l00017">17</a> of file <a class="el" href="_neon_activation_workload_8cpp_source.xhtml">NeonActivationWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00566">NeonLayerSupport::IsActivationSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;{</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationLayerInfo =</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(descriptor);</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keywordflow">return</span> arm_compute::NEActivationLayer::validate(&amp;aclInput,</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; &amp;aclOutput,</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; activationLayerInfo);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ad701d0d29baa4266ab4d33b090aa661c"><div class="ttname"><a href="namespacearmnn.xhtml#ad701d0d29baa4266ab4d33b090aa661c">armnn::ConvertActivationDescriptorToAclActivationLayerInfo</a></div><div class="ttdeci">arm_compute::ActivationLayerInfo ConvertActivationDescriptorToAclActivationLayerInfo(const ActivationDescriptor &amp;actDesc)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.xhtml#l00085">ArmComputeUtils.hpp:85</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a1b03e82a1a53b686aedea3734b2fb957"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1b03e82a1a53b686aedea3734b2fb957">&#9670;&nbsp;</a></span>NeonAdditionWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonAdditionWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input0</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> *&#160;</td>
+ <td class="paramname"><em>activationDescriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_addition_workload_8cpp_source.xhtml#l00020">20</a> of file <a class="el" href="_neon_addition_workload_8cpp_source.xhtml">NeonAdditionWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00579">NeonLayerSupport::IsAdditionSupported()</a>, and <a class="el" href="_neon_backend_8cpp_source.xhtml#l00142">NeonBackend::OptimizeSubgraphView()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;{</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput0 = armcomputetensorutils::BuildArmComputeTensorInfo(input0);</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput1 = armcomputetensorutils::BuildArmComputeTensorInfo(input1);</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationInfo = <a class="code" href="namespacearmnn.xhtml#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; activationDescriptor);</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordflow">return</span> arm_compute::NEArithmeticAddition::validate(&amp;aclInput0,</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; &amp;aclInput1,</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; &amp;aclOutput,</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; arm_compute::ConvertPolicy::SATURATE,</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; activationInfo);</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ad701d0d29baa4266ab4d33b090aa661c"><div class="ttname"><a href="namespacearmnn.xhtml#ad701d0d29baa4266ab4d33b090aa661c">armnn::ConvertActivationDescriptorToAclActivationLayerInfo</a></div><div class="ttdeci">arm_compute::ActivationLayerInfo ConvertActivationDescriptorToAclActivationLayerInfo(const ActivationDescriptor &amp;actDesc)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.xhtml#l00085">ArmComputeUtils.hpp:85</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a61d1f39297fec6e3062e4047dc5f236e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a61d1f39297fec6e3062e4047dc5f236e">&#9670;&nbsp;</a></span>NeonArgMinMaxWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonArgMinMaxWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_arg_min_max_descriptor.xhtml">ArgMinMaxDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_arg_min_max_workload_8cpp_source.xhtml#l00031">31</a> of file <a class="el" href="_neon_arg_min_max_workload_8cpp_source.xhtml">NeonArgMinMaxWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00592">NeonLayerSupport::IsArgMinMaxSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;{</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keyword">auto</span> numDims = input.GetNumDimensions();</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keyword">auto</span> unsignedAxis = <a class="code" href="namespacearmnn_utils.xhtml#ac93cb1365b4bcb67df2a3164606096c5">armnnUtils::GetUnsignedAxis</a>(numDims, descriptor.m_Axis);</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordtype">int</span> aclAxis = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">int</span>&gt;(CalcAclAxis(numDims, unsignedAxis));</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">if</span> (descriptor.m_Function == ArgMinMaxFunction::Max)</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; {</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordflow">return</span> arm_compute::NEArgMinMaxLayer::validate(&amp;aclInput, aclAxis, &amp;aclOutput,</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; arm_compute::ReductionOperation::ARG_IDX_MAX);</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; }</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; {</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">return</span> arm_compute::NEArgMinMaxLayer::validate(&amp;aclInput, aclAxis, &amp;aclOutput,</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; arm_compute::ReductionOperation::ARG_IDX_MIN);</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; }</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;}</div><div class="ttc" id="namespacearmnn_utils_xhtml_ac93cb1365b4bcb67df2a3164606096c5"><div class="ttname"><a href="namespacearmnn_utils.xhtml#ac93cb1365b4bcb67df2a3164606096c5">armnnUtils::GetUnsignedAxis</a></div><div class="ttdeci">unsigned int GetUnsignedAxis(const unsigned int inputDimension, const int axis)</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_utils_8cpp_source.xhtml#l00148">TensorUtils.cpp:148</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a375ca3cff9f1b005d1412dc5f3cf5b6e"><div class="ttname"><a href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a></div><div class="ttdeci">std::enable_if_t&lt; std::is_unsigned&lt; Source &gt;::value &amp;&amp;std::is_unsigned&lt; Dest &gt;::value, Dest &gt; numeric_cast(Source source)</div><div class="ttdef"><b>Definition:</b> <a href="_numeric_cast_8hpp_source.xhtml#l00035">NumericCast.hpp:35</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a3a34a305e5187f3a3c67030d3bebbdb0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3a34a305e5187f3a3c67030d3bebbdb0">&#9670;&nbsp;</a></span>NeonBackendId()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr const char* armnn::NeonBackendId </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_backend_id_8hpp_source.xhtml#l00010">10</a> of file <a class="el" href="_neon_backend_id_8hpp_source.xhtml">NeonBackendId.hpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_backend_8cpp_source.xhtml#l00044">NeonBackend::GetIdStatic()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;{ <span class="keywordflow">return</span> <span class="stringliteral">&quot;CpuAcc&quot;</span>; }</div></div><!-- fragment -->
+</div>
+</div>
+<a id="ac1be1c9a317b23b5684c83af59fb2c96"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac1be1c9a317b23b5684c83af59fb2c96">&#9670;&nbsp;</a></span>NeonBatchNormalizationValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonBatchNormalizationValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>mean</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>var</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>beta</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>gamma</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_batch_normalization_descriptor.xhtml">BatchNormalizationDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> *&#160;</td>
+ <td class="paramname"><em>activationDescriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_batch_normalization_workload_8cpp_source.xhtml#l00024">24</a> of file <a class="el" href="_neon_batch_normalization_workload_8cpp_source.xhtml">NeonBatchNormalizationWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00604">NeonLayerSupport::IsBatchNormalizationSupported()</a>, and <a class="el" href="_neon_backend_8cpp_source.xhtml#l00142">NeonBackend::OptimizeSubgraphView()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;{</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo =</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; armcomputetensorutils::BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo =</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; armcomputetensorutils::BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclMeanInfo =</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; armcomputetensorutils::BuildArmComputeTensorInfo(mean, descriptor.m_DataLayout);</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclVarInfo =</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; armcomputetensorutils::BuildArmComputeTensorInfo(var, descriptor.m_DataLayout);</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclBetaInfo =</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; armcomputetensorutils::BuildArmComputeTensorInfo(beta, descriptor.m_DataLayout);</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclGammaInfo =</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; armcomputetensorutils::BuildArmComputeTensorInfo(gamma, descriptor.m_DataLayout);</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationInfo = <a class="code" href="namespacearmnn.xhtml#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; activationDescriptor);</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">return</span> arm_compute::NEBatchNormalizationLayer::validate(&amp;aclInputInfo,</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; &amp;aclOutputInfo,</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; &amp;aclMeanInfo,</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; &amp;aclVarInfo,</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; &amp;aclBetaInfo,</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; &amp;aclGammaInfo,</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; descriptor.m_Eps,</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; activationInfo);</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ad701d0d29baa4266ab4d33b090aa661c"><div class="ttname"><a href="namespacearmnn.xhtml#ad701d0d29baa4266ab4d33b090aa661c">armnn::ConvertActivationDescriptorToAclActivationLayerInfo</a></div><div class="ttdeci">arm_compute::ActivationLayerInfo ConvertActivationDescriptorToAclActivationLayerInfo(const ActivationDescriptor &amp;actDesc)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.xhtml#l00085">ArmComputeUtils.hpp:85</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="aad5f7f0fcd2dbb0aad7016ff984e7cc6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aad5f7f0fcd2dbb0aad7016ff984e7cc6">&#9670;&nbsp;</a></span>NeonBatchToSpaceNdWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonBatchToSpaceNdWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_batch_to_space_nd_descriptor.xhtml">BatchToSpaceNdDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_batch_to_space_nd_workload_8cpp_source.xhtml#l00020">20</a> of file <a class="el" href="_neon_batch_to_space_nd_workload_8cpp_source.xhtml">NeonBatchToSpaceNdWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00625">NeonLayerSupport::IsBatchToSpaceNdSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;{</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="comment">// ArmNN blockShape is [H, W] Cl asks for W, H</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; int32_t blockHeight = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;int32_t&gt;(descriptor.m_BlockShape[0]);</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; int32_t blockWidth = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;int32_t&gt;(descriptor.m_BlockShape[1]);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::NEBatchToSpaceLayer::validate(&amp;aclInputInfo,</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; blockWidth,</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; blockHeight,</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; &amp;aclOutputInfo);</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordflow">return</span> aclStatus;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70b"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">armnn::Status</a></div><div class="ttdeci">Status</div><div class="ttdoc">enumeration </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00029">Types.hpp:29</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a375ca3cff9f1b005d1412dc5f3cf5b6e"><div class="ttname"><a href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a></div><div class="ttdeci">std::enable_if_t&lt; std::is_unsigned&lt; Source &gt;::value &amp;&amp;std::is_unsigned&lt; Dest &gt;::value, Dest &gt; numeric_cast(Source source)</div><div class="ttdef"><b>Definition:</b> <a href="_numeric_cast_8hpp_source.xhtml#l00035">NumericCast.hpp:35</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a3ab69cec1cab301e096a2830f65a36ec"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3ab69cec1cab301e096a2830f65a36ec">&#9670;&nbsp;</a></span>NeonCastValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonCastValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_cast_workload_8cpp_source.xhtml#l00019">19</a> of file <a class="el" href="_neon_cast_workload_8cpp_source.xhtml">NeonCastWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00637">NeonLayerSupport::IsCastSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;{</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keywordflow">return</span> arm_compute::NECast::validate(&amp;aclInput, &amp;aclOutput, g_AclConvertPolicy);</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a2ee21869ffad00d6344afffb0a9baba1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2ee21869ffad00d6344afffb0a9baba1">&#9670;&nbsp;</a></span>NeonChannelShuffleValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonChannelShuffleValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_channel_shuffle_descriptor.xhtml">ChannelShuffleDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_channel_shuffle_workload_8cpp_source.xhtml#l00017">17</a> of file <a class="el" href="_neon_channel_shuffle_workload_8cpp_source.xhtml">NeonChannelShuffleWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00647">NeonLayerSupport::IsChannelShuffleSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;{</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="comment">// In Arm NN and in NNAPI, channel shuffle implementation is datalayout agnostic and it has axis as a parameter.</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="comment">// The channel shuffle Implementation for Neon is dependent on datalayout and does not have axis as a parameter,</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="comment">// it only supports channel shuffle for 4D tensors in dimension C (1 or 3).</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">arm_compute::DataLayout</a> aclDataLayout;</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keywordflow">if</span> (input.GetNumDimensions() == 4)</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; {</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordflow">switch</span> (descriptor.m_Axis)</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; {</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordflow">case</span> 1:</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; aclDataLayout = ConvertDataLayout(<a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a>);</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordflow">case</span> 3:</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; aclDataLayout = ConvertDataLayout(<a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a>);</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>{arm_compute::ErrorCode::RUNTIME_ERROR, <span class="stringliteral">&quot;Unsupported axis&quot;</span>};</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; }</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; aclInputInfo.set_data_layout(aclDataLayout);</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; aclOutputInfo.set_data_layout(aclDataLayout);</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordflow">return</span> arm_compute::NEChannelShuffleLayer::validate(&amp;aclInputInfo, &amp;aclOutputInfo, descriptor.m_NumGroups);</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; }</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; {</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>{arm_compute::ErrorCode::RUNTIME_ERROR, <span class="stringliteral">&quot;Unsupported number of dimensions&quot;</span>};</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; }</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a></div><div class="ttdeci">DataLayout</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00049">Types.hpp:49</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70b"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">armnn::Status</a></div><div class="ttdeci">Status</div><div class="ttdoc">enumeration </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00029">Types.hpp:29</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ae412e8e64d6a6dde3ace908b59c29c06"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae412e8e64d6a6dde3ace908b59c29c06">&#9670;&nbsp;</a></span>NeonComparisonWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonComparisonWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input0</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_comparison_descriptor.xhtml">ComparisonDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_comparison_workload_8cpp_source.xhtml#l00016">16</a> of file <a class="el" href="_neon_comparison_workload_8cpp_source.xhtml">NeonComparisonWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00659">NeonLayerSupport::IsComparisonSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;{</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput0 = BuildArmComputeTensorInfo(input0);</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput1 = BuildArmComputeTensorInfo(input1);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58c">arm_compute::ComparisonOperation</a> comparisonOperation = <a class="code" href="namespacearmnn.xhtml#ac1438a97bbc2aee5cd8470d9d2a3aebc">ConvertComparisonOperationToAcl</a>(descriptor);</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::NEElementwiseComparison::validate(&amp;aclInput0,</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; &amp;aclInput1,</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; &amp;aclOutput,</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; comparisonOperation);</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keywordflow">return</span> aclStatus;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a2d299363c9fc33334c571fa29ca4f58c"><div class="ttname"><a href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58c">armnn::ComparisonOperation</a></div><div class="ttdeci">ComparisonOperation</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00095">Types.hpp:95</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70b"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">armnn::Status</a></div><div class="ttdeci">Status</div><div class="ttdoc">enumeration </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00029">Types.hpp:29</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ac1438a97bbc2aee5cd8470d9d2a3aebc"><div class="ttname"><a href="namespacearmnn.xhtml#ac1438a97bbc2aee5cd8470d9d2a3aebc">armnn::ConvertComparisonOperationToAcl</a></div><div class="ttdeci">arm_compute::ComparisonOperation ConvertComparisonOperationToAcl(const ComparisonDescriptor &amp;descriptor)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.xhtml#l00115">ArmComputeUtils.hpp:115</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a8a219633e750d6daffcef3b641fa11f3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8a219633e750d6daffcef3b641fa11f3">&#9670;&nbsp;</a></span>NeonConcatWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonConcatWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const std::vector&lt; const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> *&gt; &amp;&#160;</td>
+ <td class="paramname"><em>inputs</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_origins_descriptor.xhtml">OriginsDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_concat_workload_8cpp_source.xhtml#l00027">27</a> of file <a class="el" href="_neon_concat_workload_8cpp_source.xhtml">NeonConcatWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00674">NeonLayerSupport::IsConcatSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;{</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; std::vector&lt;arm_compute::TensorInfo&gt; aclInputs;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> TensorInfo* input : inputs)</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; {</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(*input, <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a>);</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; aclInputs.emplace_back(aclInputInfo);</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; }</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; std::vector&lt;const arm_compute::ITensorInfo*&gt; aclInputPtrs;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordflow">for</span> (arm_compute::ITensorInfo&amp; input : aclInputs)</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; {</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; aclInputPtrs.emplace_back(&amp;input);</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; }</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordtype">size_t</span> aclAxis = CalcAxis(descriptor);</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">return</span> arm_compute::NEConcatenateLayer::validate(aclInputPtrs, &amp;aclOutputInfo, aclAxis);</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="afb681fd9b8afe0b236d51b6c868ae660"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afb681fd9b8afe0b236d51b6c868ae660">&#9670;&nbsp;</a></span>NeonConstantWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonConstantWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_constant_workload_8cpp_source.xhtml#l00020">20</a> of file <a class="el" href="_neon_constant_workload_8cpp_source.xhtml">NeonConstantWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00713">NeonLayerSupport::IsConstantSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;{</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo neonOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; std::array&lt;arm_compute::DataType,9&gt; supportedTypes = {</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; arm_compute::DataType::BFLOAT16,</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; arm_compute::DataType::F16,</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; arm_compute::DataType::F32,</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; arm_compute::DataType::QASYMM8,</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; arm_compute::DataType::QASYMM8_SIGNED,</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; arm_compute::DataType::QSYMM16,</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; arm_compute::DataType::QSYMM8,</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; arm_compute::DataType::QSYMM8_PER_CHANNEL,</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; arm_compute::DataType::S32</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; };</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">auto</span> it = std::find(begin(supportedTypes), end(supportedTypes), neonOutputInfo.data_type());</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">if</span> (it != end(supportedTypes))</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; {</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>{};</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; }</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; {</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>{arm_compute::ErrorCode::RUNTIME_ERROR, <span class="stringliteral">&quot;Unsupported DataType&quot;</span>};</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; }</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70b"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">armnn::Status</a></div><div class="ttdeci">Status</div><div class="ttdoc">enumeration </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00029">Types.hpp:29</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a45691b0c4a46c239b4986cfed95de13b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a45691b0c4a46c239b4986cfed95de13b">&#9670;&nbsp;</a></span>NeonConvolution2dWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonConvolution2dWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_convolution2d_descriptor.xhtml">Convolution2dDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>weights</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &gt; &amp;&#160;</td>
+ <td class="paramname"><em>biases</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">bool&#160;</td>
+ <td class="paramname"><em>isFastMathEnabled</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> *&#160;</td>
+ <td class="paramname"><em>activationDescriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_convolution2d_workload_8cpp_source.xhtml#l00024">24</a> of file <a class="el" href="_neon_convolution2d_workload_8cpp_source.xhtml">NeonConvolution2dWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00761">NeonLayerSupport::IsConvolution2dSupported()</a>, and <a class="el" href="_neon_backend_8cpp_source.xhtml#l00142">NeonBackend::OptimizeSubgraphView()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;{</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclWeightsInfo = BuildArmComputeTensorInfo(weights, descriptor.m_DataLayout);</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keyword">const</span> arm_compute::Size2D aclDilationInfo = BuildArmComputeSize2D(descriptor.m_DilationX,</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; descriptor.m_DilationY);</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; arm_compute::TensorInfo aclBiasesInfo;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; arm_compute::TensorInfo *optionalAclBiasesInfo = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">if</span> (descriptor.m_BiasEnabled)</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; {</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(biases.has_value());</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; aclBiasesInfo = BuildArmComputeTensorInfo(biases.value(), descriptor.m_DataLayout);</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; optionalAclBiasesInfo = &amp;aclBiasesInfo;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; }</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; arm_compute::PadStrideInfo layerInfo = BuildArmComputePadStrideInfo(descriptor);</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationInfo = <a class="code" href="namespacearmnn.xhtml#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; activationDescriptor);</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordflow">return</span> arm_compute::NEConvolutionLayer::validate(&amp;aclInputInfo,</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; &amp;aclWeightsInfo,</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; optionalAclBiasesInfo,</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; &amp;aclOutputInfo,</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; layerInfo,</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; arm_compute::WeightsInfo(),</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; aclDilationInfo,</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; activationInfo,</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; isFastMathEnabled);</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;}</div><div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad701d0d29baa4266ab4d33b090aa661c"><div class="ttname"><a href="namespacearmnn.xhtml#ad701d0d29baa4266ab4d33b090aa661c">armnn::ConvertActivationDescriptorToAclActivationLayerInfo</a></div><div class="ttdeci">arm_compute::ActivationLayerInfo ConvertActivationDescriptorToAclActivationLayerInfo(const ActivationDescriptor &amp;actDesc)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.xhtml#l00085">ArmComputeUtils.hpp:85</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="acbb4d7b86eb01bb437230e1586b9aeb4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acbb4d7b86eb01bb437230e1586b9aeb4">&#9670;&nbsp;</a></span>NeonConvolution3dWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonConvolution3dWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_convolution3d_descriptor.xhtml">Convolution3dDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>weights</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &gt; &amp;&#160;</td>
+ <td class="paramname"><em>biases</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">bool&#160;</td>
+ <td class="paramname"><em>isFastMathEnabled</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> *&#160;</td>
+ <td class="paramname"><em>activationDescriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_convolution3d_workload_8cpp_source.xhtml#l00024">24</a> of file <a class="el" href="_neon_convolution3d_workload_8cpp_source.xhtml">NeonConvolution3dWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00794">NeonLayerSupport::IsConvolution3dSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;{</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclWeightsInfo = BuildArmComputeTensorInfo(weights, descriptor.m_DataLayout);</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; arm_compute::TensorInfo aclBiasesInfo;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; arm_compute::TensorInfo *optionalAclBiasesInfo = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">if</span> (descriptor.m_BiasEnabled)</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; {</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(biases.has_value());</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; aclBiasesInfo = BuildArmComputeTensorInfo(biases.value(), descriptor.m_DataLayout);</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; optionalAclBiasesInfo = &amp;aclBiasesInfo;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; }</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keyword">const</span> arm_compute::Conv3dInfo aclConv3DInfo = <a class="code" href="namespacearmnn.xhtml#a855760e957668804d33c0691a802496e">ComputeConv3DInfo</a>(descriptor,</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; isFastMathEnabled,</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; activationDescriptor);</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">return</span> arm_compute::NEConv3D::validate(&amp;aclInputInfo,</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; &amp;aclWeightsInfo,</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; optionalAclBiasesInfo,</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; &amp;aclOutputInfo,</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; aclConv3DInfo);</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a855760e957668804d33c0691a802496e"><div class="ttname"><a href="namespacearmnn.xhtml#a855760e957668804d33c0691a802496e">armnn::ComputeConv3DInfo</a></div><div class="ttdeci">arm_compute::Conv3dInfo ComputeConv3DInfo(const armnn::Convolution3dDescriptor descriptor, bool isFastMathEnabled, const ActivationDescriptor *activationDescriptor)</div><div class="ttdoc">Utility function used to setup an arm_compute::Conv3dInfo object from convolution3d descriptor...</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.xhtml#l00269">ArmComputeUtils.hpp:269</a></div></div>
+<div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a116d88067bf98ce9858ab73e68f605f9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a116d88067bf98ce9858ab73e68f605f9">&#9670;&nbsp;</a></span>NeonDepthToSpaceWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonDepthToSpaceWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="namespacearmnn.xhtml#a3647f60510bc8ddaced01c51b0ee8714">DepthToSpaceDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_depth_to_space_workload_8cpp_source.xhtml#l00019">19</a> of file <a class="el" href="_neon_depth_to_space_workload_8cpp_source.xhtml">NeonDepthToSpaceWorkload.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_descriptors_8hpp_source.xhtml#l01071">SpaceToDepthDescriptor::m_DataLayout</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00827">NeonLayerSupport::IsDepthToSpaceSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;{</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> dataLayout = descriptor.m_DataLayout;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = BuildArmComputeTensorInfo(input, dataLayout);</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = BuildArmComputeTensorInfo(output, dataLayout);</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; int32_t blockSize = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;int32_t&gt;(descriptor.m_BlockSize);</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordflow">return</span> arm_compute::NEDepthToSpaceLayer::validate(&amp;aclInput, &amp;aclOutput, blockSize);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a></div><div class="ttdeci">DataLayout</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00049">Types.hpp:49</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a375ca3cff9f1b005d1412dc5f3cf5b6e"><div class="ttname"><a href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a></div><div class="ttdeci">std::enable_if_t&lt; std::is_unsigned&lt; Source &gt;::value &amp;&amp;std::is_unsigned&lt; Dest &gt;::value, Dest &gt; numeric_cast(Source source)</div><div class="ttdef"><b>Definition:</b> <a href="_numeric_cast_8hpp_source.xhtml#l00035">NumericCast.hpp:35</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a63d684b26fb838b22123490d780bce08"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a63d684b26fb838b22123490d780bce08">&#9670;&nbsp;</a></span>NeonDepthwiseConvolutionWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonDepthwiseConvolutionWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml">DepthwiseConvolution2dDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>weights</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &gt; &amp;&#160;</td>
+ <td class="paramname"><em>biases</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> *&#160;</td>
+ <td class="paramname"><em>activationDescriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_depthwise_convolution_workload_8cpp_source.xhtml#l00029">29</a> of file <a class="el" href="_neon_depthwise_convolution_workload_8cpp_source.xhtml">NeonDepthwiseConvolutionWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00839">NeonLayerSupport::IsDepthwiseConvolutionSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00866">NeonLayerSupport::IsDilatedDepthwiseConvolutionSupported()</a>, and <a class="el" href="_neon_backend_8cpp_source.xhtml#l00142">NeonBackend::OptimizeSubgraphView()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;{</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a>);</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a>);</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="comment">// ArmNN&#39;s weight format is usually [ M, I, H, W ] but for depthwise its [ 1, H, W, I*M]</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="comment">// Permute to [ 1, I * M, H, W ] (if NCHW), as required by the compute library</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> aclDepthMultiplier;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> weightsPermuted;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; std::tie(weightsPermuted, aclDepthMultiplier) = <a class="code" href="namespacearmnn.xhtml#ac4aa9e41515b354234645f115c49de32">Convert1HWOTensorInfoToAcl</a>(weights, input, descriptor.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a>);</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="comment">// Convert the weights into the compute library format</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclWeightsInfo = BuildArmComputeTensorInfo(weightsPermuted, descriptor.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a>);</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; arm_compute::TensorInfo aclBiasesInfo;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; arm_compute::TensorInfo* optionalAclBiasesInfo = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">if</span> (descriptor.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#aea202e14d8874cefd9a0f778022b7e25">m_BiasEnabled</a>)</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; {</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(biases.<a class="code" href="classarmnn_1_1_optional_base.xhtml#a86b749ce2c4bc627fa8a1fcfaf0e314f">has_value</a>());</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; aclBiasesInfo = BuildArmComputeTensorInfo(biases.<a class="code" href="classarmnn_1_1_optional_reference_switch.xhtml#a77c7d528ac063d870b8c8426ec81c1c3">value</a>(), descriptor.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a>);</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; optionalAclBiasesInfo = &amp;aclBiasesInfo;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; }</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; arm_compute::PadStrideInfo aclPadStrideInfo = BuildArmComputePadStrideInfo(descriptor);</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keyword">const</span> arm_compute::Size2D aclDilationInfo = BuildArmComputeSize2D(</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; descriptor.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#aa3c6a77a963a98ccb8ea7b8fd008a8c1">m_DilationX</a>, descriptor.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a302b688d88dd73cde0fb1faef6679907">m_DilationY</a>);</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationInfo = <a class="code" href="namespacearmnn.xhtml#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; activationDescriptor);</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordflow">return</span> arm_compute::NEDepthwiseConvolutionLayer::validate(&amp;aclInputInfo,</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; &amp;aclWeightsInfo,</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; optionalAclBiasesInfo,</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; &amp;aclOutputInfo,</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; aclPadStrideInfo,</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; aclDepthMultiplier,</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; activationInfo,</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; aclDilationInfo);</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;}</div><div class="ttc" id="structarmnn_1_1_depthwise_convolution2d_descriptor_xhtml_aea202e14d8874cefd9a0f778022b7e25"><div class="ttname"><a href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#aea202e14d8874cefd9a0f778022b7e25">armnn::DepthwiseConvolution2dDescriptor::m_BiasEnabled</a></div><div class="ttdeci">bool m_BiasEnabled</div><div class="ttdoc">Enable/disable bias. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00668">Descriptors.hpp:668</a></div></div>
+<div class="ttc" id="structarmnn_1_1_depthwise_convolution2d_descriptor_xhtml_a6089e1ca91914015777ea780a513131a"><div class="ttname"><a href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">armnn::DepthwiseConvolution2dDescriptor::m_DataLayout</a></div><div class="ttdeci">DataLayout m_DataLayout</div><div class="ttdoc">The data layout to be used (NCHW, NHWC). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00670">Descriptors.hpp:670</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00152">Tensor.hpp:152</a></div></div>
+<div class="ttc" id="classarmnn_1_1_optional_reference_switch_xhtml_a77c7d528ac063d870b8c8426ec81c1c3"><div class="ttname"><a href="classarmnn_1_1_optional_reference_switch.xhtml#a77c7d528ac063d870b8c8426ec81c1c3">armnn::OptionalReferenceSwitch&lt; std::is_reference&lt; T &gt;::value, T &gt;::value</a></div><div class="ttdeci">const T &amp; value() const</div><div class="ttdef"><b>Definition:</b> <a href="_optional_8hpp_source.xhtml#l00146">Optional.hpp:146</a></div></div>
+<div class="ttc" id="structarmnn_1_1_depthwise_convolution2d_descriptor_xhtml_a302b688d88dd73cde0fb1faef6679907"><div class="ttname"><a href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a302b688d88dd73cde0fb1faef6679907">armnn::DepthwiseConvolution2dDescriptor::m_DilationY</a></div><div class="ttdeci">uint32_t m_DilationY</div><div class="ttdoc">Dilation factor value for height dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00666">Descriptors.hpp:666</a></div></div>
+<div class="ttc" id="structarmnn_1_1_depthwise_convolution2d_descriptor_xhtml_aa3c6a77a963a98ccb8ea7b8fd008a8c1"><div class="ttname"><a href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#aa3c6a77a963a98ccb8ea7b8fd008a8c1">armnn::DepthwiseConvolution2dDescriptor::m_DilationX</a></div><div class="ttdeci">uint32_t m_DilationX</div><div class="ttdoc">Dilation factor value for width dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00664">Descriptors.hpp:664</a></div></div>
+<div class="ttc" id="classarmnn_1_1_optional_base_xhtml_a86b749ce2c4bc627fa8a1fcfaf0e314f"><div class="ttname"><a href="classarmnn_1_1_optional_base.xhtml#a86b749ce2c4bc627fa8a1fcfaf0e314f">armnn::OptionalBase::has_value</a></div><div class="ttdeci">bool has_value() const noexcept</div><div class="ttdef"><b>Definition:</b> <a href="_optional_8hpp_source.xhtml#l00053">Optional.hpp:53</a></div></div>
+<div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ac4aa9e41515b354234645f115c49de32"><div class="ttname"><a href="namespacearmnn.xhtml#ac4aa9e41515b354234645f115c49de32">armnn::Convert1HWOTensorInfoToAcl</a></div><div class="ttdeci">std::tuple&lt; TensorInfo, unsigned int &gt; Convert1HWOTensorInfoToAcl(const TensorInfo &amp;weightInfo, const TensorInfo &amp;inputInfo, const DataLayout dataLayout)</div><div class="ttdoc">Weights for depthwise have a datalayout of [1,H,W,O] = [1,H,W,I*M] This function coverts a TensorInfo...</div><div class="ttdef"><b>Definition:</b> <a href="_workload_utils_8cpp_source.xhtml#l00169">WorkloadUtils.cpp:169</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad701d0d29baa4266ab4d33b090aa661c"><div class="ttname"><a href="namespacearmnn.xhtml#ad701d0d29baa4266ab4d33b090aa661c">armnn::ConvertActivationDescriptorToAclActivationLayerInfo</a></div><div class="ttdeci">arm_compute::ActivationLayerInfo ConvertActivationDescriptorToAclActivationLayerInfo(const ActivationDescriptor &amp;actDesc)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.xhtml#l00085">ArmComputeUtils.hpp:85</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="acefede7cc57c71ea4cfe1c888bb413e0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acefede7cc57c71ea4cfe1c888bb413e0">&#9670;&nbsp;</a></span>NeonDequantizeWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonDequantizeWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_dequantize_workload_8cpp_source.xhtml#l00022">22</a> of file <a class="el" href="_neon_dequantize_workload_8cpp_source.xhtml">NeonDequantizeWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00856">NeonLayerSupport::IsDequantizeSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;{</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keywordflow">return</span> arm_compute::NEDequantizationLayer::validate(&amp;aclInput, &amp;aclOutput);</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="ad734960f7ae60a86b74f6722f6c14332"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad734960f7ae60a86b74f6722f6c14332">&#9670;&nbsp;</a></span>NeonDetected()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool NeonDetected </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_utils_8cpp_source.xhtml#l00037">37</a> of file <a class="el" href="_utils_8cpp_source.xhtml">Utils.cpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;{</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="preprocessor">#if !defined(BARE_METAL) &amp;&amp; (defined(__arm__) || defined(__aarch64__))</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keyword">auto</span> hwcaps= getauxval(AT_HWCAP);</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="preprocessor">#if !defined(BARE_METAL) &amp;&amp; defined(__aarch64__)</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">if</span> (hwcaps &amp; HWCAP_ASIMD)</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; {</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="comment">// On an arm64 device with Neon.</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; }</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; {</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="comment">// On an arm64 device without Neon.</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; }</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="preprocessor">#if !defined(BARE_METAL) &amp;&amp; defined(__arm__)</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">if</span> (hwcaps &amp; HWCAP_NEON)</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; {</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="comment">// On an armhf device with Neon.</span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; }</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; {</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="comment">// On an armhf device without Neon.</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; }</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="comment">// This method of Neon detection is only supported on Linux so in order to prevent a false negative</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="comment">// we will return true in cases where detection did not run.</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="ab816c37fc6a6243badf4f7a3d0c88d46"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab816c37fc6a6243badf4f7a3d0c88d46">&#9670;&nbsp;</a></span>NeonDetectionPostProcessValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonDetectionPostProcessValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>boxEncodings</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>scores</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>anchors</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>detectionBoxes</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>detectionClasses</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>detectionScores</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>numDetections</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_detection_post_process_descriptor.xhtml">DetectionPostProcessDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_detection_post_process_workload_8cpp_source.xhtml#l00032">32</a> of file <a class="el" href="_neon_detection_post_process_workload_8cpp_source.xhtml">NeonDetectionPostProcessWorkload.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>, and <a class="el" href="_neon_detection_post_process_workload_8cpp_source.xhtml#l00017">MakeInfo()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;{</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; arm_compute::DetectionPostProcessLayerInfo <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a> = <a class="code" href="namespacearmnn.xhtml#a35d5394615a3062b629db056d414ae4f">MakeInfo</a>(descriptor);</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclBoxEncodings =</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; armcomputetensorutils::BuildArmComputeTensorInfo(boxEncodings);</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclScores =</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; armcomputetensorutils::BuildArmComputeTensorInfo(scores);</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclAnchors =</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; armcomputetensorutils::BuildArmComputeTensorInfo(anchors);</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; arm_compute::TensorInfo aclDetectionBoxes =</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; armcomputetensorutils::BuildArmComputeTensorInfo(detectionBoxes);</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; arm_compute::TensorInfo aclDetectionClasses =</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; armcomputetensorutils::BuildArmComputeTensorInfo(detectionClasses);</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; arm_compute::TensorInfo aclDetectionScores =</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; armcomputetensorutils::BuildArmComputeTensorInfo(detectionScores);</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; arm_compute::TensorInfo aclNumDetections =</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; armcomputetensorutils::BuildArmComputeTensorInfo(numDetections);</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">return</span> arm_compute::NEDetectionPostProcessLayer::validate(</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; &amp;aclBoxEncodings,</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; &amp;aclScores,</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; &amp;aclAnchors,</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; &amp;aclDetectionBoxes,</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; &amp;aclDetectionClasses,</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; &amp;aclDetectionScores,</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; &amp;aclNumDetections,</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; info);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a35d5394615a3062b629db056d414ae4f"><div class="ttname"><a href="namespacearmnn.xhtml#a35d5394615a3062b629db056d414ae4f">armnn::MakeInfo</a></div><div class="ttdeci">arm_compute::DetectionPostProcessLayerInfo MakeInfo(const DetectionPostProcessDescriptor &amp;descriptor)</div><div class="ttdef"><b>Definition:</b> <a href="_neon_detection_post_process_workload_8cpp_source.xhtml#l00017">NeonDetectionPostProcessWorkload.cpp:17</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c"><div class="ttname"><a href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">armnn::BoostLogSeverityMapping::info</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a65c912bfcf02b3096f36caf21fa175d0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a65c912bfcf02b3096f36caf21fa175d0">&#9670;&nbsp;</a></span>NeonDivisionWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonDivisionWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input0</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> *&#160;</td>
+ <td class="paramname"><em>activationDescriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_division_workload_8cpp_source.xhtml#l00018">18</a> of file <a class="el" href="_neon_division_workload_8cpp_source.xhtml">NeonDivisionWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01120">NeonLayerSupport::IsDivisionSupported()</a>, and <a class="el" href="_neon_backend_8cpp_source.xhtml#l00142">NeonBackend::OptimizeSubgraphView()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;{</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput0 = armcomputetensorutils::BuildArmComputeTensorInfo(input0);</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput1 = armcomputetensorutils::BuildArmComputeTensorInfo(input1);</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationInfo = <a class="code" href="namespacearmnn.xhtml#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; activationDescriptor);</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordflow">return</span> arm_compute::NEElementwiseDivision::validate(&amp;aclInput0,</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; &amp;aclInput1,</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; &amp;aclOutput,</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; activationInfo);</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ad701d0d29baa4266ab4d33b090aa661c"><div class="ttname"><a href="namespacearmnn.xhtml#ad701d0d29baa4266ab4d33b090aa661c">armnn::ConvertActivationDescriptorToAclActivationLayerInfo</a></div><div class="ttdeci">arm_compute::ActivationLayerInfo ConvertActivationDescriptorToAclActivationLayerInfo(const ActivationDescriptor &amp;actDesc)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.xhtml#l00085">ArmComputeUtils.hpp:85</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="aec5669eb9285cbca1ee6c7e1dd7bcf6a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aec5669eb9285cbca1ee6c7e1dd7bcf6a">&#9670;&nbsp;</a></span>NeonExpWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonExpWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_exp_workload_8cpp_source.xhtml#l00017">17</a> of file <a class="el" href="_neon_exp_workload_8cpp_source.xhtml">NeonExpWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00883">NeonLayerSupport::IsElementwiseUnarySupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;{</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keywordflow">return</span> arm_compute::NEExpLayer::validate(&amp;aclInput, &amp;aclOutput);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="ae455144d3472c502b636697f4775400c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae455144d3472c502b636697f4775400c">&#9670;&nbsp;</a></span>NeonFullyConnectedWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonFullyConnectedWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>weights</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &gt; &amp;&#160;</td>
+ <td class="paramname"><em>biases</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_fully_connected_descriptor.xhtml">FullyConnectedDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> *&#160;</td>
+ <td class="paramname"><em>activationDescriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_fully_connected_workload_8cpp_source.xhtml#l00024">24</a> of file <a class="el" href="_neon_fully_connected_workload_8cpp_source.xhtml">NeonFullyConnectedWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00957">NeonLayerSupport::IsFullyConnectedSupported()</a>, and <a class="el" href="_neon_backend_8cpp_source.xhtml#l00142">NeonBackend::OptimizeSubgraphView()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;{</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclWeights = BuildArmComputeTensorInfo(weights);</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; arm_compute::TensorInfo aclBiases;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; arm_compute::TensorInfo* optionalAclBiases = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">if</span> (descriptor.m_BiasEnabled)</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; {</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(biases.has_value());</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; aclBiases = BuildArmComputeTensorInfo(biases.value());</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; optionalAclBiases = &amp;aclBiases;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; }</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keyword">const</span> arm_compute::FullyConnectedLayerInfo fullyConnectedLayerInfo =</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <a class="code" href="namespacearmnn.xhtml#ae2e0c1d8160fadce44d479379790718e">ConvertFullyConnectedDescriptorToAclFullyConnectedLayerInfo</a>(descriptor, activationDescriptor);</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordflow">return</span> arm_compute::NEFullyConnectedLayer::validate(&amp;aclInput,</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; &amp;aclWeights,</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; optionalAclBiases,</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; &amp;aclOutput,</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; fullyConnectedLayerInfo);</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ae2e0c1d8160fadce44d479379790718e"><div class="ttname"><a href="namespacearmnn.xhtml#ae2e0c1d8160fadce44d479379790718e">armnn::ConvertFullyConnectedDescriptorToAclFullyConnectedLayerInfo</a></div><div class="ttdeci">arm_compute::FullyConnectedLayerInfo ConvertFullyConnectedDescriptorToAclFullyConnectedLayerInfo(const FullyConnectedDescriptor &amp;fullyConnectedDesc, const ActivationDescriptor *activationDesc)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.xhtml#l00168">ArmComputeUtils.hpp:168</a></div></div>
+<div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a6c354904637149b84767275e6f725741"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6c354904637149b84767275e6f725741">&#9670;&nbsp;</a></span>NeonGatherWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonGatherWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>indices</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_gather_descriptor.xhtml">GatherDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_gather_workload_8cpp_source.xhtml#l00013">13</a> of file <a class="el" href="_neon_gather_workload_8cpp_source.xhtml">NeonGatherWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00974">NeonLayerSupport::IsGatherSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;{</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclIndices = BuildArmComputeTensorInfo(indices);</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keywordtype">int</span> aclAxis = <a class="code" href="namespacearmnn.xhtml#a44a3b98b37a25c995aa9e4dae7d7b456">ComputeAclAxis</a>(descriptor.m_Axis, input);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keywordflow">return</span> arm_compute::NEGather::validate(&amp;aclInput, &amp;aclIndices, &amp;aclOutput, aclAxis);</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a44a3b98b37a25c995aa9e4dae7d7b456"><div class="ttname"><a href="namespacearmnn.xhtml#a44a3b98b37a25c995aa9e4dae7d7b456">armnn::ComputeAclAxis</a></div><div class="ttdeci">int ComputeAclAxis(const int &amp;armnnAxis, const armnn::TensorInfo &amp;tensor)</div><div class="ttdoc">Function to convert ArmNN axis (left to right) to ACL axis (right to left) ranging from [-rank...</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.xhtml#l00240">ArmComputeUtils.hpp:240</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="aea722abe239545030f4c6fe4e083816f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aea722abe239545030f4c6fe4e083816f">&#9670;&nbsp;</a></span>NeonInstanceNormalizationWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonInstanceNormalizationWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_instance_normalization_descriptor.xhtml">InstanceNormalizationDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_instance_normalization_workload_8cpp_source.xhtml#l00019">19</a> of file <a class="el" href="_neon_instance_normalization_workload_8cpp_source.xhtml">NeonInstanceNormalizationWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00994">NeonLayerSupport::IsInstanceNormalizationSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;{</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keywordflow">return</span> arm_compute::NEInstanceNormalizationLayer::validate(&amp;aclInputInfo,</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; &amp;aclOutputInfo,</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; descriptor.m_Gamma,</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; descriptor.m_Beta,</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; descriptor.m_Eps);</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="ae838df3960d2b5d18d73ed2a07aee917"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae838df3960d2b5d18d73ed2a07aee917">&#9670;&nbsp;</a></span>NeonL2NormalizationWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonL2NormalizationWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_l2_normalization_descriptor.xhtml">L2NormalizationDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_l2_normalization_float_workload_8cpp_source.xhtml#l00019">19</a> of file <a class="el" href="_neon_l2_normalization_float_workload_8cpp_source.xhtml">NeonL2NormalizationFloatWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01006">NeonLayerSupport::IsL2NormalizationSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;{</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keywordtype">int</span> axis = (descriptor.m_DataLayout == DataLayout::NCHW) ? 2 : 0;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keywordflow">return</span> arm_compute::NEL2NormalizeLayer::validate(&amp;aclInput, &amp;aclOutput, axis, descriptor.m_Eps);</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a7832b675e7efeb1315b31067e46ce705"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7832b675e7efeb1315b31067e46ce705">&#9670;&nbsp;</a></span>NeonLogicalAndWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonLogicalAndWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input0</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_logical_and_workload_8cpp_source.xhtml#l00018">18</a> of file <a class="el" href="_neon_logical_and_workload_8cpp_source.xhtml">NeonLogicalAndWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01014">NeonLayerSupport::IsLogicalBinarySupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;{</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo0 = BuildArmComputeTensorInfo(input0);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo1 = BuildArmComputeTensorInfo(input1);</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::NELogicalAnd::validate(&amp;aclInputInfo0,</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; &amp;aclInputInfo1,</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; &amp;aclOutputInfo);</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordflow">return</span> aclStatus;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70b"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">armnn::Status</a></div><div class="ttdeci">Status</div><div class="ttdoc">enumeration </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00029">Types.hpp:29</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="af4f8e11ae5715973420a82d841dfa676"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af4f8e11ae5715973420a82d841dfa676">&#9670;&nbsp;</a></span>NeonLogicalNotWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonLogicalNotWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_logical_not_workload_8cpp_source.xhtml#l00019">19</a> of file <a class="el" href="_neon_logical_not_workload_8cpp_source.xhtml">NeonLogicalNotWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00883">NeonLayerSupport::IsElementwiseUnarySupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;{</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::NELogicalNot::validate(&amp;aclInputInfo,</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; &amp;aclOutputInfo);</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keywordflow">return</span> aclStatus;</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70b"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">armnn::Status</a></div><div class="ttdeci">Status</div><div class="ttdoc">enumeration </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00029">Types.hpp:29</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a2de04fd10d0a2419e0a05f12741017dc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2de04fd10d0a2419e0a05f12741017dc">&#9670;&nbsp;</a></span>NeonLogicalOrWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonLogicalOrWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input0</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_logical_or_workload_8cpp_source.xhtml#l00018">18</a> of file <a class="el" href="_neon_logical_or_workload_8cpp_source.xhtml">NeonLogicalOrWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01014">NeonLayerSupport::IsLogicalBinarySupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;{</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo0 = BuildArmComputeTensorInfo(input0);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo1 = BuildArmComputeTensorInfo(input1);</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> aclStatus = arm_compute::NELogicalOr::validate(&amp;aclInputInfo0,</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; &amp;aclInputInfo1,</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; &amp;aclOutputInfo);</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordflow">return</span> aclStatus;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70b"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">armnn::Status</a></div><div class="ttdeci">Status</div><div class="ttdoc">enumeration </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00029">Types.hpp:29</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ac57d1e00cc24022c21aa7ff95eb618ba"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac57d1e00cc24022c21aa7ff95eb618ba">&#9670;&nbsp;</a></span>NeonLogSoftmaxWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonLogSoftmaxWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="namespacearmnn.xhtml#ac14705405cbcdd580df613de6766fe65">LogSoftmaxDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_log_softmax_workload_8cpp_source.xhtml#l00019">19</a> of file <a class="el" href="_neon_log_softmax_workload_8cpp_source.xhtml">NeonLogSoftmaxWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01039">NeonLayerSupport::IsLogSoftmaxSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;{</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keywordtype">int</span> aclAxis = <a class="code" href="namespacearmnn.xhtml#a44a3b98b37a25c995aa9e4dae7d7b456">ComputeAclAxis</a>(descriptor.m_Axis, input);</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keywordflow">return</span> arm_compute::NELogSoftmaxLayer::validate(&amp;aclInputInfo,</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; &amp;aclOutputInfo,</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; descriptor.m_Beta,</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; aclAxis);</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a44a3b98b37a25c995aa9e4dae7d7b456"><div class="ttname"><a href="namespacearmnn.xhtml#a44a3b98b37a25c995aa9e4dae7d7b456">armnn::ComputeAclAxis</a></div><div class="ttdeci">int ComputeAclAxis(const int &amp;armnnAxis, const armnn::TensorInfo &amp;tensor)</div><div class="ttdoc">Function to convert ArmNN axis (left to right) to ACL axis (right to left) ranging from [-rank...</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.xhtml#l00240">ArmComputeUtils.hpp:240</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ad1991a3499a991b1fdd71d918f793f13"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad1991a3499a991b1fdd71d918f793f13">&#9670;&nbsp;</a></span>NeonLogWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonLogWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_log_workload_8cpp_source.xhtml#l00017">17</a> of file <a class="el" href="_neon_log_workload_8cpp_source.xhtml">NeonLogWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00883">NeonLayerSupport::IsElementwiseUnarySupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;{</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keywordflow">return</span> arm_compute::NELogLayer::validate(&amp;aclInput, &amp;aclOutput);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a9e06cc2a2ac8b88fc72972695a17910f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9e06cc2a2ac8b88fc72972695a17910f">&#9670;&nbsp;</a></span>NeonLstmFloatWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonLstmFloatWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>outputStateIn</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>cellStateIn</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>scratchBuffer</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>outputStateOut</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>cellStateOut</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_lstm_descriptor.xhtml">LstmDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_lstm_input_params_info.xhtml">LstmInputParamsInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>paramsInfo</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_lstm_float_workload_8cpp_source.xhtml#l00280">280</a> of file <a class="el" href="_neon_lstm_float_workload_8cpp_source.xhtml">NeonLstmFloatWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01047">NeonLayerSupport::IsLstmSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160;{</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; arm_compute::LSTMParams&lt;arm_compute::ITensorInfo&gt; lstm_params_info;</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160;</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="comment">// The inputs and outputs</span></div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateInInfo = BuildArmComputeTensorInfo(outputStateIn);</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateInInfo = BuildArmComputeTensorInfo(cellStateIn);</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclScratchBufferInfo = BuildArmComputeTensorInfo(scratchBuffer);</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateOutInfo = BuildArmComputeTensorInfo(outputStateOut);</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateOutInfo = BuildArmComputeTensorInfo(cellStateOut);</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160;</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="comment">// Basic parameters</span></div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToForgetWeightsInfo</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToForgetWeights());</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToCellWeightsInfo</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToCellWeights());</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToOutputWeightsInfo</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToOutputWeights());</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToForgetWeightsInfo</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToForgetWeights());</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToCellWeightsInfo</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToCellWeights());</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToOutputWeightsInfo</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToOutputWeights());</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclForgetGateBiasInfo</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetForgetGateBias());</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellBiasInfo</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetCellBias());</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputGateBiasInfo</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetOutputGateBias());</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160;</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; arm_compute::TensorInfo aclInputToInputWeightsInfo;</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; arm_compute::TensorInfo aclRecurrentToInputWeightsInfo;</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; arm_compute::TensorInfo aclCellToInputWeightsInfo;</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; arm_compute::TensorInfo aclInputGateBiasInfo;</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; arm_compute::TensorInfo aclProjectionWeightsInfo;</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; arm_compute::TensorInfo aclProjectionBiasInfo;</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; arm_compute::TensorInfo aclCellToForgetWeightsInfo;</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; arm_compute::TensorInfo aclCellToOutputWeightsInfo;</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; arm_compute::TensorInfo aclInputLayerNormWeightsInfo;</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; arm_compute::TensorInfo aclForgetLayerNormWeightsInfo;</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; arm_compute::TensorInfo aclCellLayerNormWeightsInfo;</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; arm_compute::TensorInfo aclOutputLayerNormWeightsInfo;</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160;</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160;</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; {</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; {</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; aclCellToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToInputWeights());</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; }</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; aclInputToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputToInputWeights());</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; aclRecurrentToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToInputWeights());</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; aclInputGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputGateBias());</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160;</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; lstm_params_info.set_cifg_params(&amp;aclInputToInputWeightsInfo, &amp;aclRecurrentToInputWeightsInfo,</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; descriptor.m_PeepholeEnabled ? &amp;aclCellToInputWeightsInfo : <span class="keyword">nullptr</span>,</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; &amp;aclInputGateBiasInfo);</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; }</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160;</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="keywordflow">if</span> (descriptor.m_ProjectionEnabled)</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; {</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <span class="keywordflow">if</span> (paramsInfo.m_ProjectionBias != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; {</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; aclProjectionBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionBias());</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; }</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; aclProjectionWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionWeights());</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160;</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; lstm_params_info.set_projection_params(&amp;aclProjectionWeightsInfo,</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; paramsInfo.m_ProjectionBias != <span class="keyword">nullptr</span> ?</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; &amp;aclProjectionBiasInfo : <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; }</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160;</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; {</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; aclCellToForgetWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToForgetWeights());</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; aclCellToOutputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToOutputWeights());</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160;</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; lstm_params_info.set_peephole_params(&amp;aclCellToForgetWeightsInfo, &amp;aclCellToOutputWeightsInfo);</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; }</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160;</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <span class="keywordflow">if</span> (descriptor.m_LayerNormEnabled)</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; {</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; {</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; aclInputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputLayerNormWeights());</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; }</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; aclForgetLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetForgetLayerNormWeights());</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; aclCellLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellLayerNormWeights());</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; aclOutputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetOutputLayerNormWeights());</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160;</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; lstm_params_info.set_layer_normalization_params(descriptor.m_CifgEnabled ?</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="keyword">nullptr</span> : &amp;aclInputLayerNormWeightsInfo,</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; &amp;aclForgetLayerNormWeightsInfo,</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; &amp;aclCellLayerNormWeightsInfo,</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; &amp;aclOutputLayerNormWeightsInfo);</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; }</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160;</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <span class="keywordtype">float</span> cell_threshold = descriptor.m_ClippingThresCell;</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <span class="keywordtype">float</span> projection_threshold = descriptor.m_ClippingThresProj;</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160;</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <span class="comment">// for preparing the object for the class ActivationLayerInfo, we need to consider 5 situations</span></div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; arm_compute::ActivationLayerInfo activationLayerInfo;</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <span class="keywordflow">switch</span> (descriptor.m_ActivationFunc)</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; {</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="keywordflow">case</span> 0:</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; <span class="comment">// no activation, do nothing</span></div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <span class="keywordflow">case</span> 1:</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; activationLayerInfo = arm_compute::ActivationLayerInfo(</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; arm_compute::ActivationLayerInfo::ActivationFunction::RELU);</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="keywordflow">case</span> 3:</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; activationLayerInfo = arm_compute::ActivationLayerInfo(</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; arm_compute::ActivationLayerInfo::ActivationFunction::BOUNDED_RELU, 6.0);</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <span class="keywordflow">case</span> 4:</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; activationLayerInfo = arm_compute::ActivationLayerInfo(</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; arm_compute::ActivationLayerInfo::ActivationFunction::TANH, 1.0, 1.0);</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <span class="keywordflow">case</span> 6:</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; activationLayerInfo = arm_compute::ActivationLayerInfo(</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; arm_compute::ActivationLayerInfo::ActivationFunction::LOGISTIC);</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_exception.xhtml">armnn::Exception</a>(<span class="stringliteral">&quot;Wrong Type of Activation Function!&quot;</span>);</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; }</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160;</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <span class="keywordflow">return</span> arm_compute::NELSTMLayer::validate(&amp;aclInputInfo,</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; &amp;aclInputToForgetWeightsInfo,</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; &amp;aclInputToCellWeightsInfo,</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; &amp;aclInputToOutputWeightsInfo,</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; &amp;aclRecurrentToForgetWeightsInfo,</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; &amp;aclRecurrentToCellWeightsInfo,</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; &amp;aclRecurrentToOutputWeightsInfo,</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; &amp;aclForgetGateBiasInfo,</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; &amp;aclCellBiasInfo,</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; &amp;aclOutputGateBiasInfo,</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; &amp;aclOutputStateInInfo,</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; &amp;aclCellStateInInfo,</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; &amp;aclScratchBufferInfo,</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; &amp;aclOutputStateOutInfo,</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; &amp;aclCellStateOutInfo,</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; &amp;aclOutputInfo,</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; lstm_params_info,</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; activationLayerInfo,</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; cell_threshold,</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; projection_threshold);</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_exception.xhtml">armnn::Exception</a></div><div class="ttdoc">Base class for all ArmNN exceptions so that users can filter to just those. </div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00046">Exceptions.hpp:46</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a8d2ea79addd8ef64be2ca0dad3408f00"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8d2ea79addd8ef64be2ca0dad3408f00">&#9670;&nbsp;</a></span>NeonMaximumWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonMaximumWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input0</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_maximum_workload_8cpp_source.xhtml#l00014">14</a> of file <a class="el" href="_neon_maximum_workload_8cpp_source.xhtml">NeonMaximumWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01071">NeonLayerSupport::IsMaximumSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;{</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput0 = armcomputetensorutils::BuildArmComputeTensorInfo(input0);</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput1 = armcomputetensorutils::BuildArmComputeTensorInfo(input1);</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keywordflow">return</span> arm_compute::NEElementwiseMax::validate(&amp;aclInput0,</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; &amp;aclInput1,</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; &amp;aclOutput);</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="ae74e210a3f716c1f5f32663a8ec66345"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae74e210a3f716c1f5f32663a8ec66345">&#9670;&nbsp;</a></span>NeonMeanWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonMeanWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_mean_descriptor.xhtml">MeanDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_mean_workload_8cpp_source.xhtml#l00018">18</a> of file <a class="el" href="_neon_mean_workload_8cpp_source.xhtml">NeonMeanWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01083">NeonLayerSupport::IsMeanSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;{</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <a class="code" href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> coords = BuildArmComputeReductionCoordinates(aclInputInfo.num_dimensions(),</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; input.GetNumDimensions(),</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; descriptor.m_Axis);</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordflow">return</span> arm_compute::NEReduceMean::validate(&amp;aclInputInfo, coords, descriptor.m_KeepDims, &amp;aclOutputInfo);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ac6e86c1def7f674d3c4cb7f577874aa6"><div class="ttname"><a href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">armnn::Coordinates</a></div><div class="ttdeci">std::array&lt; unsigned int, MaxNumOfTensorDimensions &gt; Coordinates</div><div class="ttdef"><b>Definition:</b> <a href="_internal_types_8hpp_source.xhtml#l00015">InternalTypes.hpp:15</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ab81159ebfa638af1b91fe1e8c5de1955"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab81159ebfa638af1b91fe1e8c5de1955">&#9670;&nbsp;</a></span>NeonMinimumWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonMinimumWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input0</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Validate function for validating the inputs and output. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramdir">[in]</td><td class="paramname">input0</td><td>The input0 value to be validated. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">input1</td><td>The input1 value to be validated. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">output</td><td>The output value to be validated. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p class="definition">Definition at line <a class="el" href="_neon_minimum_workload_8cpp_source.xhtml#l00015">15</a> of file <a class="el" href="_neon_minimum_workload_8cpp_source.xhtml">NeonMinimumWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01095">NeonLayerSupport::IsMinimumSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;{</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput0 = armcomputetensorutils::BuildArmComputeTensorInfo(input0);</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput1 = armcomputetensorutils::BuildArmComputeTensorInfo(input1);</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordflow">return</span> arm_compute::NEElementwiseMin::validate(&amp;aclInput0,</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; &amp;aclInput1,</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; &amp;aclOutput);</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="ad512520e809bfed4fbd3db9fbc241263"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad512520e809bfed4fbd3db9fbc241263">&#9670;&nbsp;</a></span>NeonMultiplicationWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonMultiplicationWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input0</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> *&#160;</td>
+ <td class="paramname"><em>activationDescriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_multiplication_workload_8cpp_source.xhtml#l00019">19</a> of file <a class="el" href="_neon_multiplication_workload_8cpp_source.xhtml">NeonMultiplicationWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01107">NeonLayerSupport::IsMultiplicationSupported()</a>, and <a class="el" href="_neon_backend_8cpp_source.xhtml#l00142">NeonBackend::OptimizeSubgraphView()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;{</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput1 = armcomputetensorutils::BuildArmComputeTensorInfo(input0);</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput2 = armcomputetensorutils::BuildArmComputeTensorInfo(input1);</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keyword">auto</span> convertPolicy = (<a class="code" href="namespacearmnn.xhtml#ad44c007f21af2d0375e3ef9400a1b275">IsQuantizedType</a>(input0.GetDataType()) || <a class="code" href="namespacearmnn.xhtml#ad44c007f21af2d0375e3ef9400a1b275">IsQuantizedType</a>(input1.GetDataType())) ?</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; arm_compute::ConvertPolicy::SATURATE :</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; arm_compute::ConvertPolicy::WRAP;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationInfo = <a class="code" href="namespacearmnn.xhtml#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; activationDescriptor);</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="comment">// At the time of writing, configure() will fail if a rounding policy other than TO_ZERO is supplied to it,</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="comment">// when providing a scale of 1.0 for F32 tensors, even though the provided rounding policy appears to be</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="comment">// ignored for F32 tensors.</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">return</span> arm_compute::NEPixelWiseMultiplication::validate(&amp;aclInput1,</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; &amp;aclInput2,</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; &amp;aclOutput,</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; 1.0f,</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; convertPolicy,</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; arm_compute::RoundingPolicy::TO_ZERO,</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; activationInfo);</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ad44c007f21af2d0375e3ef9400a1b275"><div class="ttname"><a href="namespacearmnn.xhtml#ad44c007f21af2d0375e3ef9400a1b275">armnn::IsQuantizedType</a></div><div class="ttdeci">constexpr bool IsQuantizedType()</div><div class="ttdef"><b>Definition:</b> <a href="_types_utils_8hpp_source.xhtml#l00280">TypesUtils.hpp:280</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad701d0d29baa4266ab4d33b090aa661c"><div class="ttname"><a href="namespacearmnn.xhtml#ad701d0d29baa4266ab4d33b090aa661c">armnn::ConvertActivationDescriptorToAclActivationLayerInfo</a></div><div class="ttdeci">arm_compute::ActivationLayerInfo ConvertActivationDescriptorToAclActivationLayerInfo(const ActivationDescriptor &amp;actDesc)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.xhtml#l00085">ArmComputeUtils.hpp:85</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a7f955750d00cdcae6038f07cc73686ea"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7f955750d00cdcae6038f07cc73686ea">&#9670;&nbsp;</a></span>NeonNegWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonNegWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_neg_workload_8cpp_source.xhtml#l00017">17</a> of file <a class="el" href="_neon_neg_workload_8cpp_source.xhtml">NeonNegWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00883">NeonLayerSupport::IsElementwiseUnarySupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;{</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keywordflow">return</span> arm_compute::NENegLayer::validate(&amp;aclInput, &amp;aclOutput);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a2ec6297db90d1d4c258c13d2d72b13d9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2ec6297db90d1d4c258c13d2d72b13d9">&#9670;&nbsp;</a></span>NeonNormalizationWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonNormalizationWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_normalization_descriptor.xhtml">NormalizationDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_normalization_float_workload_8cpp_source.xhtml#l00049">49</a> of file <a class="el" href="_neon_normalization_float_workload_8cpp_source.xhtml">NeonNormalizationFloatWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01133">NeonLayerSupport::IsNormalizationSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;{</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; arm_compute::NormalizationLayerInfo normalizationInfo = BuildArmComputeNormalizationLayerInfo(descriptor);</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordflow">return</span> arm_compute::NENormalizationLayer::validate(&amp;aclInput, &amp;aclOutput, normalizationInfo);</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a39209c0c078e83227222eb885317c2c5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a39209c0c078e83227222eb885317c2c5">&#9670;&nbsp;</a></span>NeonPadWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonPadWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_pad_descriptor.xhtml">PadDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_pad_workload_8cpp_source.xhtml#l00059">59</a> of file <a class="el" href="_neon_pad_workload_8cpp_source.xhtml">NeonPadWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01151">NeonLayerSupport::IsPadSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;{</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; std::vector&lt;std::pair&lt;unsigned int, unsigned int&gt;&gt; reversed_PadList(descriptor.m_PadList.size());</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; std::reverse_copy(std::begin(descriptor.m_PadList),</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; std::end(descriptor.m_PadList),</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; std::begin(reversed_PadList));</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; arm_compute::PaddingList padList = <span class="keyword">static_cast&lt;</span>arm_compute::PaddingList<span class="keyword">&gt;</span>(reversed_PadList);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="comment">// PixelValue is currently unused when validating, but it&#39;s required to pass in PaddingMode.</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; arm_compute::PixelValue pixelValue = GetPixelValue(&amp;aclInputInfo, descriptor.m_PadValue);</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">return</span> arm_compute::NEPadLayer::validate(&amp;aclInputInfo,</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; &amp;aclOutputInfo,</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; padList,</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; pixelValue,</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <a class="code" href="namespacearmnn.xhtml#adf5a024ace0dbe2af2d5b1a1b9623771">ConvertPaddingModeToAcl</a>(descriptor.m_PaddingMode));</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_adf5a024ace0dbe2af2d5b1a1b9623771"><div class="ttname"><a href="namespacearmnn.xhtml#adf5a024ace0dbe2af2d5b1a1b9623771">armnn::ConvertPaddingModeToAcl</a></div><div class="ttdeci">arm_compute::PaddingMode ConvertPaddingModeToAcl(const PaddingMode &amp;paddingMode)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.xhtml#l00303">ArmComputeUtils.hpp:303</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a70650f6b1d3b8511fcdb989ca769cdbb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a70650f6b1d3b8511fcdb989ca769cdbb">&#9670;&nbsp;</a></span>NeonPermuteWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonPermuteWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_permute_descriptor.xhtml">PermuteDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_permute_workload_8cpp_source.xhtml#l00015">15</a> of file <a class="el" href="_neon_permute_workload_8cpp_source.xhtml">NeonPermuteWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01163">NeonLayerSupport::IsPermuteSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;{</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_permutation_vector.xhtml">armnn::PermutationVector</a>&amp; mappings = descriptor.m_DimMappings;</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordflow">return</span> arm_compute::NEPermute::validate(&amp;aclInputInfo, &amp;aclOutputInfo,</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; armcomputetensorutils::BuildArmComputePermutationVector(mappings));</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_permutation_vector_xhtml"><div class="ttname"><a href="classarmnn_1_1_permutation_vector.xhtml">armnn::PermutationVector</a></div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00282">Types.hpp:282</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a1f07655db8ad7f2738bb0d3d9e2316cc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1f07655db8ad7f2738bb0d3d9e2316cc">&#9670;&nbsp;</a></span>NeonPooling2dWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonPooling2dWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_pooling2d_descriptor.xhtml">Pooling2dDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_pooling2d_workload_8cpp_source.xhtml#l00022">22</a> of file <a class="el" href="_neon_pooling2d_workload_8cpp_source.xhtml">NeonPooling2dWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01171">NeonLayerSupport::IsPooling2dSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;{</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo =</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo =</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; arm_compute::PoolingLayerInfo layerInfo = BuildArmComputePoolingLayerInfo(descriptor);</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordflow">return</span> arm_compute::NEPoolingLayer::validate(&amp;aclInputInfo, &amp;aclOutputInfo, layerInfo);</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a188adc104b16db3dc23ed2c5ff06cbb8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a188adc104b16db3dc23ed2c5ff06cbb8">&#9670;&nbsp;</a></span>NeonPreluWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonPreluWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>alpha</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_prelu_workload_8cpp_source.xhtml#l00017">17</a> of file <a class="el" href="_neon_prelu_workload_8cpp_source.xhtml">NeonPreluWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01179">NeonLayerSupport::IsPreluSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;{</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclAlpha = armcomputetensorutils::BuildArmComputeTensorInfo(alpha);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keywordflow">return</span> arm_compute::NEPReluLayer::validate(&amp;aclInput,</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; &amp;aclAlpha,</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; &amp;aclOutput);</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a6e6f731864d33c0acd4140c7dfe17b0a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6e6f731864d33c0acd4140c7dfe17b0a">&#9670;&nbsp;</a></span>NeonQLstmWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonQLstmWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>cellStateIn</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>outputStateIn</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>cellStateOut</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>outputStateOut</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_q_lstm_descriptor.xhtml">QLstmDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_lstm_input_params_info.xhtml">LstmInputParamsInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>paramsInfo</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_q_lstm_workload_8cpp_source.xhtml#l00243">243</a> of file <a class="el" href="_neon_q_lstm_workload_8cpp_source.xhtml">NeonQLstmWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01187">NeonLayerSupport::IsQLstmSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160;{</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; arm_compute::LSTMParams&lt;arm_compute::ITensorInfo&gt; aclParamsInfo;</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160;</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="comment">// Input/Output tensor info</span></div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateInInfo = BuildArmComputeTensorInfo(outputStateIn);</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateInInfo = BuildArmComputeTensorInfo(cellStateIn);</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateOutInfo = BuildArmComputeTensorInfo(outputStateOut);</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateOutInfo = BuildArmComputeTensorInfo(cellStateOut);</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160;</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="comment">// Mandatory tensor info</span></div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToForgetWeightsInfo</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToForgetWeights());</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToCellWeightsInfo</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToCellWeights());</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToOutputWeightsInfo</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToOutputWeights());</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToForgetWeightsInfo</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToForgetWeights());</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToCellWeightsInfo</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToCellWeights());</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToOutputWeightsInfo</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToOutputWeights());</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclForgetGateBiasInfo</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetForgetGateBias());</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellBiasInfo</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetCellBias());</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputGateBiasInfo</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetOutputGateBias());</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160;</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="comment">// Optional tensor info</span></div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; arm_compute::TensorInfo aclInputToInputWeightsInfo;</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; arm_compute::TensorInfo aclRecurrentToInputWeightsInfo;</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160;</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; arm_compute::TensorInfo aclCellToInputWeightsInfo;</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; arm_compute::TensorInfo aclCellToForgetWeightsInfo;</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; arm_compute::TensorInfo aclCellToOutputWeightsInfo;</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160;</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; arm_compute::TensorInfo aclInputGateBiasInfo;</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160;</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; arm_compute::TensorInfo aclProjectionWeightsInfo;</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; arm_compute::TensorInfo aclProjectionBiasInfo;</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160;</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; arm_compute::TensorInfo aclInputLayerNormWeightsInfo;</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; arm_compute::TensorInfo aclForgetLayerNormWeightsInfo;</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; arm_compute::TensorInfo aclCellLayerNormWeightsInfo;</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; arm_compute::TensorInfo aclOutputLayerNormWeightsInfo;</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160;</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="comment">// Create tensor info for optional params if they are enabled</span></div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; {</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; {</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; aclCellToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToInputWeights());</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; }</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; aclCellToForgetWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToForgetWeights());</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; aclCellToOutputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToOutputWeights());</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160;</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <span class="comment">// Set peephole params info</span></div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; aclParamsInfo.set_peephole_params(&amp;aclCellToForgetWeightsInfo,</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; &amp;aclCellToOutputWeightsInfo);</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; }</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160;</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="keywordflow">if</span> (descriptor.m_ProjectionEnabled)</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; {</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; aclProjectionWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionWeights());</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160;</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="keywordflow">if</span> (paramsInfo.m_ProjectionBias != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; {</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; aclProjectionBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionBias());</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; }</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160;</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <span class="comment">// Set projection params info</span></div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; aclParamsInfo.set_projection_params(</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; &amp;aclProjectionWeightsInfo,</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; paramsInfo.m_ProjectionBias != <span class="keyword">nullptr</span> ? &amp;aclProjectionBiasInfo : <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; }</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160;</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="keywordflow">if</span> (descriptor.m_LayerNormEnabled)</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; {</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; {</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; aclInputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputLayerNormWeights());</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; }</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160;</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; aclForgetLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetForgetLayerNormWeights());</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; aclCellLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellLayerNormWeights());</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; aclOutputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetOutputLayerNormWeights());</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160;</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <span class="comment">// Set layer norm params info</span></div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; aclParamsInfo.set_layer_normalization_params(</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; paramsInfo.m_InputLayerNormWeights != <span class="keyword">nullptr</span> ? &amp;aclInputLayerNormWeightsInfo : <span class="keyword">nullptr</span>,</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; &amp;aclForgetLayerNormWeightsInfo,</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; &amp;aclCellLayerNormWeightsInfo,</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; &amp;aclOutputLayerNormWeightsInfo);</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; }</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160;</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; {</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; aclInputToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputToInputWeights());</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; aclRecurrentToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToInputWeights());</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; aclInputGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputGateBias());</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160;</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <span class="comment">// Set CIFG params info</span></div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; aclParamsInfo.set_cifg_params(</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; &amp;aclInputToInputWeightsInfo,</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; &amp;aclRecurrentToInputWeightsInfo,</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; paramsInfo.m_CellToInputWeights != <span class="keyword">nullptr</span> ? &amp;aclCellToInputWeightsInfo : <span class="keyword">nullptr</span>,</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; &amp;aclInputGateBiasInfo);</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; }</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160;</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; <span class="comment">// Set scalar descriptor params</span></div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; aclParamsInfo.set_cell_clip_params(descriptor.m_CellClip);</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; aclParamsInfo.set_projection_clip_params(descriptor.m_ProjectionClip);</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; aclParamsInfo.set_hidden_state_params(descriptor.m_HiddenStateZeroPoint, descriptor.m_HiddenStateScale);</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; aclParamsInfo.set_matmul_scale_params(descriptor.m_InputIntermediateScale,</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; descriptor.m_ForgetIntermediateScale,</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; descriptor.m_CellIntermediateScale,</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; descriptor.m_OutputIntermediateScale);</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160;</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <span class="comment">// QLSTM NEON validate</span></div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <span class="keywordflow">return</span> arm_compute::NEQLSTMLayer::validate(&amp;aclInputInfo,</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; &amp;aclInputToForgetWeightsInfo,</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; &amp;aclInputToCellWeightsInfo,</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; &amp;aclInputToOutputWeightsInfo,</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; &amp;aclRecurrentToForgetWeightsInfo,</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; &amp;aclRecurrentToCellWeightsInfo,</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; &amp;aclRecurrentToOutputWeightsInfo,</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; &amp;aclForgetGateBiasInfo,</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; &amp;aclCellBiasInfo,</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; &amp;aclOutputGateBiasInfo,</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; &amp;aclCellStateInInfo,</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; &amp;aclOutputStateInInfo,</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; &amp;aclCellStateOutInfo,</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; &amp;aclOutputStateOutInfo,</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; &amp;aclOutputInfo,</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; aclParamsInfo);</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="ae83632e641892ad2de78f316376f6bd0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae83632e641892ad2de78f316376f6bd0">&#9670;&nbsp;</a></span>NeonQuantizedLstmWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonQuantizedLstmWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>cellStateIn</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>outputStateIn</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>cellStateOut</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>outputStateOut</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_quantized_lstm_input_params_info.xhtml">QuantizedLstmInputParamsInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>paramsInfo</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_quantized_lstm_workload_8cpp_source.xhtml#l00131">131</a> of file <a class="el" href="_neon_quantized_lstm_workload_8cpp_source.xhtml">NeonQuantizedLstmWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01232">NeonLayerSupport::IsQuantizedLstmSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;{</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="comment">// The inputs and outputs</span></div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateInInfo = BuildArmComputeTensorInfo(cellStateIn);</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateInInfo = BuildArmComputeTensorInfo(outputStateIn);</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateOutInfo = BuildArmComputeTensorInfo(cellStateOut);</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateOutInfo = BuildArmComputeTensorInfo(outputStateOut);</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="comment">// Basic parameters</span></div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToInputWeightsInfo</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToInputWeights());</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToForgetWeightsInfo</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToForgetWeights());</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToCellWeightsInfo</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToCellWeights());</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToOutputWeightsInfo</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToOutputWeights());</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToInputWeightsInfo</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToInputWeights());</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToForgetWeightsInfo</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToForgetWeights());</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToCellWeightsInfo</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToCellWeights());</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToOutputWeightsInfo</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToOutputWeights());</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputGateBiasInfo</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputGateBias());</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclForgetGateBiasInfo</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetForgetGateBias());</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellBiasInfo</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetCellBias());</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputGateBiasInfo</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetOutputGateBias());</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">return</span> arm_compute::NELSTMLayerQuantized::validate(&amp;aclInputInfo,</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; &amp;aclInputToInputWeightsInfo,</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; &amp;aclInputToForgetWeightsInfo,</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; &amp;aclInputToCellWeightsInfo,</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; &amp;aclInputToOutputWeightsInfo,</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; &amp;aclRecurrentToInputWeightsInfo,</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; &amp;aclRecurrentToForgetWeightsInfo,</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; &amp;aclRecurrentToCellWeightsInfo,</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; &amp;aclRecurrentToOutputWeightsInfo,</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; &amp;aclInputGateBiasInfo,</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; &amp;aclForgetGateBiasInfo,</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; &amp;aclCellBiasInfo,</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; &amp;aclOutputGateBiasInfo,</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; &amp;aclCellStateInInfo,</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; &amp;aclOutputStateInInfo,</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; &amp;aclCellStateOutInfo,</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; &amp;aclOutputStateOutInfo);</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a4d1e35c8bbe48e99dd522ac0f75f77d7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4d1e35c8bbe48e99dd522ac0f75f77d7">&#9670;&nbsp;</a></span>NeonQuantizeWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonQuantizeWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_quantize_workload_8cpp_source.xhtml#l00018">18</a> of file <a class="el" href="_neon_quantize_workload_8cpp_source.xhtml">NeonQuantizeWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01222">NeonLayerSupport::IsQuantizeSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;{</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo neonInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo neonOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordflow">return</span> arm_compute::NEQuantizationLayer::validate(&amp;neonInputInfo, &amp;neonOutputInfo);</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="aceb6d218204c4e0e7b4c968d6266917c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aceb6d218204c4e0e7b4c968d6266917c">&#9670;&nbsp;</a></span>NeonReduceWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonReduceWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_reduce_descriptor.xhtml">ReduceDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_reduce_workload_8cpp_source.xhtml#l00019">19</a> of file <a class="el" href="_neon_reduce_workload_8cpp_source.xhtml">NeonReduceWorkload.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_descriptors_8hpp_source.xhtml#l01501">ReduceDescriptor::m_vAxis</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01250">NeonLayerSupport::IsReduceSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;{</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordflow">if</span> ( descriptor.m_vAxis.size()==1 || descriptor.m_vAxis.empty())</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; {</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <a class="code" href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> coords = BuildArmComputeReductionCoordinates(aclInputInfo.num_dimensions(),</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; input.GetNumDimensions(),</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; descriptor.m_vAxis);</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordflow">return</span> arm_compute::NEReductionOperation::validate(&amp;aclInputInfo,</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; &amp;aclOutputInfo,</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; static_cast&lt;unsigned int&gt;(coords[0]),</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <a class="code" href="namespacearmnn.xhtml#a03ab984d93d0f240f31274499b72e6b0">ConvertReductionOperationToAcl</a>(descriptor),</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; descriptor.m_KeepDims);</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; }</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; {</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="comment">// Validate layer if there are multiple axes.</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> status;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <a class="code" href="_arm_compute_utils_8hpp.xhtml#a97d67174b2c48969547ba4bac79e5ea2">IS_MULTI_AXES_REDUCE_SUPPORTED</a>(<a class="code" href="namespacearmnn.xhtml#aceb6d218204c4e0e7b4c968d6266917c">NeonReduceWorkloadValidate</a>, input, descriptor, status);</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordflow">return</span> status;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; }</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;}</div><div class="ttc" id="_arm_compute_utils_8hpp_xhtml_a97d67174b2c48969547ba4bac79e5ea2"><div class="ttname"><a href="_arm_compute_utils_8hpp.xhtml#a97d67174b2c48969547ba4bac79e5ea2">IS_MULTI_AXES_REDUCE_SUPPORTED</a></div><div class="ttdeci">#define IS_MULTI_AXES_REDUCE_SUPPORTED(func, input, desc, status)</div><div class="ttdoc">Macro function check if layer with multiple axes is supported on each backend. </div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.xhtml#l00381">ArmComputeUtils.hpp:381</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ac6e86c1def7f674d3c4cb7f577874aa6"><div class="ttname"><a href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">armnn::Coordinates</a></div><div class="ttdeci">std::array&lt; unsigned int, MaxNumOfTensorDimensions &gt; Coordinates</div><div class="ttdef"><b>Definition:</b> <a href="_internal_types_8hpp_source.xhtml#l00015">InternalTypes.hpp:15</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_aceb6d218204c4e0e7b4c968d6266917c"><div class="ttname"><a href="namespacearmnn.xhtml#aceb6d218204c4e0e7b4c968d6266917c">armnn::NeonReduceWorkloadValidate</a></div><div class="ttdeci">arm_compute::Status NeonReduceWorkloadValidate(const TensorInfo &amp;input, const TensorInfo &amp;output, const ReduceDescriptor &amp;descriptor)</div><div class="ttdef"><b>Definition:</b> <a href="_neon_reduce_workload_8cpp_source.xhtml#l00019">NeonReduceWorkload.cpp:19</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a03ab984d93d0f240f31274499b72e6b0"><div class="ttname"><a href="namespacearmnn.xhtml#a03ab984d93d0f240f31274499b72e6b0">armnn::ConvertReductionOperationToAcl</a></div><div class="ttdeci">arm_compute::ReductionOperation ConvertReductionOperationToAcl(const ReduceDescriptor &amp;descriptor)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.xhtml#l00314">ArmComputeUtils.hpp:314</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70b"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">armnn::Status</a></div><div class="ttdeci">Status</div><div class="ttdoc">enumeration </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00029">Types.hpp:29</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a430021076042c8157a926a3bb3a37152"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a430021076042c8157a926a3bb3a37152">&#9670;&nbsp;</a></span>NeonReshapeWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonReshapeWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_reshape_workload_8cpp_source.xhtml#l00017">17</a> of file <a class="el" href="_neon_reshape_workload_8cpp_source.xhtml">NeonReshapeWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01262">NeonLayerSupport::IsReshapeSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;{</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordflow">return</span> arm_compute::NEReshapeLayer::validate(&amp;aclInputInfo, &amp;aclOutputInfo);</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a552d65f4e0a6c9e7c7796e77590063e9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a552d65f4e0a6c9e7c7796e77590063e9">&#9670;&nbsp;</a></span>NeonResizeWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonResizeWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_resize_descriptor.xhtml">ResizeDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_resize_workload_8cpp_source.xhtml#l00022">22</a> of file <a class="el" href="_neon_resize_workload_8cpp_source.xhtml">NeonResizeWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01274">NeonLayerSupport::IsResizeSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;{</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">arm_compute::DataLayout</a> aclDataLayout = ConvertDataLayout(descriptor.m_DataLayout);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; aclInputInfo.set_data_layout(aclDataLayout);</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; aclOutputInfo.set_data_layout(aclDataLayout);</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; arm_compute::InterpolationPolicy aclInterpolationPolicy =</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <a class="code" href="namespacearmnn.xhtml#ae9bdcb8ac91731109dc423d6ed476204">ConvertResizeMethodToAclInterpolationPolicy</a>(descriptor.m_Method);</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; arm_compute::SamplingPolicy samplingPolicy = descriptor.m_HalfPixelCenters ? arm_compute::SamplingPolicy::CENTER :</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; arm_compute::SamplingPolicy::TOP_LEFT;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordtype">bool</span> usePadding = <span class="keyword">false</span>;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">return</span> arm_compute::NEScale::validate(&amp;aclInputInfo,</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; &amp;aclOutputInfo,</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; arm_compute::ScaleKernelInfo(aclInterpolationPolicy,</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; arm_compute::BorderMode::REPLICATE,</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; arm_compute::PixelValue(0.f),</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; samplingPolicy,</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; usePadding,</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; descriptor.m_AlignCorners));</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ae9bdcb8ac91731109dc423d6ed476204"><div class="ttname"><a href="namespacearmnn.xhtml#ae9bdcb8ac91731109dc423d6ed476204">armnn::ConvertResizeMethodToAclInterpolationPolicy</a></div><div class="ttdeci">arm_compute::InterpolationPolicy ConvertResizeMethodToAclInterpolationPolicy(ResizeMethod resizeMethod)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.xhtml#l00187">ArmComputeUtils.hpp:187</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a></div><div class="ttdeci">DataLayout</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00049">Types.hpp:49</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="aa7d1b5e38aa8cb731519ff12e2a73350"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa7d1b5e38aa8cb731519ff12e2a73350">&#9670;&nbsp;</a></span>NeonRsqrtWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonRsqrtWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_rsqrt_workload_8cpp_source.xhtml#l00018">18</a> of file <a class="el" href="_neon_rsqrt_workload_8cpp_source.xhtml">NeonRsqrtWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00883">NeonLayerSupport::IsElementwiseUnarySupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;{</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordflow">return</span> arm_compute::NERsqrtLayer::validate(&amp;aclInput, &amp;aclOutput);</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="af873a38f5251d348f37f0e94a2adc400"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af873a38f5251d348f37f0e94a2adc400">&#9670;&nbsp;</a></span>NeonSinWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonSinWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_sin_workload_8cpp_source.xhtml#l00017">17</a> of file <a class="el" href="_neon_sin_workload_8cpp_source.xhtml">NeonSinWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00883">NeonLayerSupport::IsElementwiseUnarySupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;{</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keywordflow">return</span> arm_compute::NESinLayer::validate(&amp;aclInput, &amp;aclOutput);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a0a223c0997e3f7faa373ed55f954252b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0a223c0997e3f7faa373ed55f954252b">&#9670;&nbsp;</a></span>NeonSliceWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonSliceWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_slice_descriptor.xhtml">SliceDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_slice_workload_8cpp_source.xhtml#l00021">21</a> of file <a class="el" href="_neon_slice_workload_8cpp_source.xhtml">NeonSliceWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01286">NeonLayerSupport::IsSliceSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;{</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <a class="code" href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> starts;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <a class="code" href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> ends;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; std::tie(starts, ends) = <a class="code" href="namespacearmnn.xhtml#ab40e30cea5a328a3c35aa32f9b7db1c1">SetNeonSliceData</a>(descriptor.m_Begin, descriptor.m_Size);</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordflow">return</span> arm_compute::NESlice::validate(&amp;aclInputInfo, &amp;aclOutputInfo, starts, ends);</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ac6e86c1def7f674d3c4cb7f577874aa6"><div class="ttname"><a href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">armnn::Coordinates</a></div><div class="ttdeci">std::array&lt; unsigned int, MaxNumOfTensorDimensions &gt; Coordinates</div><div class="ttdef"><b>Definition:</b> <a href="_internal_types_8hpp_source.xhtml#l00015">InternalTypes.hpp:15</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ab40e30cea5a328a3c35aa32f9b7db1c1"><div class="ttname"><a href="namespacearmnn.xhtml#ab40e30cea5a328a3c35aa32f9b7db1c1">armnn::SetNeonSliceData</a></div><div class="ttdeci">auto SetNeonSliceData(const std::vector&lt; unsigned int &gt; &amp;m_begin, const std::vector&lt; unsigned int &gt; &amp;m_size)</div><div class="ttdef"><b>Definition:</b> <a href="_neon_workload_utils_8hpp_source.xhtml#l00113">NeonWorkloadUtils.hpp:113</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a4077a9771ba9c551f4ce61863f65e798"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4077a9771ba9c551f4ce61863f65e798">&#9670;&nbsp;</a></span>NeonSoftmaxWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonSoftmaxWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_softmax_descriptor.xhtml">SoftmaxDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_softmax_workload_8cpp_source.xhtml#l00019">19</a> of file <a class="el" href="_neon_softmax_workload_8cpp_source.xhtml">NeonSoftmaxWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01298">NeonLayerSupport::IsSoftmaxSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;{</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keywordtype">int</span> aclAxis = <a class="code" href="namespacearmnn.xhtml#a44a3b98b37a25c995aa9e4dae7d7b456">ComputeAclAxis</a>(descriptor.m_Axis, input);</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keywordflow">return</span> arm_compute::NESoftmaxLayer::validate(&amp;aclInputInfo,</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; &amp;aclOutputInfo,</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; descriptor.m_Beta,</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; aclAxis);</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a44a3b98b37a25c995aa9e4dae7d7b456"><div class="ttname"><a href="namespacearmnn.xhtml#a44a3b98b37a25c995aa9e4dae7d7b456">armnn::ComputeAclAxis</a></div><div class="ttdeci">int ComputeAclAxis(const int &amp;armnnAxis, const armnn::TensorInfo &amp;tensor)</div><div class="ttdoc">Function to convert ArmNN axis (left to right) to ACL axis (right to left) ranging from [-rank...</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.xhtml#l00240">ArmComputeUtils.hpp:240</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ab29257da888af2c4971db1344d8a526c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab29257da888af2c4971db1344d8a526c">&#9670;&nbsp;</a></span>NeonSpaceToBatchNdWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonSpaceToBatchNdWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_space_to_batch_nd_descriptor.xhtml">SpaceToBatchNdDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_space_to_batch_nd_workload_8cpp_source.xhtml#l00020">20</a> of file <a class="el" href="_neon_space_to_batch_nd_workload_8cpp_source.xhtml">NeonSpaceToBatchNdWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01306">NeonLayerSupport::IsSpaceToBatchNdSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;{</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="comment">// ArmNN blockShape is [H, W] Cl asks for W, H</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; int32_t blockHeight = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;int32_t&gt;(descriptor.m_BlockShape[0]);</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; int32_t blockWidth = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;int32_t&gt;(descriptor.m_BlockShape[1]);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; arm_compute::Size2D paddingLeftTop = BuildArmComputeSize2D(</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; descriptor.m_PadList[1].first, descriptor.m_PadList[0].first);</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; arm_compute::Size2D paddingRightBottom = BuildArmComputeSize2D(</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; descriptor.m_PadList[1].second, descriptor.m_PadList[0].second);</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">return</span> arm_compute::NESpaceToBatchLayer::validate(&amp;aclInputInfo,</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; blockWidth,</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; blockHeight,</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; paddingLeftTop,</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; paddingRightBottom,</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; &amp;aclOutputInfo);</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a375ca3cff9f1b005d1412dc5f3cf5b6e"><div class="ttname"><a href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a></div><div class="ttdeci">std::enable_if_t&lt; std::is_unsigned&lt; Source &gt;::value &amp;&amp;std::is_unsigned&lt; Dest &gt;::value, Dest &gt; numeric_cast(Source source)</div><div class="ttdef"><b>Definition:</b> <a href="_numeric_cast_8hpp_source.xhtml#l00035">NumericCast.hpp:35</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="af6d2d40482240def4614deb694933d1e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af6d2d40482240def4614deb694933d1e">&#9670;&nbsp;</a></span>NeonSpaceToDepthWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonSpaceToDepthWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_space_to_depth_descriptor.xhtml">SpaceToDepthDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_space_to_depth_workload_8cpp_source.xhtml#l00019">19</a> of file <a class="el" href="_neon_space_to_depth_workload_8cpp_source.xhtml">NeonSpaceToDepthWorkload.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_descriptors_8hpp_source.xhtml#l01071">SpaceToDepthDescriptor::m_DataLayout</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01318">NeonLayerSupport::IsSpaceToDepthSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;{</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> dataLayout = descriptor.m_DataLayout;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = BuildArmComputeTensorInfo(input, dataLayout);</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = BuildArmComputeTensorInfo(output, dataLayout);</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; int32_t blockSize = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;int32_t&gt;(descriptor.m_BlockSize);</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordflow">return</span> arm_compute::NESpaceToDepthLayer::validate(&amp;aclInput, &amp;aclOutput, blockSize);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a></div><div class="ttdeci">DataLayout</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00049">Types.hpp:49</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a375ca3cff9f1b005d1412dc5f3cf5b6e"><div class="ttname"><a href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a></div><div class="ttdeci">std::enable_if_t&lt; std::is_unsigned&lt; Source &gt;::value &amp;&amp;std::is_unsigned&lt; Dest &gt;::value, Dest &gt; numeric_cast(Source source)</div><div class="ttdef"><b>Definition:</b> <a href="_numeric_cast_8hpp_source.xhtml#l00035">NumericCast.hpp:35</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="aab5ea316b3decb05430323d847e3a773"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aab5ea316b3decb05430323d847e3a773">&#9670;&nbsp;</a></span>NeonSplitterWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonSplitterWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::vector&lt; std::reference_wrapper&lt; <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &gt;&gt; &amp;&#160;</td>
+ <td class="paramname"><em>outputs</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>splitAxis</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_splitter_workload_8cpp_source.xhtml#l00032">32</a> of file <a class="el" href="_neon_splitter_workload_8cpp_source.xhtml">NeonSplitterWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01330">NeonLayerSupport::IsSplitterSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;{</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordtype">size_t</span> numOutputs = outputs.size();</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; std::vector&lt;arm_compute::TensorInfo&gt; aclOutputs;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; aclOutputs.reserve(numOutputs);</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; std::vector&lt;arm_compute::ITensorInfo*&gt; aclOutputPtr;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; aclOutputPtr.reserve(numOutputs);</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0u; i &lt; outputs.size(); ++i)</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; {</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; aclOutputs.emplace_back(BuildArmComputeTensorInfo(outputs[i]));</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; aclOutputPtr.emplace_back(&amp;aclOutputs.back());</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; }</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> aclAxis = CalcAclAxis(input.GetNumDimensions(), splitAxis);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordflow">return</span> arm_compute::NESplit::validate(&amp;aclInputInfo, aclOutputPtr, aclAxis);</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a65c83c74bdbd66cdd547d331998952eb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a65c83c74bdbd66cdd547d331998952eb">&#9670;&nbsp;</a></span>NeonStackWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonStackWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const std::vector&lt; const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> *&gt; &amp;&#160;</td>
+ <td class="paramname"><em>inputs</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_stack_descriptor.xhtml">StackDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_stack_workload_8cpp_source.xhtml#l00027">27</a> of file <a class="el" href="_neon_stack_workload_8cpp_source.xhtml">NeonStackWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01363">NeonLayerSupport::IsStackSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;{</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; std::vector&lt;arm_compute::TensorInfo&gt; aclInputs;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> TensorInfo* input : inputs)</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; {</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(*input, <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a>);</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; aclInputs.emplace_back(aclInputInfo);</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; }</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; std::vector&lt;arm_compute::ITensorInfo*&gt; aclInputPtrs;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">for</span> (arm_compute::ITensorInfo&amp; input : aclInputs)</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; {</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; aclInputPtrs.emplace_back(&amp;input);</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; }</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordtype">int</span> aclAxis = CalcAxis(descriptor.m_Axis, descriptor.m_InputShape.GetNumDimensions());</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">return</span> arm_compute::NEStackLayer::validate(aclInputPtrs, aclAxis, &amp;aclOutputInfo);</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ac71d08bf1257807c112b4d019802acc3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac71d08bf1257807c112b4d019802acc3">&#9670;&nbsp;</a></span>NeonStridedSliceWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonStridedSliceWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_strided_slice_descriptor.xhtml">StridedSliceDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_strided_slice_workload_8cpp_source.xhtml#l00019">19</a> of file <a class="el" href="_neon_strided_slice_workload_8cpp_source.xhtml">NeonStridedSliceWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01375">NeonLayerSupport::IsStridedSliceSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;{</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <a class="code" href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> starts;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <a class="code" href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> ends;</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <a class="code" href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> strides;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; std::tie(starts, ends, strides) = <a class="code" href="namespacearmnn.xhtml#a01d1e745f360ccd0b655214645bcef32">SetNeonStridedSliceData</a>(descriptor.m_Begin,</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; descriptor.m_End,</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; descriptor.m_Stride);</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keyword">auto</span> numDimensions = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">int</span>&gt;(input.GetNumDimensions());</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; int32_t begin_mask = <a class="code" href="namespacearmnn.xhtml#ad69ffa576a596b9eb20ab6a41420c541">ConvertMaskToACLFormat</a>(descriptor.m_BeginMask, numDimensions);</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; int32_t end_mask = <a class="code" href="namespacearmnn.xhtml#ad69ffa576a596b9eb20ab6a41420c541">ConvertMaskToACLFormat</a>(descriptor.m_EndMask, numDimensions);</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; int32_t shrink_axis_mask = <a class="code" href="namespacearmnn.xhtml#ad69ffa576a596b9eb20ab6a41420c541">ConvertMaskToACLFormat</a>(descriptor.m_ShrinkAxisMask, numDimensions);</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">return</span> arm_compute::NEStridedSlice::validate(&amp;aclInput,</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; &amp;aclOutput,</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; starts,</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; ends,</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; strides,</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; begin_mask,</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; end_mask,</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; shrink_axis_mask);</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ac6e86c1def7f674d3c4cb7f577874aa6"><div class="ttname"><a href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">armnn::Coordinates</a></div><div class="ttdeci">std::array&lt; unsigned int, MaxNumOfTensorDimensions &gt; Coordinates</div><div class="ttdef"><b>Definition:</b> <a href="_internal_types_8hpp_source.xhtml#l00015">InternalTypes.hpp:15</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a01d1e745f360ccd0b655214645bcef32"><div class="ttname"><a href="namespacearmnn.xhtml#a01d1e745f360ccd0b655214645bcef32">armnn::SetNeonStridedSliceData</a></div><div class="ttdeci">auto SetNeonStridedSliceData(const std::vector&lt; int &gt; &amp;m_begin, const std::vector&lt; int &gt; &amp;m_end, const std::vector&lt; int &gt; &amp;m_stride)</div><div class="ttdef"><b>Definition:</b> <a href="_neon_workload_utils_8hpp_source.xhtml#l00091">NeonWorkloadUtils.hpp:91</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad69ffa576a596b9eb20ab6a41420c541"><div class="ttname"><a href="namespacearmnn.xhtml#ad69ffa576a596b9eb20ab6a41420c541">armnn::ConvertMaskToACLFormat</a></div><div class="ttdeci">int32_t ConvertMaskToACLFormat(int32_t mask, int32_t numDim)</div><div class="ttdef"><b>Definition:</b> <a href="_workload_utils_8cpp_source.xhtml#l00283">WorkloadUtils.cpp:283</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a375ca3cff9f1b005d1412dc5f3cf5b6e"><div class="ttname"><a href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a></div><div class="ttdeci">std::enable_if_t&lt; std::is_unsigned&lt; Source &gt;::value &amp;&amp;std::is_unsigned&lt; Dest &gt;::value, Dest &gt; numeric_cast(Source source)</div><div class="ttdef"><b>Definition:</b> <a href="_numeric_cast_8hpp_source.xhtml#l00035">NumericCast.hpp:35</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="abc968e1323027f9e42cbc7642800d5ce"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abc968e1323027f9e42cbc7642800d5ce">&#9670;&nbsp;</a></span>NeonSubtractionWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonSubtractionWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input0</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> *&#160;</td>
+ <td class="paramname"><em>activationDescriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_subtraction_workload_8cpp_source.xhtml#l00022">22</a> of file <a class="el" href="_neon_subtraction_workload_8cpp_source.xhtml">NeonSubtractionWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01387">NeonLayerSupport::IsSubtractionSupported()</a>, and <a class="el" href="_neon_backend_8cpp_source.xhtml#l00142">NeonBackend::OptimizeSubgraphView()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;{</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput0 = armcomputetensorutils::BuildArmComputeTensorInfo(input0);</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInput1 = armcomputetensorutils::BuildArmComputeTensorInfo(input1);</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationInfo = <a class="code" href="namespacearmnn.xhtml#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; activationDescriptor);</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordflow">return</span> arm_compute::NEArithmeticSubtraction::validate(&amp;aclInput0,</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; &amp;aclInput1,</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; &amp;aclOutput,</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; arm_compute::ConvertPolicy::SATURATE,</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; activationInfo);</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ad701d0d29baa4266ab4d33b090aa661c"><div class="ttname"><a href="namespacearmnn.xhtml#ad701d0d29baa4266ab4d33b090aa661c">armnn::ConvertActivationDescriptorToAclActivationLayerInfo</a></div><div class="ttdeci">arm_compute::ActivationLayerInfo ConvertActivationDescriptorToAclActivationLayerInfo(const ActivationDescriptor &amp;actDesc)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.xhtml#l00085">ArmComputeUtils.hpp:85</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="aad5d4888304a57fb22c4608dc5d94dc1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aad5d4888304a57fb22c4608dc5d94dc1">&#9670;&nbsp;</a></span>NeonTensorHandleFactoryId()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr const char* armnn::NeonTensorHandleFactoryId </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_tensor_handle_factory_8hpp_source.xhtml#l00014">14</a> of file <a class="el" href="_neon_tensor_handle_factory_8hpp_source.xhtml">NeonTensorHandleFactory.hpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_tensor_handle_factory_8cpp_source.xhtml#l00089">NeonTensorHandleFactory::GetIdStatic()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;{ <span class="keywordflow">return</span> <span class="stringliteral">&quot;Arm/Neon/TensorHandleFactory&quot;</span>; }</div></div><!-- fragment -->
+</div>
+</div>
+<a id="abc73c3c9a09f91c22c64d7c166e9be4d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abc73c3c9a09f91c22c64d7c166e9be4d">&#9670;&nbsp;</a></span>NeonTransposeConvolution2dWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonTransposeConvolution2dWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_transpose_convolution2d_descriptor.xhtml">TransposeConvolution2dDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>weights</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &gt; &amp;&#160;</td>
+ <td class="paramname"><em>biases</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_transpose_convolution2d_workload_8cpp_source.xhtml#l00025">25</a> of file <a class="el" href="_neon_transpose_convolution2d_workload_8cpp_source.xhtml">NeonTransposeConvolution2dWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01400">NeonLayerSupport::IsTransposeConvolution2dSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;{</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclWeightsInfo = BuildArmComputeTensorInfo(weights, descriptor.m_DataLayout);</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; arm_compute::TensorInfo aclBiasesInfo;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; arm_compute::TensorInfo *optionalAclBiasesInfo = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">if</span> (descriptor.m_BiasEnabled)</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; {</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(biases.has_value());</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; aclBiasesInfo = BuildArmComputeTensorInfo(biases.value(), descriptor.m_DataLayout);</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; optionalAclBiasesInfo = &amp;aclBiasesInfo;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; }</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; arm_compute::PadStrideInfo layerInfo = BuildArmComputePadStrideInfo(descriptor);</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">return</span> arm_compute::NEDeconvolutionLayer::validate(&amp;aclInputInfo,</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; &amp;aclWeightsInfo,</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; optionalAclBiasesInfo,</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; &amp;aclOutputInfo,</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; layerInfo);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;}</div><div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a2b8555526752015115fa7fa00d88542b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2b8555526752015115fa7fa00d88542b">&#9670;&nbsp;</a></span>NeonTransposeWorkloadValidate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">arm_compute::Status NeonTransposeWorkloadValidate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_transpose_descriptor.xhtml">TransposeDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_transpose_workload_8cpp_source.xhtml#l00015">15</a> of file <a class="el" href="_neon_transpose_workload_8cpp_source.xhtml">NeonTransposeWorkload.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01416">NeonLayerSupport::IsTransposeSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;{</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_permutation_vector.xhtml">armnn::PermutationVector</a>&amp; mappings = descriptor.m_DimMappings;</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordflow">return</span> arm_compute::NEPermute::validate(&amp;aclInputInfo, &amp;aclOutputInfo,</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; armcomputetensorutils::BuildArmComputeTransposeVector(mappings));</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_permutation_vector_xhtml"><div class="ttname"><a href="classarmnn_1_1_permutation_vector.xhtml">armnn::PermutationVector</a></div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00282">Types.hpp:282</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a869f740e9c2fcb8642350c6e3d0b3742"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a869f740e9c2fcb8642350c6e3d0b3742">&#9670;&nbsp;</a></span>NextIndex()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::NextIndex </td>
+ <td>(</td>
+ <td class="paramtype">const unsigned int&#160;</td>
+ <td class="paramname"><em>numDims</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a> &amp;&#160;</td>
+ <td class="paramname"><em>dims</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::vector&lt; unsigned int &gt; &amp;&#160;</td>
+ <td class="paramname"><em>current</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="backends_2reference_2workloads_2_reduce_8cpp_source.xhtml#l00019">19</a> of file <a class="el" href="backends_2reference_2workloads_2_reduce_8cpp_source.xhtml">Reduce.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="backends_2reference_2workloads_2_reduce_8cpp_source.xhtml#l00070">Reduce()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;{</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> carry = 1;</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx = numDims; idx-- &gt; 0; )</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; {</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> current_val = current[idx] + carry;</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keywordflow">if</span> (dims[idx] == current_val)</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; {</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; current[idx] = 0;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; }</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; {</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; current[idx] = current_val;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; carry = 0;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; }</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; }</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">return</span> (carry == 0);</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="ac8c641d4a69c9a85c487cfbc7ea4d73c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac8c641d4a69c9a85c487cfbc7ea4d73c">&#9670;&nbsp;</a></span>NonMaxSuppression()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::vector&lt; unsigned int &gt; NonMaxSuppression </td>
+ <td>(</td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>numBoxes</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::vector&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>boxCorners</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::vector&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>scores</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float&#160;</td>
+ <td class="paramname"><em>nmsScoreThreshold</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>maxDetection</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float&#160;</td>
+ <td class="paramname"><em>nmsIouThreshold</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="backends_2reference_2workloads_2_detection_post_process_8cpp_source.xhtml#l00049">49</a> of file <a class="el" href="backends_2reference_2workloads_2_detection_post_process_8cpp_source.xhtml">DetectionPostProcess.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="backends_2reference_2workloads_2_detection_post_process_8cpp_source.xhtml#l00017">GenerateRangeK()</a>, <a class="el" href="backends_2reference_2workloads_2_detection_post_process_8cpp_source.xhtml#l00030">IntersectionOverUnion()</a>, <a class="el" href="_numeric_cast_8hpp_source.xhtml#l00035">numeric_cast()</a>, and <a class="el" href="backends_2reference_2workloads_2_detection_post_process_8cpp_source.xhtml#l00024">TopKSort()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="backends_2reference_2workloads_2_detection_post_process_8cpp_source.xhtml#l00140">DetectionPostProcess()</a>, and <a class="el" href="_ref_detection_post_process_tests_8cpp_source.xhtml#l00013">TEST_SUITE()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;{</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="comment">// Select boxes that have scores above a given threshold.</span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; std::vector&lt;float&gt; scoresAboveThreshold;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; std::vector&lt;unsigned int&gt; indicesAboveThreshold;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; numBoxes; ++i)</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; {</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordflow">if</span> (scores[i] &gt;= nmsScoreThreshold)</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; {</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; scoresAboveThreshold.push_back(scores[i]);</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; indicesAboveThreshold.push_back(i);</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; }</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; }</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="comment">// Sort the indices based on scores.</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numAboveThreshold = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(scoresAboveThreshold.size());</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; std::vector&lt;unsigned int&gt; sortedIndices = <a class="code" href="namespacearmnn.xhtml#ae8ed5c640761fb6744aec0ee16388417">GenerateRangeK</a>(numAboveThreshold);</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <a class="code" href="namespacearmnn.xhtml#a2748f45e58b1c612d473043f711d1434">TopKSort</a>(numAboveThreshold, sortedIndices.data(), scoresAboveThreshold.data(), numAboveThreshold);</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="comment">// Number of output cannot be more than max detections specified in the option.</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numOutput = std::min(maxDetection, numAboveThreshold);</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; std::vector&lt;unsigned int&gt; outputIndices;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; std::vector&lt;bool&gt; visited(numAboveThreshold, <span class="keyword">false</span>);</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="comment">// Prune out the boxes with high intersection over union by keeping the box with higher score.</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; numAboveThreshold; ++i)</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; {</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordflow">if</span> (outputIndices.size() &gt;= numOutput)</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; {</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; }</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordflow">if</span> (!visited[sortedIndices[i]])</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; {</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; outputIndices.push_back(indicesAboveThreshold[sortedIndices[i]]);</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j = i + 1; j &lt; numAboveThreshold; ++j)</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; {</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iIndex = indicesAboveThreshold[sortedIndices[i]] * 4;</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> jIndex = indicesAboveThreshold[sortedIndices[j]] * 4;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.xhtml#abf6aad7bc221f8ad22b4d99cd020373b">IntersectionOverUnion</a>(&amp;boxCorners[iIndex], &amp;boxCorners[jIndex]) &gt; nmsIouThreshold)</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; {</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; visited[sortedIndices[j]] = <span class="keyword">true</span>;</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; }</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; }</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; }</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; }</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordflow">return</span> outputIndices;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_abf6aad7bc221f8ad22b4d99cd020373b"><div class="ttname"><a href="namespacearmnn.xhtml#abf6aad7bc221f8ad22b4d99cd020373b">armnn::IntersectionOverUnion</a></div><div class="ttdeci">float IntersectionOverUnion(const float *boxI, const float *boxJ)</div><div class="ttdef"><b>Definition:</b> <a href="backends_2reference_2workloads_2_detection_post_process_8cpp_source.xhtml#l00030">DetectionPostProcess.cpp:30</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ae8ed5c640761fb6744aec0ee16388417"><div class="ttname"><a href="namespacearmnn.xhtml#ae8ed5c640761fb6744aec0ee16388417">armnn::GenerateRangeK</a></div><div class="ttdeci">std::vector&lt; unsigned int &gt; GenerateRangeK(unsigned int k)</div><div class="ttdef"><b>Definition:</b> <a href="backends_2reference_2workloads_2_detection_post_process_8cpp_source.xhtml#l00017">DetectionPostProcess.cpp:17</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a2748f45e58b1c612d473043f711d1434"><div class="ttname"><a href="namespacearmnn.xhtml#a2748f45e58b1c612d473043f711d1434">armnn::TopKSort</a></div><div class="ttdeci">void TopKSort(unsigned int k, unsigned int *indices, const float *values, unsigned int numElement)</div><div class="ttdef"><b>Definition:</b> <a href="backends_2reference_2workloads_2_detection_post_process_8cpp_source.xhtml#l00024">DetectionPostProcess.cpp:24</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a375ca3cff9f1b005d1412dc5f3cf5b6e"><div class="ttname"><a href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a></div><div class="ttdeci">std::enable_if_t&lt; std::is_unsigned&lt; Source &gt;::value &amp;&amp;std::is_unsigned&lt; Dest &gt;::value, Dest &gt; numeric_cast(Source source)</div><div class="ttdef"><b>Definition:</b> <a href="_numeric_cast_8hpp_source.xhtml#l00035">NumericCast.hpp:35</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a375ca3cff9f1b005d1412dc5f3cf5b6e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a375ca3cff9f1b005d1412dc5f3cf5b6e">&#9670;&nbsp;</a></span>numeric_cast() <span class="overload">[1/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::enable_if_t&lt; std::is_unsigned&lt;Source&gt;::value &amp;&amp; std::is_unsigned&lt;Dest&gt;::value, Dest&gt; armnn::numeric_cast </td>
+ <td>(</td>
+ <td class="paramtype">Source&#160;</td>
+ <td class="paramname"><em>source</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_numeric_cast_8hpp_source.xhtml#l00035">35</a> of file <a class="el" href="_numeric_cast_8hpp_source.xhtml">NumericCast.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_numeric_cast_8hpp_source.xhtml#l00025">ARMNN_NUMERIC_CAST_CHECK</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="backends_2reference_2workloads_2_detection_post_process_8cpp_source.xhtml#l00102">AllocateOutputData()</a>, <a class="el" href="backends_2reference_2workloads_2_arg_min_max_8cpp_source.xhtml#l00016">ArgMinMax()</a>, <a class="el" href="_execute_network_8cpp_source.xhtml#l00047">CheckInferenceTimeThreshold()</a>, <a class="el" href="_cl_arg_min_max_workload_8cpp_source.xhtml#l00055">ClArgMinMaxWorkload::ClArgMinMaxWorkload()</a>, <a class="el" href="_cl_space_to_batch_nd_workload_8cpp_source.xhtml#l00047">ClSpaceToBatchNdWorkload::ClSpaceToBatchNdWorkload()</a>, <a class="el" href="_cl_strided_slice_workload_8cpp_source.xhtml#l00055">ClStridedSliceWorkload::ClStridedSliceWorkload()</a>, <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00328">ComputeReductionTensorShape()</a>, <a class="el" href="_tf_lite_parser_8cpp_source.xhtml#l03309">armnnTfLiteParser::ComputeWrappedIndex()</a>, <a class="el" href="_layer_8cpp_source.xhtml#l00086">OutputSlot::Connect()</a>, <a class="el" href="_inference_model_8hpp_source.xhtml#l00146">CreateNetworkImpl&lt; IParser &gt;::Create()</a>, <a class="el" href="_send_counter_packet_8cpp_source.xhtml#l00173">SendCounterPacket::CreateCategoryRecord()</a>, <a class="el" href="_send_counter_packet_8cpp_source.xhtml#l00396">SendCounterPacket::CreateEventRecord()</a>, <a class="el" href="_onnx_parser_8cpp_source.xhtml#l00797">OnnxParserImpl::CreateNetworkFromString()</a>, <a class="el" href="_conv2d_test_impl_8cpp_source.xhtml#l01645">DepthwiseConvolution2dAsymmetricTestImpl()</a>, <a class="el" href="_conv2d_test_impl_8cpp_source.xhtml#l02133">DepthwiseConvolution2dTestImpl()</a>, <a class="el" href="backends_2reference_2workloads_2_detection_post_process_8cpp_source.xhtml#l00140">DetectionPostProcess()</a>, <a class="el" href="_ref_l2_normalization_workload_8cpp_source.xhtml#l00032">RefL2NormalizationWorkload::ExecuteAsync()</a>, <a class="el" href="_tensor_utils_8cpp_source.xhtml#l00106">armnnUtils::ExpandDims()</a>, <a class="el" href="_ref_fake_quantization_float32_workload_8cpp_source.xhtml#l00017">FakeQuantization()</a>, <a class="el" href="backends_2reference_2workloads_2_gather_8cpp_source.xhtml#l00017">Gather()</a>, <a class="el" href="src_2profiling_2_counter_directory_8hpp_source.xhtml#l00051">CounterDirectory::GetCategoryCount()</a>, <a class="el" href="_profiling_mocks_8hpp_source.xhtml#l00574">MockCounterDirectory::GetCategoryCount()</a>, <a class="el" href="src_2profiling_2_counter_directory_8hpp_source.xhtml#l00054">CounterDirectory::GetCounterCount()</a>, <a class="el" href="_profiling_mocks_8hpp_source.xhtml#l00577">MockCounterDirectory::GetCounterCount()</a>, <a class="el" href="src_2profiling_2_counter_directory_8hpp_source.xhtml#l00053">CounterDirectory::GetCounterSetCount()</a>, <a class="el" href="_profiling_mocks_8hpp_source.xhtml#l00576">MockCounterDirectory::GetCounterSetCount()</a>, <a class="el" href="src_2profiling_2_counter_directory_8hpp_source.xhtml#l00052">CounterDirectory::GetDeviceCount()</a>, <a class="el" href="_profiling_mocks_8hpp_source.xhtml#l00575">MockCounterDirectory::GetDeviceCount()</a>, <a class="el" href="_deserializer_8cpp_source.xhtml#l00899">IDeserializer::DeserializerImpl::GetNetworkOutputBindingInfo()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00143">OutputSlot::GetNumConnections()</a>, <a class="el" href="_subgraph_view_8cpp_source.xhtml#l00285">SubgraphView::GetNumInputSlots()</a>, <a class="el" href="_subgraph_view_8cpp_source.xhtml#l00290">SubgraphView::GetNumOutputSlots()</a>, <a class="el" href="_descriptors_8cpp_source.xhtml#l00366">StridedSliceDescriptor::GetStartForAxis()</a>, <a class="el" href="_descriptors_8cpp_source.xhtml#l00393">StridedSliceDescriptor::GetStopForAxis()</a>, <a class="el" href="_profiling_test_utils_8cpp_source.xhtml#l00023">GetStreamMetaDataPacketSize()</a>, <a class="el" href="_cifar10_database_8cpp_source.xhtml#l00020">Cifar10Database::GetTestCaseData()</a>, <a class="el" href="_yolo_database_8cpp_source.xhtml#l00073">YoloDatabase::GetTestCaseData()</a>, <a class="el" href="_tensor_utils_8cpp_source.xhtml#l00148">armnnUtils::GetUnsignedAxis()</a>, <a class="el" href="_request_counters_packet_handler_8cpp_source.xhtml#l00028">RequestCountersPacketHandler::HandlePacket()</a>, <a class="el" href="_inference_test_image_8cpp_source.xhtml#l00127">InferenceTestImage::InferenceTestImage()</a>, <a class="el" href="_prelu_layer_8cpp_source.xhtml#l00038">PreluLayer::InferOutputShapes()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01906">RefLayerSupport::IsMeanSupported()</a>, <a class="el" href="_tf_lite_parser_8cpp_source.xhtml#l00768">TfLiteParserImpl::LoadModel()</a>, <a class="el" href="_log_softmax_8cpp_source.xhtml#l00029">LogSoftmax()</a>, <a class="el" href="_tf_lite_benchmark-_armnn_8cpp_source.xhtml#l00107">main()</a>, <a class="el" href="_loaded_network_8cpp_source.xhtml#l00082">LoadedNetwork::MakeLoadedNetwork()</a>, <a class="el" href="_neon_arg_min_max_workload_8cpp_source.xhtml#l00055">NeonArgMinMaxWorkload::NeonArgMinMaxWorkload()</a>, <a class="el" href="_neon_space_to_batch_nd_workload_8cpp_source.xhtml#l00044">NeonSpaceToBatchNdWorkload::NeonSpaceToBatchNdWorkload()</a>, <a class="el" href="_neon_strided_slice_workload_8cpp_source.xhtml#l00049">NeonStridedSliceWorkload::NeonStridedSliceWorkload()</a>, <a class="el" href="backends_2reference_2workloads_2_detection_post_process_8cpp_source.xhtml#l00049">NonMaxSuppression()</a>, <a class="el" href="_inference_test_8inl_source.xhtml#l00259">ClassifierTestCaseProvider&lt; TDatabase, InferenceModel &gt;::OnInferenceTestFinished()</a>, <a class="el" href="_deserializer_8cpp_source.xhtml#l02391">IDeserializer::DeserializerImpl::OutputShapeOfReshape()</a>, <a class="el" href="_tf_lite_parser_8cpp_source.xhtml#l02575">TfLiteParserImpl::OutputShapeOfReshape()</a>, <a class="el" href="_network_execution_utils_8cpp_source.xhtml#l00101">ParseArray()</a>, <a class="el" href="_network_execution_utils_8cpp_source.xhtml#l00043">ParseDataArray&lt; armnn::DataType::QAsymmS8 &gt;()</a>, <a class="el" href="_network_execution_utils_8cpp_source.xhtml#l00050">ParseDataArray&lt; armnn::DataType::QAsymmU8 &gt;()</a>, <a class="el" href="_network_execution_utils_8cpp_source.xhtml#l00058">ParseDataArray&lt; armnn::DataType::QSymmS8 &gt;()</a>, <a class="el" href="_pooling2d_8cpp_source.xhtml#l00142">Pooling2d()</a>, <a class="el" href="_pooling3d_8cpp_source.xhtml#l00172">Pooling3d()</a>, <a class="el" href="_inference_test_8inl_source.xhtml#l00124">ClassifierTestCase&lt; TTestCaseDatabase, TModel &gt;::ProcessResult()</a>, <a class="el" href="backends_2reference_2workloads_2_reduce_8cpp_source.xhtml#l00070">Reduce()</a>, <a class="el" href="_inference_model_8hpp_source.xhtml#l00588">InferenceModel&lt; IParser, TDataType &gt;::Run()</a>, <a class="el" href="_inference_model_8hpp_source.xhtml#l00636">InferenceModel&lt; IParser, TDataType &gt;::RunAsync()</a>, <a class="el" href="_cl_context_serializer_8cpp_source.xhtml#l00049">ClContextSerializer::SaveSerializedToStream()</a>, <a class="el" href="_serializer_8cpp_source.xhtml#l02411">ISerializer::SerializerImpl::SaveSerializedToStream()</a>, <a class="el" href="_send_counter_packet_8cpp_source.xhtml#l00828">SendCounterPacket::SendPeriodicCounterCapturePacket()</a>, <a class="el" href="_send_counter_packet_8cpp_source.xhtml#l00878">SendCounterPacket::SendPeriodicCounterSelectionPacket()</a>, <a class="el" href="_send_counter_packet_8cpp_source.xhtml#l00027">SendCounterPacket::SendStreamMetaDataPacket()</a>, <a class="el" href="_conv2d_test_impl_8cpp_source.xhtml#l00368">SimpleConvolution2dNhwcTestImpl()</a>, <a class="el" href="_conv2d_test_impl_8cpp_source.xhtml#l00194">SimpleConvolution2dTestImpl()</a>, <a class="el" href="_conv3d_test_impl_8cpp_source.xhtml#l00150">SimpleConvolution3dTestImpl()</a>, <a class="el" href="_inference_test_image_8cpp_source.xhtml#l00183">InferenceTestImage::StbResize()</a>, <a class="el" href="backends_2reference_2workloads_2_strided_slice_8cpp_source.xhtml#l00090">StridedSlice()</a>, <a class="el" href="_graph_8cpp_source.xhtml#l00444">Graph::SubstituteSubgraph()</a>, <a class="el" href="_graph_tests_8cpp_source.xhtml#l00022">TEST_SUITE()</a>, <a class="el" href="_workload_data_8cpp_source.xhtml#l02429">MeanQueueDescriptor::Validate()</a>, <a class="el" href="_reduce_layer_8cpp_source.xhtml#l00043">ReduceLayer::ValidateTensorShapesFromInputs()</a>, <a class="el" href="_mean_layer_8cpp_source.xhtml#l00044">MeanLayer::ValidateTensorShapesFromInputs()</a>, <a class="el" href="_profiling_test_utils_8cpp_source.xhtml#l00102">VerifyTimelineLabelBinaryPacketData()</a>, <a class="el" href="_working_mem_handle_8cpp_source.xhtml#l00018">WorkingMemHandle::WorkingMemHandle()</a>, <a class="el" href="_profiling_utils_8cpp_source.xhtml#l00313">armnn::profiling::WriteTimelineLabelBinaryPacket()</a>, and <a class="el" href="_profiling_utils_8cpp_source.xhtml#l00497">armnn::profiling::WriteTimelineMessageDirectoryPackage()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;{</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="preprocessor">#if ENABLE_NUMERIC_CAST_CHECKS</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">if</span> (source &gt; std::numeric_limits&lt;Dest&gt;::max())</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; {</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <a class="code" href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;numeric_cast failed casting unsigned type to &quot;</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="stringliteral">&quot;narrower unsigned type. Overflow detected.&quot;</span>);</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; }</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="preprocessor">#endif // ENABLE_NUMERIC_CAST_CHECKS</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>Dest<span class="keyword">&gt;</span>(source);</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;}</div><div class="ttc" id="_numeric_cast_8hpp_xhtml_a242e8e7e20f157c7301f4babcc120750"><div class="ttname"><a href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a></div><div class="ttdeci">#define ARMNN_NUMERIC_CAST_CHECK(cond, msg)</div><div class="ttdef"><b>Definition:</b> <a href="_numeric_cast_8hpp_source.xhtml#l00025">NumericCast.hpp:25</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a40a708e0ade241da31597eefab4ad8a9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a40a708e0ade241da31597eefab4ad8a9">&#9670;&nbsp;</a></span>numeric_cast() <span class="overload">[2/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::enable_if_t&lt; std::is_signed&lt;Source&gt;::value &amp;&amp; std::is_integral&lt;Source&gt;::value &amp;&amp; std::is_signed&lt;Dest&gt;::value &amp;&amp; std::is_integral&lt;Dest&gt;::value, Dest&gt; armnn::numeric_cast </td>
+ <td>(</td>
+ <td class="paramtype">Source&#160;</td>
+ <td class="paramname"><em>source</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_numeric_cast_8hpp_source.xhtml#l00058">58</a> of file <a class="el" href="_numeric_cast_8hpp_source.xhtml">NumericCast.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_numeric_cast_8hpp_source.xhtml#l00025">ARMNN_NUMERIC_CAST_CHECK</a>.</p>
+<div class="fragment"><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;{</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="preprocessor">#if ENABLE_NUMERIC_CAST_CHECKS</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordflow">if</span> (source &gt; std::numeric_limits&lt;Dest&gt;::max())</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; {</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <a class="code" href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;numeric_cast failed casting signed integral type to narrower signed type. &quot;</span></div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="stringliteral">&quot;Overflow detected.&quot;</span>);</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; }</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">if</span> (source &lt; std::numeric_limits&lt;Dest&gt;::lowest())</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; {</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <a class="code" href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;numeric_cast failed casting signed integral type to narrower signed type. &quot;</span></div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="stringliteral">&quot;Underflow detected.&quot;</span>);</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; }</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="preprocessor">#endif // ENABLE_NUMERIC_CAST_CHECKS</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>Dest<span class="keyword">&gt;</span>(source);</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;}</div><div class="ttc" id="_numeric_cast_8hpp_xhtml_a242e8e7e20f157c7301f4babcc120750"><div class="ttname"><a href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a></div><div class="ttdeci">#define ARMNN_NUMERIC_CAST_CHECK(cond, msg)</div><div class="ttdef"><b>Definition:</b> <a href="_numeric_cast_8hpp_source.xhtml#l00025">NumericCast.hpp:25</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="aec2a3221ba307e3f9f8d6b8cc69774fa"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aec2a3221ba307e3f9f8d6b8cc69774fa">&#9670;&nbsp;</a></span>numeric_cast() <span class="overload">[3/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::enable_if_t&lt; std::is_floating_point&lt;Source&gt;::value &amp;&amp; std::is_floating_point&lt;Dest&gt;::value, Dest&gt; armnn::numeric_cast </td>
+ <td>(</td>
+ <td class="paramtype">Source&#160;</td>
+ <td class="paramname"><em>source</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_numeric_cast_8hpp_source.xhtml#l00083">83</a> of file <a class="el" href="_numeric_cast_8hpp_source.xhtml">NumericCast.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_numeric_cast_8hpp_source.xhtml#l00025">ARMNN_NUMERIC_CAST_CHECK</a>.</p>
+<div class="fragment"><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;{</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;<span class="preprocessor">#if ENABLE_NUMERIC_CAST_CHECKS</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordflow">if</span> (source &gt; std::numeric_limits&lt;Dest&gt;::max())</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; {</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <a class="code" href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;numeric_cast failed casting floating point type to narrower signed type. &quot;</span></div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="stringliteral">&quot;Overflow detected.&quot;</span>);</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; }</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordflow">if</span> (source &lt; std::numeric_limits&lt;Dest&gt;::lowest())</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; {</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <a class="code" href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;numeric_cast failed casting floating point type to narrower signed type. &quot;</span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="stringliteral">&quot;Underflow detected.&quot;</span>);</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; }</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;<span class="preprocessor">#endif // ENABLE_NUMERIC_CAST_CHECKS</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>Dest<span class="keyword">&gt;</span>(source);</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;}</div><div class="ttc" id="_numeric_cast_8hpp_xhtml_a242e8e7e20f157c7301f4babcc120750"><div class="ttname"><a href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a></div><div class="ttdeci">#define ARMNN_NUMERIC_CAST_CHECK(cond, msg)</div><div class="ttdef"><b>Definition:</b> <a href="_numeric_cast_8hpp_source.xhtml#l00025">NumericCast.hpp:25</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a320f9416a8c5eda0210f1d0ec71dbe53"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a320f9416a8c5eda0210f1d0ec71dbe53">&#9670;&nbsp;</a></span>numeric_cast() <span class="overload">[4/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::enable_if_t&lt; std::is_floating_point&lt;Source&gt;::value &amp;&amp; std::is_signed&lt;Dest&gt;::value &amp;&amp; std::is_integral&lt;Dest&gt;::value, Dest&gt; armnn::numeric_cast </td>
+ <td>(</td>
+ <td class="paramtype">Source&#160;</td>
+ <td class="paramname"><em>source</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_numeric_cast_8hpp_source.xhtml#l00109">109</a> of file <a class="el" href="_numeric_cast_8hpp_source.xhtml">NumericCast.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_numeric_cast_8hpp_source.xhtml#l00025">ARMNN_NUMERIC_CAST_CHECK</a>.</p>
+<div class="fragment"><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;{</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;<span class="preprocessor">#if ENABLE_NUMERIC_CAST_CHECKS</span></div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordflow">if</span> (source &gt; static_cast&lt;Source&gt;(std::numeric_limits&lt;Dest&gt;::max()))</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; {</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <a class="code" href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;numeric_cast failed casting floating point type to narrower signed type. &quot;</span></div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="stringliteral">&quot;Overflow detected.&quot;</span>);</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; }</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keywordflow">if</span> (source &lt; static_cast&lt;Source&gt;(std::numeric_limits&lt;Dest&gt;::lowest()))</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; {</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <a class="code" href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;numeric_cast failed casting floating point type to narrower signed type. &quot;</span></div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="stringliteral">&quot;Underflow detected.&quot;</span>);</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; }</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;<span class="preprocessor">#endif // ENABLE_NUMERIC_CAST_CHECKS</span></div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>Dest<span class="keyword">&gt;</span>(source);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;}</div><div class="ttc" id="_numeric_cast_8hpp_xhtml_a242e8e7e20f157c7301f4babcc120750"><div class="ttname"><a href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a></div><div class="ttdeci">#define ARMNN_NUMERIC_CAST_CHECK(cond, msg)</div><div class="ttdef"><b>Definition:</b> <a href="_numeric_cast_8hpp_source.xhtml#l00025">NumericCast.hpp:25</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a3afc74a78c7a7590fd1c35b0d5eb69db"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3afc74a78c7a7590fd1c35b0d5eb69db">&#9670;&nbsp;</a></span>numeric_cast() <span class="overload">[5/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::enable_if_t&lt; std::is_signed&lt;Source&gt;::value &amp;&amp; std::is_integral&lt;Source&gt;::value &amp;&amp; std::is_floating_point&lt;Dest&gt;::value, Dest&gt; armnn::numeric_cast </td>
+ <td>(</td>
+ <td class="paramtype">Source&#160;</td>
+ <td class="paramname"><em>source</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_numeric_cast_8hpp_source.xhtml#l00135">135</a> of file <a class="el" href="_numeric_cast_8hpp_source.xhtml">NumericCast.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_numeric_cast_8hpp_source.xhtml#l00025">ARMNN_NUMERIC_CAST_CHECK</a>.</p>
+<div class="fragment"><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;{</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;<span class="preprocessor">#if ENABLE_NUMERIC_CAST_CHECKS</span></div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; Dest sourceConverted = <span class="keyword">static_cast&lt;</span>Dest<span class="keyword">&gt;</span>(source);</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keywordflow">if</span> (sourceConverted &gt; std::numeric_limits&lt;Dest&gt;::max())</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; {</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <a class="code" href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;numeric_cast failed casting signed type to narrower floating point type. &quot;</span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="stringliteral">&quot;Overflow detected.&quot;</span>);</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; }</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordflow">if</span> (sourceConverted &lt; std::numeric_limits&lt;Dest&gt;::lowest())</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; {</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <a class="code" href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;numeric_cast failed casting signed type to narrower floating point type. &quot;</span></div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="stringliteral">&quot;Underflow detected.&quot;</span>);</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; }</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;<span class="preprocessor">#endif // ENABLE_NUMERIC_CAST_CHECKS</span></div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>Dest<span class="keyword">&gt;</span>(source);</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;}</div><div class="ttc" id="_numeric_cast_8hpp_xhtml_a242e8e7e20f157c7301f4babcc120750"><div class="ttname"><a href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a></div><div class="ttdeci">#define ARMNN_NUMERIC_CAST_CHECK(cond, msg)</div><div class="ttdef"><b>Definition:</b> <a href="_numeric_cast_8hpp_source.xhtml#l00025">NumericCast.hpp:25</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="aa4039ab8f10849c09d08485cf6f113de"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa4039ab8f10849c09d08485cf6f113de">&#9670;&nbsp;</a></span>numeric_cast() <span class="overload">[6/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::enable_if_t&lt; std::is_signed&lt;Dest&gt;::value &amp;&amp; std::is_integral&lt;Dest&gt;::value &amp;&amp; std::is_unsigned&lt;Source&gt;::value, Dest&gt; armnn::numeric_cast </td>
+ <td>(</td>
+ <td class="paramtype">Source&#160;</td>
+ <td class="paramname"><em>sValue</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_numeric_cast_8hpp_source.xhtml#l00165">165</a> of file <a class="el" href="_numeric_cast_8hpp_source.xhtml">NumericCast.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_numeric_cast_8hpp_source.xhtml#l00025">ARMNN_NUMERIC_CAST_CHECK</a>.</p>
+<div class="fragment"><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;{</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;<span class="preprocessor">#if ENABLE_NUMERIC_CAST_CHECKS</span></div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordflow">if</span> (sValue &gt; <span class="keyword">static_cast&lt;</span> typename std::make_unsigned&lt;Dest&gt;::type <span class="keyword">&gt;</span>(std::numeric_limits&lt;Dest&gt;::max()))</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; {</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <a class="code" href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;numeric_cast failed casting unsigned type to signed type. &quot;</span></div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="stringliteral">&quot;Overflow detected.&quot;</span>);</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; }</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;<span class="preprocessor">#endif // ENABLE_NUMERIC_CAST_CHECKS</span></div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>Dest<span class="keyword">&gt;</span>(sValue);</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;}</div><div class="ttc" id="_numeric_cast_8hpp_xhtml_a242e8e7e20f157c7301f4babcc120750"><div class="ttname"><a href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a></div><div class="ttdeci">#define ARMNN_NUMERIC_CAST_CHECK(cond, msg)</div><div class="ttdef"><b>Definition:</b> <a href="_numeric_cast_8hpp_source.xhtml#l00025">NumericCast.hpp:25</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="aab0d3e691c3a26cc5c4aa5c6f12eaea0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aab0d3e691c3a26cc5c4aa5c6f12eaea0">&#9670;&nbsp;</a></span>numeric_cast() <span class="overload">[7/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::enable_if_t&lt; std::is_floating_point&lt;Dest&gt;::value &amp;&amp; std::is_unsigned&lt;Source&gt;::value, Dest&gt; armnn::numeric_cast </td>
+ <td>(</td>
+ <td class="paramtype">Source&#160;</td>
+ <td class="paramname"><em>sValue</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_numeric_cast_8hpp_source.xhtml#l00184">184</a> of file <a class="el" href="_numeric_cast_8hpp_source.xhtml">NumericCast.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_numeric_cast_8hpp_source.xhtml#l00025">ARMNN_NUMERIC_CAST_CHECK</a>.</p>
+<div class="fragment"><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;{</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;<span class="preprocessor">#if ENABLE_NUMERIC_CAST_CHECKS</span></div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="keywordflow">if</span> (static_cast&lt;Dest&gt;(sValue) &gt; std::numeric_limits&lt;Dest&gt;::max())</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; {</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <a class="code" href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;numeric_cast failed casting unsigned type to floating point type. &quot;</span></div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="stringliteral">&quot;Overflow detected.&quot;</span>);</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; }</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;<span class="preprocessor">#endif // ENABLE_NUMERIC_CAST_CHECKS</span></div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160;</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>Dest<span class="keyword">&gt;</span>(sValue);</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160;}</div><div class="ttc" id="_numeric_cast_8hpp_xhtml_a242e8e7e20f157c7301f4babcc120750"><div class="ttname"><a href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a></div><div class="ttdeci">#define ARMNN_NUMERIC_CAST_CHECK(cond, msg)</div><div class="ttdef"><b>Definition:</b> <a href="_numeric_cast_8hpp_source.xhtml#l00025">NumericCast.hpp:25</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a4348c6348d681f6d0c7cc6d229435396"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4348c6348d681f6d0c7cc6d229435396">&#9670;&nbsp;</a></span>numeric_cast() <span class="overload">[8/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::enable_if_t&lt; std::is_unsigned&lt;Dest&gt;::value &amp;&amp; std::is_signed&lt;Source&gt;::value &amp;&amp; std::is_integral&lt;Source&gt;::value, Dest&gt; armnn::numeric_cast </td>
+ <td>(</td>
+ <td class="paramtype">Source&#160;</td>
+ <td class="paramname"><em>sValue</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_numeric_cast_8hpp_source.xhtml#l00206">206</a> of file <a class="el" href="_numeric_cast_8hpp_source.xhtml">NumericCast.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_numeric_cast_8hpp_source.xhtml#l00025">ARMNN_NUMERIC_CAST_CHECK</a>.</p>
+<div class="fragment"><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;{</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;<span class="preprocessor">#if ENABLE_NUMERIC_CAST_CHECKS</span></div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keywordflow">if</span> (sValue &lt; 0)</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; {</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <a class="code" href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;numeric_cast failed casting negative value to unsigned type. &quot;</span></div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="stringliteral">&quot;Underflow detected.&quot;</span>);</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; }</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">static_cast&lt;</span> typename std::make_unsigned&lt;Source&gt;::type <span class="keyword">&gt;</span>(sValue) &gt; std::numeric_limits&lt;Dest&gt;::max())</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; {</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <a class="code" href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;numeric_cast failed casting signed type to unsigned type. &quot;</span></div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="stringliteral">&quot;Overflow detected.&quot;</span>);</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; }</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160;<span class="preprocessor">#endif // ENABLE_NUMERIC_CAST_CHECKS</span></div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>Dest<span class="keyword">&gt;</span>(sValue);</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;}</div><div class="ttc" id="_numeric_cast_8hpp_xhtml_a242e8e7e20f157c7301f4babcc120750"><div class="ttname"><a href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a></div><div class="ttdeci">#define ARMNN_NUMERIC_CAST_CHECK(cond, msg)</div><div class="ttdef"><b>Definition:</b> <a href="_numeric_cast_8hpp_source.xhtml#l00025">NumericCast.hpp:25</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a1b5cfb3269fecb1dda8d0aee3c8212e6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1b5cfb3269fecb1dda8d0aee3c8212e6">&#9670;&nbsp;</a></span>numeric_cast() <span class="overload">[9/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::enable_if_t&lt; std::is_unsigned&lt;Dest&gt;::value &amp;&amp; std::is_floating_point&lt;Source&gt;::value, Dest&gt; armnn::numeric_cast </td>
+ <td>(</td>
+ <td class="paramtype">Source&#160;</td>
+ <td class="paramname"><em>sValue</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_numeric_cast_8hpp_source.xhtml#l00230">230</a> of file <a class="el" href="_numeric_cast_8hpp_source.xhtml">NumericCast.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_numeric_cast_8hpp_source.xhtml#l00025">ARMNN_NUMERIC_CAST_CHECK</a>.</p>
+<div class="fragment"><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160;{</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;<span class="preprocessor">#if ENABLE_NUMERIC_CAST_CHECKS</span></div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="keywordflow">if</span> (sValue &lt; 0)</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; {</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <a class="code" href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;numeric_cast failed casting negative value to unsigned type. &quot;</span></div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="stringliteral">&quot;Underflow detected.&quot;</span>);</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; }</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keywordflow">if</span> (sValue &gt; static_cast&lt;Source&gt;(std::numeric_limits&lt;Dest&gt;::max()))</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; {</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <a class="code" href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;numeric_cast failed casting floating point type to unsigned type. &quot;</span></div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="stringliteral">&quot;Overflow detected.&quot;</span>);</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; }</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;<span class="preprocessor">#endif // ENABLE_NUMERIC_CAST_CHECKS</span></div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>Dest<span class="keyword">&gt;</span>(sValue);</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160;}</div><div class="ttc" id="_numeric_cast_8hpp_xhtml_a242e8e7e20f157c7301f4babcc120750"><div class="ttname"><a href="_numeric_cast_8hpp.xhtml#a242e8e7e20f157c7301f4babcc120750">ARMNN_NUMERIC_CAST_CHECK</a></div><div class="ttdeci">#define ARMNN_NUMERIC_CAST_CHECK(cond, msg)</div><div class="ttdef"><b>Definition:</b> <a href="_numeric_cast_8hpp_source.xhtml#l00025">NumericCast.hpp:25</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ac70a495c61526a0500b33b23db86ca27"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac70a495c61526a0500b33b23db86ca27">&#9670;&nbsp;</a></span>Offset()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">unsigned int armnn::Offset </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> &amp;&#160;</td>
+ <td class="paramname"><em>shape</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>batch</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>height</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>width</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>channels</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_utils_1_1_data_layout_indexed.xhtml">DataLayoutIndexed</a> &amp;&#160;</td>
+ <td class="paramname"><em>dataLayout</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="backends_2reference_2workloads_2_batch_to_space_n_d_8cpp_source.xhtml#l00019">19</a> of file <a class="el" href="backends_2reference_2workloads_2_batch_to_space_n_d_8cpp_source.xhtml">BatchToSpaceNd.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00023">DataLayoutIndexed::GetChannelsIndex()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00022">DataLayoutIndexed::GetDataLayout()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00024">DataLayoutIndexed::GetHeightIndex()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00025">DataLayoutIndexed::GetWidthIndex()</a>, and <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">NHWC</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="backends_2reference_2workloads_2_batch_to_space_n_d_8cpp_source.xhtml#l00035">BatchToSpaceNd()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;{</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keywordflow">if</span> (dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a7d8b3d755b6ca8f5533657969efb06c4">GetDataLayout</a>() == DataLayout::NHWC)</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; {</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keywordflow">return</span> ((batch * shape[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a61c00316c443adc233c24e85c6c5b740">GetHeightIndex</a>()] + height) * shape[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a414e6f95548e6f7a01d5028b55ad3941">GetWidthIndex</a>()] + width) *</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; shape[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a861b2621ee46e4b63379988b360b8cd9">GetChannelsIndex</a>()] + channels;</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; }</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; {</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordflow">return</span> ((batch * shape[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a861b2621ee46e4b63379988b360b8cd9">GetChannelsIndex</a>()] + channels) *</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; shape[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a61c00316c443adc233c24e85c6c5b740">GetHeightIndex</a>()] + height) *</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; shape[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a414e6f95548e6f7a01d5028b55ad3941">GetWidthIndex</a>()] + width;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; }</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;}</div><div class="ttc" id="classarmnn_utils_1_1_data_layout_indexed_xhtml_a414e6f95548e6f7a01d5028b55ad3941"><div class="ttname"><a href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a414e6f95548e6f7a01d5028b55ad3941">armnnUtils::DataLayoutIndexed::GetWidthIndex</a></div><div class="ttdeci">unsigned int GetWidthIndex() const</div><div class="ttdef"><b>Definition:</b> <a href="_data_layout_indexed_8hpp_source.xhtml#l00025">DataLayoutIndexed.hpp:25</a></div></div>
+<div class="ttc" id="classarmnn_utils_1_1_data_layout_indexed_xhtml_a61c00316c443adc233c24e85c6c5b740"><div class="ttname"><a href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a61c00316c443adc233c24e85c6c5b740">armnnUtils::DataLayoutIndexed::GetHeightIndex</a></div><div class="ttdeci">unsigned int GetHeightIndex() const</div><div class="ttdef"><b>Definition:</b> <a href="_data_layout_indexed_8hpp_source.xhtml#l00024">DataLayoutIndexed.hpp:24</a></div></div>
+<div class="ttc" id="classarmnn_utils_1_1_data_layout_indexed_xhtml_a7d8b3d755b6ca8f5533657969efb06c4"><div class="ttname"><a href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a7d8b3d755b6ca8f5533657969efb06c4">armnnUtils::DataLayoutIndexed::GetDataLayout</a></div><div class="ttdeci">armnn::DataLayout GetDataLayout() const</div><div class="ttdef"><b>Definition:</b> <a href="_data_layout_indexed_8hpp_source.xhtml#l00022">DataLayoutIndexed.hpp:22</a></div></div>
+<div class="ttc" id="classarmnn_utils_1_1_data_layout_indexed_xhtml_a861b2621ee46e4b63379988b360b8cd9"><div class="ttname"><a href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a861b2621ee46e4b63379988b360b8cd9">armnnUtils::DataLayoutIndexed::GetChannelsIndex</a></div><div class="ttdeci">unsigned int GetChannelsIndex() const</div><div class="ttdef"><b>Definition:</b> <a href="_data_layout_indexed_8hpp_source.xhtml#l00023">DataLayoutIndexed.hpp:23</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a5b0313cb554380d6e4dfb24c31f9e605"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5b0313cb554380d6e4dfb24c31f9e605">&#9670;&nbsp;</a></span>operator<<() <span class="overload">[1/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::ostream&amp; armnn::operator&lt;&lt; </td>
+ <td>(</td>
+ <td class="paramtype">std::ostream &amp;&#160;</td>
+ <td class="paramname"><em>os</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::vector&lt; <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456ae">Compute</a> &gt; &amp;&#160;</td>
+ <td class="paramname"><em>compute</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Deprecated function that will be removed together with the Compute enum. </p>
+
+<p class="definition">Definition at line <a class="el" href="_backend_id_8hpp_source.xhtml#l00047">47</a> of file <a class="el" href="_backend_id_8hpp_source.xhtml">BackendId.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_backend_id_8hpp_source.xhtml#l00034">GetComputeDeviceAsCString()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;{</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456ae">Compute</a>&amp; comp : compute)</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; {</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; os &lt;&lt; <a class="code" href="namespacearmnn.xhtml#a6bab17bfd45c2fa4592c431bc25ad10e">GetComputeDeviceAsCString</a>(comp) &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; }</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordflow">return</span> os;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ae2f04a162585c0a5222a537efd5456ae"><div class="ttname"><a href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456ae">armnn::Compute</a></div><div class="ttdeci">Compute</div><div class="ttdoc">The Compute enum is now deprecated and it is now being replaced by BackendId. </div><div class="ttdef"><b>Definition:</b> <a href="_backend_id_8hpp_source.xhtml#l00021">BackendId.hpp:21</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a6bab17bfd45c2fa4592c431bc25ad10e"><div class="ttname"><a href="namespacearmnn.xhtml#a6bab17bfd45c2fa4592c431bc25ad10e">armnn::GetComputeDeviceAsCString</a></div><div class="ttdeci">constexpr char const * GetComputeDeviceAsCString(Compute compute)</div><div class="ttdoc">Deprecated function that will be removed together with the Compute enum. </div><div class="ttdef"><b>Definition:</b> <a href="_backend_id_8hpp_source.xhtml#l00034">BackendId.hpp:34</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a127a59fdf5e6d2fa74f87f9265de958b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a127a59fdf5e6d2fa74f87f9265de958b">&#9670;&nbsp;</a></span>operator<<() <span class="overload">[2/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::ostream&amp; armnn::operator&lt;&lt; </td>
+ <td>(</td>
+ <td class="paramtype">std::ostream &amp;&#160;</td>
+ <td class="paramname"><em>os</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::set&lt; <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456ae">Compute</a> &gt; &amp;&#160;</td>
+ <td class="paramname"><em>compute</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Deprecated function that will be removed together with the Compute enum. </p>
+
+<p class="definition">Definition at line <a class="el" href="_backend_id_8hpp_source.xhtml#l00058">58</a> of file <a class="el" href="_backend_id_8hpp_source.xhtml">BackendId.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_backend_id_8hpp_source.xhtml#l00034">GetComputeDeviceAsCString()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;{</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456ae">Compute</a>&amp; comp : compute)</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; {</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; os &lt;&lt; <a class="code" href="namespacearmnn.xhtml#a6bab17bfd45c2fa4592c431bc25ad10e">GetComputeDeviceAsCString</a>(comp) &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; }</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">return</span> os;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ae2f04a162585c0a5222a537efd5456ae"><div class="ttname"><a href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456ae">armnn::Compute</a></div><div class="ttdeci">Compute</div><div class="ttdoc">The Compute enum is now deprecated and it is now being replaced by BackendId. </div><div class="ttdef"><b>Definition:</b> <a href="_backend_id_8hpp_source.xhtml#l00021">BackendId.hpp:21</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a6bab17bfd45c2fa4592c431bc25ad10e"><div class="ttname"><a href="namespacearmnn.xhtml#a6bab17bfd45c2fa4592c431bc25ad10e">armnn::GetComputeDeviceAsCString</a></div><div class="ttdeci">constexpr char const * GetComputeDeviceAsCString(Compute compute)</div><div class="ttdoc">Deprecated function that will be removed together with the Compute enum. </div><div class="ttdef"><b>Definition:</b> <a href="_backend_id_8hpp_source.xhtml#l00034">BackendId.hpp:34</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a14de37f4c695ac066f999aa75b7cb136"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a14de37f4c695ac066f999aa75b7cb136">&#9670;&nbsp;</a></span>operator<<() <span class="overload">[3/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::ostream&amp; armnn::operator&lt;&lt; </td>
+ <td>(</td>
+ <td class="paramtype">std::ostream &amp;&#160;</td>
+ <td class="paramname"><em>os</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_backend_version.xhtml">BackendVersion</a> &amp;&#160;</td>
+ <td class="paramname"><em>backendVersion</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_i_backend_internal_8hpp_source.xhtml#l00067">67</a> of file <a class="el" href="_i_backend_internal_8hpp_source.xhtml">IBackendInternal.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_i_backend_internal_8hpp_source.xhtml#l00033">BackendVersion::m_Major</a>, and <a class="el" href="_i_backend_internal_8hpp_source.xhtml#l00034">BackendVersion::m_Minor</a>.</p>
+<div class="fragment"><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;{</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; os &lt;&lt; <span class="stringliteral">&quot;[&quot;</span> &lt;&lt; backendVersion.m_Major &lt;&lt; <span class="stringliteral">&quot;.&quot;</span> &lt;&lt; backendVersion.m_Minor &lt;&lt; <span class="stringliteral">&quot;]&quot;</span>;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordflow">return</span> os;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a345acf4e0dc087eee3f9688029ee6328"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a345acf4e0dc087eee3f9688029ee6328">&#9670;&nbsp;</a></span>operator<<() <span class="overload">[4/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::ostream&amp; armnn::operator&lt;&lt; </td>
+ <td>(</td>
+ <td class="paramtype">std::ostream &amp;&#160;</td>
+ <td class="paramname"><em>os</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456ae">Compute</a> &amp;&#160;</td>
+ <td class="paramname"><em>compute</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Deprecated function that will be removed together with the Compute enum. </p>
+
+<p class="definition">Definition at line <a class="el" href="_backend_id_8hpp_source.xhtml#l00069">69</a> of file <a class="el" href="_backend_id_8hpp_source.xhtml">BackendId.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_backend_id_8hpp_source.xhtml#l00034">GetComputeDeviceAsCString()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;{</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; os &lt;&lt; <a class="code" href="namespacearmnn.xhtml#a6bab17bfd45c2fa4592c431bc25ad10e">GetComputeDeviceAsCString</a>(compute);</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordflow">return</span> os;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a6bab17bfd45c2fa4592c431bc25ad10e"><div class="ttname"><a href="namespacearmnn.xhtml#a6bab17bfd45c2fa4592c431bc25ad10e">armnn::GetComputeDeviceAsCString</a></div><div class="ttdeci">constexpr char const * GetComputeDeviceAsCString(Compute compute)</div><div class="ttdoc">Deprecated function that will be removed together with the Compute enum. </div><div class="ttdef"><b>Definition:</b> <a href="_backend_id_8hpp_source.xhtml#l00034">BackendId.hpp:34</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="aa1166f0056ce60553e825ae3cee4d5f7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa1166f0056ce60553e825ae3cee4d5f7">&#9670;&nbsp;</a></span>operator<<() <span class="overload">[5/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::ostream&amp; armnn::operator&lt;&lt; </td>
+ <td>(</td>
+ <td class="paramtype">std::ostream &amp;&#160;</td>
+ <td class="paramname"><em>os</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_b_float16.xhtml">BFloat16</a> &amp;&#160;</td>
+ <td class="paramname"><em>b</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_b_float16_8hpp_source.xhtml#l00122">122</a> of file <a class="el" href="_b_float16_8hpp_source.xhtml">BFloat16.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_b_float16_8hpp_source.xhtml#l00086">BFloat16::ToFloat32()</a>, and <a class="el" href="_b_float16_8hpp_source.xhtml#l00095">BFloat16::Val()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;{</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; os &lt;&lt; b.ToFloat32() &lt;&lt; <span class="stringliteral">&quot;(0x&quot;</span> &lt;&lt; std::hex &lt;&lt; b.Val() &lt;&lt; <span class="stringliteral">&quot;)&quot;</span>;</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordflow">return</span> os;</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="afc46634e26857d037ee80bb5a74ef28a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afc46634e26857d037ee80bb5a74ef28a">&#9670;&nbsp;</a></span>operator<<() <span class="overload">[6/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::ostream&amp; armnn::operator&lt;&lt; </td>
+ <td>(</td>
+ <td class="paramtype">std::ostream &amp;&#160;</td>
+ <td class="paramname"><em>os</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>id</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_backend_id_8hpp_source.xhtml#l00176">176</a> of file <a class="el" href="_backend_id_8hpp_source.xhtml">BackendId.hpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160;{</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; os &lt;&lt; <span class="keywordtype">id</span>.Get();</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="keywordflow">return</span> os;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a62a9e8c87b9b9f504726746ba4a000a6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a62a9e8c87b9b9f504726746ba4a000a6">&#9670;&nbsp;</a></span>operator<<() <span class="overload">[7/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::ostream&amp; armnn::operator&lt;&lt; </td>
+ <td>(</td>
+ <td class="paramtype">std::ostream &amp;&#160;</td>
+ <td class="paramname"><em>os</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="namespacearmnn_utils.xhtml#ac7bd4ea667375c07718086368507ed44">TContainer</a>&lt; <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a>, TContainerTemplateArgs... &gt; &amp;&#160;</td>
+ <td class="paramname"><em>ids</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_backend_id_8hpp_source.xhtml#l00183">183</a> of file <a class="el" href="_backend_id_8hpp_source.xhtml">BackendId.hpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;{</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; os &lt;&lt; <span class="charliteral">&#39;[&#39;</span>;</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; <span class="keywordtype">id</span> : ids) { os &lt;&lt; <span class="keywordtype">id</span> &lt;&lt; <span class="stringliteral">&quot; &quot;</span>; }</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; os &lt;&lt; <span class="charliteral">&#39;]&#39;</span>;</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="keywordflow">return</span> os;</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="aaa5b68f3f5bb73b1d3c85d895547a372"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aaa5b68f3f5bb73b1d3c85d895547a372">&#9670;&nbsp;</a></span>operator<<() <span class="overload">[8/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::ostream&amp; armnn::operator&lt;&lt; </td>
+ <td>(</td>
+ <td class="paramtype">std::ostream &amp;&#160;</td>
+ <td class="paramname"><em>os</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">Status</a>&#160;</td>
+ <td class="paramname"><em>stat</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00297">297</a> of file <a class="el" href="_types_utils_8hpp_source.xhtml">TypesUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_types_utils_8hpp_source.xhtml#l00017">GetStatusAsCString()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160;{</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; os &lt;&lt; <a class="code" href="namespacearmnn.xhtml#a19a90c41ca2f46ab29918fef1a6ad72e">GetStatusAsCString</a>(stat);</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keywordflow">return</span> os;</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a19a90c41ca2f46ab29918fef1a6ad72e"><div class="ttname"><a href="namespacearmnn.xhtml#a19a90c41ca2f46ab29918fef1a6ad72e">armnn::GetStatusAsCString</a></div><div class="ttdeci">constexpr char const * GetStatusAsCString(Status status)</div><div class="ttdef"><b>Definition:</b> <a href="_types_utils_8hpp_source.xhtml#l00017">TypesUtils.hpp:17</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="aa6d7532e14af97577c054f96d0cf23b3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa6d7532e14af97577c054f96d0cf23b3">&#9670;&nbsp;</a></span>operator<<() <span class="overload">[9/9]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::ostream&amp; armnn::operator&lt;&lt; </td>
+ <td>(</td>
+ <td class="paramtype">std::ostream &amp;&#160;</td>
+ <td class="paramname"><em>os</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a> &amp;&#160;</td>
+ <td class="paramname"><em>shape</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00304">304</a> of file <a class="el" href="_types_utils_8hpp_source.xhtml">TypesUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a9bc35e069257a508e14ed82965a8661d">Dequantize</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00174">TensorShape::GetNumDimensions()</a>, and <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4aca39930e22f40d10155a57dba32240bb">Quantize</a>.</p>
+<div class="fragment"><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160;{</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; os &lt;&lt; <span class="stringliteral">&quot;[&quot;</span>;</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <span class="keywordflow">for</span> (uint32_t i=0; i&lt;shape.<a class="code" href="classarmnn_1_1_tensor_shape.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>(); ++i)</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; {</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keywordflow">if</span> (i!=0)</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; {</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; os &lt;&lt; <span class="stringliteral">&quot;,&quot;</span>;</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; }</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; os &lt;&lt; shape[i];</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; }</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; os &lt;&lt; <span class="stringliteral">&quot;]&quot;</span>;</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keywordflow">return</span> os;</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_tensor_shape_xhtml_a157e27d41e9f6b21f0d3c025fa47dc24"><div class="ttname"><a href="classarmnn_1_1_tensor_shape.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">armnn::TensorShape::GetNumDimensions</a></div><div class="ttdeci">unsigned int GetNumDimensions() const</div><div class="ttdoc">Function that returns the tensor rank. </div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8cpp_source.xhtml#l00174">Tensor.cpp:174</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a8022a6869bffa6233fec784a471c1680"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8022a6869bffa6233fec784a471c1680">&#9670;&nbsp;</a></span>operator>>() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::istream&amp; armnn::operator&gt;&gt; </td>
+ <td>(</td>
+ <td class="paramtype">std::istream &amp;&#160;</td>
+ <td class="paramname"><em>in</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456ae">armnn::Compute</a> &amp;&#160;</td>
+ <td class="paramname"><em>compute</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_inference_test_8hpp_source.xhtml#l00023">23</a> of file <a class="el" href="_inference_test_8hpp_source.xhtml">InferenceTest.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_types_utils_8hpp_source.xhtml#l00182">ParseComputeDevice()</a>, and <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a>.</p>
+<div class="fragment"><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;{</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; std::string token;</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; in &gt;&gt; token;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; compute = <a class="code" href="namespacearmnn.xhtml#a65645fa03bf8cddfb9d8a9f83beeb6e8">armnn::ParseComputeDevice</a>(token.c_str());</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keywordflow">if</span> (compute == <a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">armnn::Compute::Undefined</a>)</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; {</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; in.setstate(std::ios_base::failbit);</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keywordflow">throw</span> cxxopts::OptionException(fmt::format(<span class="stringliteral">&quot;Unrecognised compute device: {}&quot;</span>, token));</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; }</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordflow">return</span> in;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a65645fa03bf8cddfb9d8a9f83beeb6e8"><div class="ttname"><a href="namespacearmnn.xhtml#a65645fa03bf8cddfb9d8a9f83beeb6e8">armnn::ParseComputeDevice</a></div><div class="ttdeci">constexpr armnn::Compute ParseComputeDevice(const char *str)</div><div class="ttdoc">Deprecated function that will be removed together with the Compute enum. </div><div class="ttdef"><b>Definition:</b> <a href="_types_utils_8hpp_source.xhtml#l00182">TypesUtils.hpp:182</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360"><div class="ttname"><a href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">armnn::Compute::Undefined</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a3c51506c471a4513dcc3364514d75f39"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3c51506c471a4513dcc3364514d75f39">&#9670;&nbsp;</a></span>operator>>() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::istream&amp; armnn::operator&gt;&gt; </td>
+ <td>(</td>
+ <td class="paramtype">std::istream &amp;&#160;</td>
+ <td class="paramname"><em>in</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_backend_id.xhtml">armnn::BackendId</a> &amp;&#160;</td>
+ <td class="paramname"><em>backend</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_inference_test_8hpp_source.xhtml#l00036">36</a> of file <a class="el" href="_inference_test_8hpp_source.xhtml">InferenceTest.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_types_utils_8hpp_source.xhtml#l00182">ParseComputeDevice()</a>, and <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a>.</p>
+<div class="fragment"><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;{</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; std::string token;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; in &gt;&gt; token;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456ae">armnn::Compute</a> compute = <a class="code" href="namespacearmnn.xhtml#a65645fa03bf8cddfb9d8a9f83beeb6e8">armnn::ParseComputeDevice</a>(token.c_str());</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">if</span> (compute == <a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">armnn::Compute::Undefined</a>)</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; {</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; in.setstate(std::ios_base::failbit);</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordflow">throw</span> cxxopts::OptionException(fmt::format(<span class="stringliteral">&quot;Unrecognised compute device: {}&quot;</span>, token));</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; }</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; backend = compute;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordflow">return</span> in;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ae2f04a162585c0a5222a537efd5456ae"><div class="ttname"><a href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456ae">armnn::Compute</a></div><div class="ttdeci">Compute</div><div class="ttdoc">The Compute enum is now deprecated and it is now being replaced by BackendId. </div><div class="ttdef"><b>Definition:</b> <a href="_backend_id_8hpp_source.xhtml#l00021">BackendId.hpp:21</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a65645fa03bf8cddfb9d8a9f83beeb6e8"><div class="ttname"><a href="namespacearmnn.xhtml#a65645fa03bf8cddfb9d8a9f83beeb6e8">armnn::ParseComputeDevice</a></div><div class="ttdeci">constexpr armnn::Compute ParseComputeDevice(const char *str)</div><div class="ttdoc">Deprecated function that will be removed together with the Compute enum. </div><div class="ttdef"><b>Definition:</b> <a href="_types_utils_8hpp_source.xhtml#l00182">TypesUtils.hpp:182</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360"><div class="ttname"><a href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">armnn::Compute::Undefined</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a82e98ef05fd67036d1195ba17174d685"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a82e98ef05fd67036d1195ba17174d685">&#9670;&nbsp;</a></span>Optimize()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn.xhtml#a674efcf6cbdb9e831d653ff0e821fb38">IOptimizedNetworkPtr</a> Optimize </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_i_network.xhtml">INetwork</a> &amp;&#160;</td>
+ <td class="paramname"><em>network</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::vector&lt; <a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> &gt; &amp;&#160;</td>
+ <td class="paramname"><em>backendPreferences</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_i_device_spec.xhtml">IDeviceSpec</a> &amp;&#160;</td>
+ <td class="paramname"><em>deviceSpec</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_optimizer_options.xhtml">OptimizerOptions</a> &amp;&#160;</td>
+ <td class="paramname"><em>options</em> = <code><a class="el" href="structarmnn_1_1_optimizer_options.xhtml">OptimizerOptions</a>()</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; std::vector&lt; std::string &gt; &amp;&gt;&#160;</td>
+ <td class="paramname"><em>messages</em> = <code><a class="el" href="structarmnn_1_1_empty_optional.xhtml">EmptyOptional</a>()</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Create an optimized version of the network. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">network</td><td><a class="el" href="classarmnn_1_1_i_network.xhtml" title="Main network class which provides the interface for building up a neural network. ...">INetwork</a> description of the network to be optimized. </td></tr>
+ <tr><td class="paramname">backendPreferences</td><td>The choice of the backend ordered by user preferences. </td></tr>
+ <tr><td class="paramname">deviceSpec</td><td><a class="el" href="classarmnn_1_1_device_spec.xhtml">DeviceSpec</a> object as queried from the runtime. See <a class="el" href="classarmnn_1_1_i_runtime.xhtml#a25db7b8e6fc90f8418439ccd33aaf184">IRuntime::GetDeviceSpec()</a> </td></tr>
+ <tr><td class="paramname">messages</td><td>If there are failures or warnings a string describing same will be added to the vector </td></tr>
+ <tr><td class="paramname">options</td><td><a class="el" href="structarmnn_1_1_optimizer_options.xhtml" title="ArmNN performs an optimization on each model/network before it gets loaded for execution. ">OptimizerOptions</a> object with optimizer configuration options </td></tr>
+ </table>
+ </dd>
+</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.xhtml" title="Base class for all ArmNN exceptions so that users can filter to just those. ">armnn::Exception</a> if process fails. </dd></dl>
+<dl><dt><b>Examples: </b></dt><dd><a class="el" href="_async_execution_sample_8cpp-example.xhtml#a19">AsyncExecutionSample.cpp</a>, <a class="el" href="_custom_memory_allocator_sample_8cpp-example.xhtml#a27">CustomMemoryAllocatorSample.cpp</a>, <a class="el" href="_dynamic_sample_8cpp-example.xhtml#a12">DynamicSample.cpp</a>, and <a class="el" href="_simple_sample_8cpp-example.xhtml#a19">SimpleSample.cpp</a>.</dd>
+</dl>
+<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.xhtml#l01680">1680</a> of file <a class="el" href="_network_8cpp_source.xhtml">Network.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_graph_8cpp_source.xhtml#l00301">Graph::AddCompatibilityLayers()</a>, <a class="el" href="_network_8cpp_source.xhtml#l01155">ApplyBackendOptimizations()</a>, <a class="el" href="_logging_8hpp_source.xhtml#l00205">ARMNN_LOG</a>, <a class="el" href="_profiling_8hpp_source.xhtml#l00220">ARMNN_SCOPED_PROFILING_EVENT</a>, <a class="el" href="_network_8cpp_source.xhtml#l01034">AssignBackends()</a>, <a class="el" href="_graph_8hpp_source.xhtml#l00167">Graph::begin()</a>, <a class="el" href="_network_8cpp_source.xhtml#l01136">CreateSupportedBackends()</a>, <a class="el" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407aad42f6697b035b7580e4fef93be20b4d">debug</a>, <a class="el" href="_network_8cpp_source.xhtml#l00516">IOptimizedNetwork::Destroy()</a>, <a class="el" href="_graph_8hpp_source.xhtml#l00169">Graph::end()</a>, <a class="el" href="_backend_settings_8hpp_source.xhtml#l00067">BackendSettings::GetAvailablePreferredBackends()</a>, <a class="el" href="_profiling_8cpp_source.xhtml#l00568">ProfilerManager::GetInstance()</a>, <a class="el" href="namespacearmnn.xhtml#adf57837d00e8352d9b5cc5ab1fb5fee9a5dd7c525cb1500a2181fd4cc079d7acb">InferAndValidate</a>, <a class="el" href="_graph_8cpp_source.xhtml#l00560">Graph::InferTensorInfos()</a>, <a class="el" href="_network_8cpp_source.xhtml#l00502">IOptimizedNetwork::IOptimizedNetwork()</a>, <a class="el" href="_i_network_8hpp_source.xhtml#l00217">OptimizerOptions::m_Debug</a>, <a class="el" href="_network_8hpp_source.xhtml#l00268">OptimizationResult::m_Error</a>, <a class="el" href="_i_network_8hpp_source.xhtml#l00230">OptimizerOptions::m_ImportEnabled</a>, <a class="el" href="_i_network_8hpp_source.xhtml#l00233">OptimizerOptions::m_ModelOptions</a>, <a class="el" href="_i_network_8hpp_source.xhtml#l00236">OptimizerOptions::m_ProfilingEnabled</a>, <a class="el" href="_i_network_8hpp_source.xhtml#l00224">OptimizerOptions::m_ReduceFp32ToBf16</a>, <a class="el" href="_i_network_8hpp_source.xhtml#l00214">OptimizerOptions::m_ReduceFp32ToFp16</a>, <a class="el" href="_i_network_8hpp_source.xhtml#l00227">OptimizerOptions::m_shapeInferenceMethod</a>, <a class="el" href="_backend_settings_8hpp_source.xhtml#l00021">BackendSettings::m_SupportedBackends</a>, <a class="el" href="_optimizer_8hpp_source.xhtml#l00043">MakeOptimizations()</a>, <a class="el" href="_optimizer_8cpp_source.xhtml#l00016">Optimizer::Pass()</a>, <a class="el" href="_i_network_8hpp_source.xhtml#l00777">INetwork::pNetworkImpl</a>, <a class="el" href="_i_network_8hpp_source.xhtml#l00828">IOptimizedNetwork::pOptimizedNetworkImpl</a>, <a class="el" href="_profiling_8cpp_source.xhtml#l00575">ProfilerManager::RegisterProfiler()</a>, <a class="el" href="_network_8cpp_source.xhtml#l00572">ReportError()</a>, <a class="el" href="_network_8cpp_source.xhtml#l01611">SelectTensorHandleStrategy()</a>, <a class="el" href="_i_network_8hpp_source.xhtml#l00182">OptimizerOptions::ToString()</a>, <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a>, and <a class="el" href="namespacearmnn.xhtml#adf57837d00e8352d9b5cc5ab1fb5fee9af6486a22a9bb11959bfae60a3e5174b1">ValidateOnly</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_strided_slice_async_end_to_end_test_8hpp_source.xhtml#l00123">armnn::experimental::AsyncEndToEndTestImpl()</a>, <a class="el" href="_strided_slice_async_end_to_end_test_8hpp_source.xhtml#l00030">armnn::experimental::AsyncThreadedEndToEndTestImpl()</a>, <a class="el" href="_json_printer_test_impl_8cpp_source.xhtml#l00120">GetSoftmaxProfilerJson()</a>, <a class="el" href="_inference_model_8hpp_source.xhtml#l00436">InferenceModel&lt; IParser, TDataType &gt;::InferenceModel()</a>, <a class="el" href="_parser_flatbuffers_fixture_8hpp_source.xhtml#l00120">ParserFlatbuffersFixture::loadNetwork()</a>, <a class="el" href="_model_accuracy_tool-_armnn_8cpp_source.xhtml#l00049">main()</a>, <a class="el" href="_q_lstm_end_to_end_test_impl_8cpp_source.xhtml#l00036">QLstmEndToEnd()</a>, <a class="el" href="_quantized_lstm_end_to_end_test_impl_8cpp_source.xhtml#l00181">QuantizedLstmEndToEnd()</a>, <a class="el" href="_parser_prototxt_fixture_8hpp_source.xhtml#l00122">ParserPrototxtFixture&lt; TParser &gt;::Setup()</a>, <a class="el" href="_parser_flatbuffers_serialize_fixture_8hpp_source.xhtml#l00049">ParserFlatbuffersSerializeFixture::Setup()</a>, <a class="el" href="_parser_prototxt_fixture_8hpp_source.xhtml#l00174">ParserPrototxtFixture&lt; TParser &gt;::SetupOptimizedNetwork()</a>, <a class="el" href="_cl_context_serializer_tests_8cpp_source.xhtml#l00071">TEST_CASE_FIXTURE()</a>, <a class="el" href="_debug_callback_test_8cpp_source.xhtml#l00014">TEST_SUITE()</a>, <a class="el" href="_profiling_test_utils_8cpp_source.xhtml#l00363">VerifyPostOptimisationStructureTestImpl()</a>, and <a class="el" href="_i_memory_optimizer_strategy_8hpp_source.xhtml#l00048">IMemoryOptimizerStrategy::~IMemoryOptimizerStrategy()</a>.</p>
+<div class="fragment"><div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>&#160;{</div><div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>&#160; <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(debug) &lt;&lt; options.ToString();</div><div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>&#160;</div><div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>&#160; <span class="comment">// Enable profiling</span></div><div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>&#160; <span class="keyword">auto</span> profiler = inNetwork.pNetworkImpl-&gt;GetGraph().GetProfiler();</div><div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>&#160; ProfilerManager::GetInstance().RegisterProfiler(profiler.get());</div><div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>&#160; profiler-&gt;EnableProfiling(options.m_ProfilingEnabled);</div><div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>&#160;</div><div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>&#160; <a class="code" href="_profiling_8hpp.xhtml#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(Compute::Undefined, <span class="stringliteral">&quot;Optimizer&quot;</span>);</div><div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>&#160; <span class="keywordflow">if</span> (backendPreferences.empty())</div><div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>&#160; {</div><div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Invoked Optimize with no backends specified&quot;</span>);</div><div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>&#160; }</div><div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>&#160;</div><div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>&#160; <span class="keywordflow">if</span> (options.m_ReduceFp32ToFp16 &amp;&amp; options.m_ReduceFp32ToBf16)</div><div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>&#160; {</div><div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;BFloat16 and Float16 optimization cannot be enabled at the same time.&quot;</span>);</div><div class="line"><a name="l01702"></a><span class="lineno"> 1702</span>&#160; }</div><div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>&#160;</div><div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>&#160; <span class="comment">// Ensure TensorInfo is set on all output slots of ConstantLayers in the graph</span></div><div class="line"><a name="l01705"></a><span class="lineno"> 1705</span>&#160; inNetwork.pNetworkImpl-&gt;GetGraph().VerifyConstantLayerSetTensorInfo();</div><div class="line"><a name="l01706"></a><span class="lineno"> 1706</span>&#160;</div><div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>&#160; std::unique_ptr&lt;Graph&gt; graph = std::make_unique&lt;Graph&gt;(inNetwork.pNetworkImpl-&gt;GetGraph());</div><div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>&#160;</div><div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>&#160; <span class="keyword">auto</span> optNet = <a class="code" href="namespacearmnn.xhtml#a674efcf6cbdb9e831d653ff0e821fb38">IOptimizedNetworkPtr</a>(<span class="keyword">new</span> IOptimizedNetwork(std::move(graph), options.m_ModelOptions),</div><div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>&#160; &amp;IOptimizedNetwork::Destroy);</div><div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>&#160;</div><div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>&#160; IOptimizedNetwork* optNetObjPtr = optNet.get();</div><div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>&#160;</div><div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>&#160; <span class="comment">// Get the optimized graph</span></div><div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>&#160; Graph&amp; optGraph = optNetObjPtr-&gt;pOptimizedNetworkImpl-&gt;GetGraph();</div><div class="line"><a name="l01716"></a><span class="lineno"> 1716</span>&#160;</div><div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>&#160; <span class="keywordflow">if</span>(options.m_shapeInferenceMethod == ShapeInferenceMethod::InferAndValidate)</div><div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>&#160; {</div><div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>&#160; <span class="comment">// Infer the tensor infos for all output slots. Throws an exception on failure</span></div><div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>&#160; optGraph.InferTensorInfos();</div><div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>&#160; }</div><div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>&#160;</div><div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>&#160; <span class="comment">// Perform AddBroadcastReshapeLayer optimisation</span></div><div class="line"><a name="l01724"></a><span class="lineno"> 1724</span>&#160; <span class="keyword">using namespace </span>optimizations;</div><div class="line"><a name="l01725"></a><span class="lineno"> 1725</span>&#160; Optimizer::Pass(optGraph, <a class="code" href="namespacearmnn.xhtml#aa7427025a851113a492de0b68b23d22a">MakeOptimizations</a>(<a class="code" href="namespacearmnn_1_1optimizations.xhtml#a4fc55afb4885278ad1510b2c4307af76">AddBroadcastReshapeLayer</a>()));</div><div class="line"><a name="l01726"></a><span class="lineno"> 1726</span>&#160;</div><div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>&#160; <span class="keywordflow">if</span>(options.m_shapeInferenceMethod == ShapeInferenceMethod::ValidateOnly)</div><div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>&#160; {</div><div class="line"><a name="l01729"></a><span class="lineno"> 1729</span>&#160; <span class="comment">// Validate the tensor infos for all output slots. Throws an exception on failure</span></div><div class="line"><a name="l01730"></a><span class="lineno"> 1730</span>&#160; optGraph.InferTensorInfos();</div><div class="line"><a name="l01731"></a><span class="lineno"> 1731</span>&#160; }</div><div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>&#160;</div><div class="line"><a name="l01733"></a><span class="lineno"> 1733</span>&#160; <span class="comment">// Perform optimisation passes</span></div><div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>&#160; Optimizer::Pass(optGraph, <a class="code" href="namespacearmnn.xhtml#aa7427025a851113a492de0b68b23d22a">MakeOptimizations</a>(<a class="code" href="namespacearmnn_1_1optimizations.xhtml#a64ddffb38fbe5b78ec92b753cd4bd0ba">SquashEqualPermuteSiblings</a>(),</div><div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#aba7b0ca6192b8b58ecd517a82b4f378e">SquashEqualTransposeSiblings</a>(),</div><div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a29f8d97b2d74f99c88298881cd1d825b">SquashEqualReshapeSiblings</a>(),</div><div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#aa31127c77d2117f78d43ca2958dcae19">OptimizeInversePermutes</a>(),</div><div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a2f9d1a13be2ac1c4213729a0ef181fc0">OptimizeInverseTransposes</a>(),</div><div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#aafc70d5af99400ff5ea7991825658b2f">MovePermuteUp</a>(),</div><div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a5918588fa316cf4c23f1cf02c81ee706">MoveTransposeUp</a>(),</div><div class="line"><a name="l01741"></a><span class="lineno"> 1741</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#ae0b1382e3af141896a46531c50e8863f">PermuteAsReshape</a>(),</div><div class="line"><a name="l01742"></a><span class="lineno"> 1742</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#ad1aaeee71293f34d9f65d2dd2792830d">TransposeAsReshape</a>(),</div><div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a8341ca3512ebafb19d60eba44d40d9e4">OptimizeConsecutiveReshapes</a>(),</div><div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#ae896e4c42865d1bc9cc7c55e1ee24090">RedirectMembersToConstantInputs</a>(),</div><div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a8b394ff60ed829a91f07deac476f3db2">FoldPadIntoConvolution2d</a>(),</div><div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a227e9ab5e488aa90ba462790ba0e5aec">FoldPadIntoDepthwiseConvolution2d</a>(),</div><div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a279d0a7c56966cea334303d48a874964">FoldPadIntoPooling2d</a>(),</div><div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a17d1279f5f8e3b92c328b1ed3b6fd549">PermuteAndBatchToSpaceAsDepthToSpace</a>(),</div><div class="line"><a name="l01749"></a><span class="lineno"> 1749</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a98f54d4391347d517c7a7869e7707203">TransposeAndBatchToSpaceAsDepthToSpace</a>(),</div><div class="line"><a name="l01750"></a><span class="lineno"> 1750</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#aa52c06792e18dc13030e82476f706f9e">FuseBatchNormIntoConvolution2DFloat32</a>(),</div><div class="line"><a name="l01751"></a><span class="lineno"> 1751</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a8a81178ddcebb93ec0c35b6e6284273c">FuseBatchNormIntoConvolution2DFloat16</a>(),</div><div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a56e54a818166a2f4b2c1a7f76a3629ff">FuseBatchNormIntoDepthwiseConvolution2DFloat32</a>(),</div><div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#ab40bb51feca46649eb9d00522bfe51f6">FuseBatchNormIntoDepthwiseConvolution2DFloat16</a>()));</div><div class="line"><a name="l01754"></a><span class="lineno"> 1754</span>&#160;</div><div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>&#160; <span class="comment">// If Fp32 to Fp16 optimization is set convert Fp32 network to Fp16</span></div><div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>&#160; <span class="keywordflow">if</span> (options.m_ReduceFp32ToFp16)</div><div class="line"><a name="l01757"></a><span class="lineno"> 1757</span>&#160; {</div><div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>&#160; <a class="code" href="_profiling_8hpp.xhtml#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(Compute::Undefined, <span class="stringliteral">&quot;Optimizer_ReduceFp32ToFp16&quot;</span>);</div><div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>&#160; Optimizer::Pass(optGraph, <a class="code" href="namespacearmnn.xhtml#aa7427025a851113a492de0b68b23d22a">MakeOptimizations</a>(<a class="code" href="namespacearmnn_1_1optimizations.xhtml#a86d19da62b6cfed3928f6fe7026f22fa">Fp32NetworkToFp16Converter</a>()));</div><div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>&#160; Optimizer::Pass(optGraph, <a class="code" href="namespacearmnn.xhtml#aa7427025a851113a492de0b68b23d22a">MakeOptimizations</a>(<a class="code" href="namespacearmnn_1_1optimizations.xhtml#a226cef3d775179e25ee35d231f4e8fae">ConvertConstantsFloatToHalf</a>()));</div><div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>&#160; }</div><div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>&#160;</div><div class="line"><a name="l01763"></a><span class="lineno"> 1763</span>&#160; <span class="comment">// If Fp32 to Bf16 optimization is set convert Fp32 network to Bf16</span></div><div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>&#160; <span class="comment">// Convert input of Convolution2d and FullyConnected from Fp32 to Bf16</span></div><div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>&#160; <span class="comment">// Only Constant weight of Convolution2d and FullyConnected are converted from Fp32 to Bf16</span></div><div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>&#160; <span class="keywordflow">if</span> (options.m_ReduceFp32ToBf16)</div><div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>&#160; {</div><div class="line"><a name="l01768"></a><span class="lineno"> 1768</span>&#160; <a class="code" href="_profiling_8hpp.xhtml#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(Compute::Undefined, <span class="stringliteral">&quot;Optimizer_ReduceFp32ToBf16&quot;</span>);</div><div class="line"><a name="l01769"></a><span class="lineno"> 1769</span>&#160; Optimizer::Pass(optGraph, <a class="code" href="namespacearmnn.xhtml#aa7427025a851113a492de0b68b23d22a">MakeOptimizations</a>(<a class="code" href="namespacearmnn_1_1optimizations.xhtml#aeb70f8fcf5180bdd5c94be7bb2f9d176">Fp32NetworkToBf16Converter</a>()));</div><div class="line"><a name="l01770"></a><span class="lineno"> 1770</span>&#160; }</div><div class="line"><a name="l01771"></a><span class="lineno"> 1771</span>&#160;</div><div class="line"><a name="l01772"></a><span class="lineno"> 1772</span>&#160; <span class="comment">// Initialize backend settings</span></div><div class="line"><a name="l01773"></a><span class="lineno"> 1773</span>&#160; BackendSettings backendSettings(backendPreferences, deviceSpec);</div><div class="line"><a name="l01774"></a><span class="lineno"> 1774</span>&#160; <span class="keywordflow">if</span> (backendSettings.GetAvailablePreferredBackends().empty())</div><div class="line"><a name="l01775"></a><span class="lineno"> 1775</span>&#160; {</div><div class="line"><a name="l01776"></a><span class="lineno"> 1776</span>&#160; std::stringstream failureMsg;</div><div class="line"><a name="l01777"></a><span class="lineno"> 1777</span>&#160; failureMsg &lt;&lt; <span class="stringliteral">&quot;None of the preferred backends &quot;</span> &lt;&lt; backendPreferences</div><div class="line"><a name="l01778"></a><span class="lineno"> 1778</span>&#160; &lt;&lt; <span class="stringliteral">&quot; are supported. Current platform provides &quot;</span> &lt;&lt; backendSettings.m_SupportedBackends;</div><div class="line"><a name="l01779"></a><span class="lineno"> 1779</span>&#160; <a class="code" href="namespacearmnn.xhtml#a7658f93d899c8646515a29370e6aa994">ReportError</a>(failureMsg.str(), messages);</div><div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(failureMsg.str());</div><div class="line"><a name="l01781"></a><span class="lineno"> 1781</span>&#160; }</div><div class="line"><a name="l01782"></a><span class="lineno"> 1782</span>&#160;</div><div class="line"><a name="l01783"></a><span class="lineno"> 1783</span>&#160; <span class="comment">// Create a map to temporarily hold initialized backend objects</span></div><div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>&#160; TensorHandleFactoryRegistry tensorHandleFactoryRegistry;</div><div class="line"><a name="l01785"></a><span class="lineno"> 1785</span>&#160; <a class="code" href="namespacearmnn.xhtml#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a> backends = <a class="code" href="namespacearmnn.xhtml#a1ec6b4c20ed294a96cf94c33c24caaf5">CreateSupportedBackends</a>(tensorHandleFactoryRegistry, backendSettings);</div><div class="line"><a name="l01786"></a><span class="lineno"> 1786</span>&#160;</div><div class="line"><a name="l01787"></a><span class="lineno"> 1787</span>&#160; <span class="comment">// Assign an available backend to each layer</span></div><div class="line"><a name="l01788"></a><span class="lineno"> 1788</span>&#160; Graph::Iterator firstLayer = optGraph.begin();</div><div class="line"><a name="l01789"></a><span class="lineno"> 1789</span>&#160; Graph::Iterator lastLayer = optGraph.end();</div><div class="line"><a name="l01790"></a><span class="lineno"> 1790</span>&#160; OptimizationResult assignBackendsResult = <a class="code" href="namespacearmnn.xhtml#a48e4d70ae8893f6f1a8ebfced5b03a07">AssignBackends</a>(optNetObjPtr-&gt;pOptimizedNetworkImpl.get(),</div><div class="line"><a name="l01791"></a><span class="lineno"> 1791</span>&#160; backendSettings,</div><div class="line"><a name="l01792"></a><span class="lineno"> 1792</span>&#160; firstLayer,</div><div class="line"><a name="l01793"></a><span class="lineno"> 1793</span>&#160; lastLayer,</div><div class="line"><a name="l01794"></a><span class="lineno"> 1794</span>&#160; messages);</div><div class="line"><a name="l01795"></a><span class="lineno"> 1795</span>&#160; <span class="keywordflow">if</span> (assignBackendsResult.m_Error)</div><div class="line"><a name="l01796"></a><span class="lineno"> 1796</span>&#160; {</div><div class="line"><a name="l01797"></a><span class="lineno"> 1797</span>&#160; <span class="comment">// Failed to assign a backend to each layer</span></div><div class="line"><a name="l01798"></a><span class="lineno"> 1798</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Failed to assign a backend to each layer&quot;</span>);</div><div class="line"><a name="l01799"></a><span class="lineno"> 1799</span>&#160; }</div><div class="line"><a name="l01800"></a><span class="lineno"> 1800</span>&#160;</div><div class="line"><a name="l01801"></a><span class="lineno"> 1801</span>&#160; Optimizer::Pass(optGraph, <a class="code" href="namespacearmnn.xhtml#aa7427025a851113a492de0b68b23d22a">MakeOptimizations</a>(<a class="code" href="namespacearmnn_1_1optimizations.xhtml#a1a9d718b48612b5817a3c369f9fd71ee">OptimizeInverseConversionsFp16</a>(),</div><div class="line"><a name="l01802"></a><span class="lineno"> 1802</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#ae1509d340bc981b11101c3316ee8afd6">OptimizeInverseConversionsFp32</a>()));</div><div class="line"><a name="l01803"></a><span class="lineno"> 1803</span>&#160;</div><div class="line"><a name="l01804"></a><span class="lineno"> 1804</span>&#160; <span class="comment">// Apply the backend-specific optimizations</span></div><div class="line"><a name="l01805"></a><span class="lineno"> 1805</span>&#160; OptimizationResult backendOptimizationResult = <a class="code" href="namespacearmnn.xhtml#a9f31d956861d8277fa5f8fb877dbbb6c">ApplyBackendOptimizations</a>(optNetObjPtr-&gt;pOptimizedNetworkImpl.get(),</div><div class="line"><a name="l01806"></a><span class="lineno"> 1806</span>&#160; backendSettings,</div><div class="line"><a name="l01807"></a><span class="lineno"> 1807</span>&#160; backends,</div><div class="line"><a name="l01808"></a><span class="lineno"> 1808</span>&#160; options.m_ModelOptions,</div><div class="line"><a name="l01809"></a><span class="lineno"> 1809</span>&#160; messages);</div><div class="line"><a name="l01810"></a><span class="lineno"> 1810</span>&#160; <span class="keywordflow">if</span> (backendOptimizationResult.m_Error)</div><div class="line"><a name="l01811"></a><span class="lineno"> 1811</span>&#160; {</div><div class="line"><a name="l01812"></a><span class="lineno"> 1812</span>&#160; <span class="comment">// Failed to apply the backend-specific optimizations</span></div><div class="line"><a name="l01813"></a><span class="lineno"> 1813</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Failed to apply the backend-specific optimizations&quot;</span>);</div><div class="line"><a name="l01814"></a><span class="lineno"> 1814</span>&#160; }</div><div class="line"><a name="l01815"></a><span class="lineno"> 1815</span>&#160;</div><div class="line"><a name="l01816"></a><span class="lineno"> 1816</span>&#160; <span class="comment">// If the debug flag is set, then insert a DebugLayer after each layer</span></div><div class="line"><a name="l01817"></a><span class="lineno"> 1817</span>&#160; <span class="comment">// Doing this after applying the backend optimizations as they might have changed some layers</span></div><div class="line"><a name="l01818"></a><span class="lineno"> 1818</span>&#160; <span class="keywordflow">if</span> (options.m_Debug)</div><div class="line"><a name="l01819"></a><span class="lineno"> 1819</span>&#160; {</div><div class="line"><a name="l01820"></a><span class="lineno"> 1820</span>&#160; Optimizer::Pass(optGraph, <a class="code" href="namespacearmnn.xhtml#aa7427025a851113a492de0b68b23d22a">MakeOptimizations</a>(<a class="code" href="namespacearmnn_1_1optimizations.xhtml#aa76c76565125ad77092403176d74fd85">InsertDebugLayer</a>()));</div><div class="line"><a name="l01821"></a><span class="lineno"> 1821</span>&#160; }</div><div class="line"><a name="l01822"></a><span class="lineno"> 1822</span>&#160;</div><div class="line"><a name="l01823"></a><span class="lineno"> 1823</span>&#160; <span class="comment">// Calculate the compatibility strategies for tensor handles</span></div><div class="line"><a name="l01824"></a><span class="lineno"> 1824</span>&#160; OptimizationResult strategyResult = <a class="code" href="namespacearmnn.xhtml#a86541d11fcad5246a78cbc21d637a504">SelectTensorHandleStrategy</a>(optGraph,</div><div class="line"><a name="l01825"></a><span class="lineno"> 1825</span>&#160; backends,</div><div class="line"><a name="l01826"></a><span class="lineno"> 1826</span>&#160; tensorHandleFactoryRegistry,</div><div class="line"><a name="l01827"></a><span class="lineno"> 1827</span>&#160; options.m_ImportEnabled,</div><div class="line"><a name="l01828"></a><span class="lineno"> 1828</span>&#160; messages);</div><div class="line"><a name="l01829"></a><span class="lineno"> 1829</span>&#160; <span class="keywordflow">if</span> (strategyResult.m_Error)</div><div class="line"><a name="l01830"></a><span class="lineno"> 1830</span>&#160; {</div><div class="line"><a name="l01831"></a><span class="lineno"> 1831</span>&#160; <span class="comment">// Failed to apply the backend-specific optimizations</span></div><div class="line"><a name="l01832"></a><span class="lineno"> 1832</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a674efcf6cbdb9e831d653ff0e821fb38">IOptimizedNetworkPtr</a>(<span class="keyword">nullptr</span>, &amp;IOptimizedNetwork::Destroy);</div><div class="line"><a name="l01833"></a><span class="lineno"> 1833</span>&#160; }</div><div class="line"><a name="l01834"></a><span class="lineno"> 1834</span>&#160;</div><div class="line"><a name="l01835"></a><span class="lineno"> 1835</span>&#160; <span class="comment">// Based on the tensor handle strategy determined above, insert copy layers where required.</span></div><div class="line"><a name="l01836"></a><span class="lineno"> 1836</span>&#160; {</div><div class="line"><a name="l01837"></a><span class="lineno"> 1837</span>&#160; <a class="code" href="_profiling_8hpp.xhtml#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(Compute::Undefined, <span class="stringliteral">&quot;Optimizer_AddCompatibilityLayers&quot;</span>);</div><div class="line"><a name="l01838"></a><span class="lineno"> 1838</span>&#160; optGraph.AddCompatibilityLayers(backends, tensorHandleFactoryRegistry);</div><div class="line"><a name="l01839"></a><span class="lineno"> 1839</span>&#160; }</div><div class="line"><a name="l01840"></a><span class="lineno"> 1840</span>&#160;</div><div class="line"><a name="l01841"></a><span class="lineno"> 1841</span>&#160; <span class="comment">// Convert constants</span></div><div class="line"><a name="l01842"></a><span class="lineno"> 1842</span>&#160; {</div><div class="line"><a name="l01843"></a><span class="lineno"> 1843</span>&#160; <a class="code" href="_profiling_8hpp.xhtml#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(Compute::Undefined, <span class="stringliteral">&quot;Optimizer_ConvertConstants&quot;</span>);</div><div class="line"><a name="l01844"></a><span class="lineno"> 1844</span>&#160; Optimizer::Pass(optGraph, <a class="code" href="namespacearmnn.xhtml#aa7427025a851113a492de0b68b23d22a">MakeOptimizations</a>(<a class="code" href="namespacearmnn_1_1optimizations.xhtml#a226cef3d775179e25ee35d231f4e8fae">ConvertConstantsFloatToHalf</a>()));</div><div class="line"><a name="l01845"></a><span class="lineno"> 1845</span>&#160; Optimizer::Pass(optGraph, <a class="code" href="namespacearmnn.xhtml#aa7427025a851113a492de0b68b23d22a">MakeOptimizations</a>(<a class="code" href="namespacearmnn_1_1optimizations.xhtml#a06cac66872538895dd6b59cdf39173d2">ConvertConstantsHalfToFloat</a>()));</div><div class="line"><a name="l01846"></a><span class="lineno"> 1846</span>&#160; }</div><div class="line"><a name="l01847"></a><span class="lineno"> 1847</span>&#160; <span class="keywordflow">return</span> optNet;</div><div class="line"><a name="l01848"></a><span class="lineno"> 1848</span>&#160;}</div><div class="ttc" id="namespacearmnn_1_1optimizations_xhtml_a64ddffb38fbe5b78ec92b753cd4bd0ba"><div class="ttname"><a href="namespacearmnn_1_1optimizations.xhtml#a64ddffb38fbe5b78ec92b753cd4bd0ba">armnn::optimizations::SquashEqualPermuteSiblings</a></div><div class="ttdeci">OptimizeForConnection&lt; Layer, PermuteLayer, SquashEqualSiblingsImpl&lt; PermuteLayer &gt; &gt; SquashEqualPermuteSiblings</div><div class="ttdef"><b>Definition:</b> <a href="_squash_equal_siblings_8hpp_source.xhtml#l00067">SquashEqualSiblings.hpp:67</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a7658f93d899c8646515a29370e6aa994"><div class="ttname"><a href="namespacearmnn.xhtml#a7658f93d899c8646515a29370e6aa994">armnn::ReportError</a></div><div class="ttdeci">void ReportError(const std::string &amp;errorMessage, Optional&lt; std::vector&lt; std::string &gt; &amp;&gt; errorMessages)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.xhtml#l00572">Network.cpp:572</a></div></div>
+<div class="ttc" id="namespacearmnn_1_1optimizations_xhtml_aa31127c77d2117f78d43ca2958dcae19"><div class="ttname"><a href="namespacearmnn_1_1optimizations.xhtml#aa31127c77d2117f78d43ca2958dcae19">armnn::optimizations::OptimizeInversePermutes</a></div><div class="ttdeci">OptimizeForConnection&lt; PermuteLayer, PermuteLayer, OptimizeInversePermutesImpl&lt; PermuteLayer &gt; &gt; OptimizeInversePermutes</div><div class="ttdef"><b>Definition:</b> <a href="_optimize_inverse_permutes_8hpp_source.xhtml#l00043">OptimizeInversePermutes.hpp:43</a></div></div>
+<div class="ttc" id="namespacearmnn_1_1optimizations_xhtml_a8b394ff60ed829a91f07deac476f3db2"><div class="ttname"><a href="namespacearmnn_1_1optimizations.xhtml#a8b394ff60ed829a91f07deac476f3db2">armnn::optimizations::FoldPadIntoConvolution2d</a></div><div class="ttdeci">OptimizeForExclusiveConnection&lt; PadLayer, Convolution2dLayer, pad_fold::FoldPadIntoConvolution2dImpl &gt; FoldPadIntoConvolution2d</div><div class="ttdef"><b>Definition:</b> <a href="_fold_pad_into_layer2d_8hpp_source.xhtml#l00233">FoldPadIntoLayer2d.hpp:233</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_aa7427025a851113a492de0b68b23d22a"><div class="ttname"><a href="namespacearmnn.xhtml#aa7427025a851113a492de0b68b23d22a">armnn::MakeOptimizations</a></div><div class="ttdeci">Optimizer::Optimizations MakeOptimizations(Args &amp;&amp;... args)</div><div class="ttdef"><b>Definition:</b> <a href="_optimizer_8hpp_source.xhtml#l00043">Optimizer.hpp:43</a></div></div>
+<div class="ttc" id="namespacearmnn_1_1optimizations_xhtml_a2f9d1a13be2ac1c4213729a0ef181fc0"><div class="ttname"><a href="namespacearmnn_1_1optimizations.xhtml#a2f9d1a13be2ac1c4213729a0ef181fc0">armnn::optimizations::OptimizeInverseTransposes</a></div><div class="ttdeci">OptimizeForConnection&lt; TransposeLayer, TransposeLayer, OptimizeInversePermutesImpl&lt; TransposeLayer &gt; &gt; OptimizeInverseTransposes</div><div class="ttdef"><b>Definition:</b> <a href="_optimize_inverse_permutes_8hpp_source.xhtml#l00045">OptimizeInversePermutes.hpp:45</a></div></div>
+<div class="ttc" id="namespacearmnn_1_1optimizations_xhtml_a227e9ab5e488aa90ba462790ba0e5aec"><div class="ttname"><a href="namespacearmnn_1_1optimizations.xhtml#a227e9ab5e488aa90ba462790ba0e5aec">armnn::optimizations::FoldPadIntoDepthwiseConvolution2d</a></div><div class="ttdeci">OptimizeForExclusiveConnection&lt; PadLayer, DepthwiseConvolution2dLayer, pad_fold::FoldPadIntoDepthwiseConvolution2dImpl &gt; FoldPadIntoDepthwiseConvolution2d</div><div class="ttdef"><b>Definition:</b> <a href="_fold_pad_into_layer2d_8hpp_source.xhtml#l00237">FoldPadIntoLayer2d.hpp:237</a></div></div>
+<div class="ttc" id="namespacearmnn_1_1optimizations_xhtml_a98f54d4391347d517c7a7869e7707203"><div class="ttname"><a href="namespacearmnn_1_1optimizations.xhtml#a98f54d4391347d517c7a7869e7707203">armnn::optimizations::TransposeAndBatchToSpaceAsDepthToSpace</a></div><div class="ttdeci">OptimizeForConnection&lt; TransposeLayer, BatchToSpaceNdLayer, PermuteAndBatchToSpaceAsDepthToSpaceImpl&lt; TransposeLayer &gt; &gt; TransposeAndBatchToSpaceAsDepthToSpace</div><div class="ttdef"><b>Definition:</b> <a href="_permute_and_batch_to_space_as_depth_to_space_8hpp_source.xhtml#l00104">PermuteAndBatchToSpaceAsDepthToSpace.hpp:104</a></div></div>
+<div class="ttc" id="namespacearmnn_1_1optimizations_xhtml_a56e54a818166a2f4b2c1a7f76a3629ff"><div class="ttname"><a href="namespacearmnn_1_1optimizations.xhtml#a56e54a818166a2f4b2c1a7f76a3629ff">armnn::optimizations::FuseBatchNormIntoDepthwiseConvolution2DFloat32</a></div><div class="ttdeci">OptimizeForExclusiveConnection&lt; DepthwiseConvolution2dLayer, BatchNormalizationLayer, FuseBatchNorm&lt; DepthwiseConvolution2dLayer, armnn::DataType::Float32 &gt; &gt; FuseBatchNormIntoDepthwiseConvolution2DFloat32</div><div class="ttdef"><b>Definition:</b> <a href="_fuse_batch_norm_8hpp_source.xhtml#l00188">FuseBatchNorm.hpp:188</a></div></div>
+<div class="ttc" id="namespacearmnn_1_1optimizations_xhtml_ab40bb51feca46649eb9d00522bfe51f6"><div class="ttname"><a href="namespacearmnn_1_1optimizations.xhtml#ab40bb51feca46649eb9d00522bfe51f6">armnn::optimizations::FuseBatchNormIntoDepthwiseConvolution2DFloat16</a></div><div class="ttdeci">OptimizeForExclusiveConnection&lt; DepthwiseConvolution2dLayer, BatchNormalizationLayer, FuseBatchNorm&lt; DepthwiseConvolution2dLayer, armnn::DataType::Float16 &gt; &gt; FuseBatchNormIntoDepthwiseConvolution2DFloat16</div><div class="ttdef"><b>Definition:</b> <a href="_fuse_batch_norm_8hpp_source.xhtml#l00193">FuseBatchNorm.hpp:193</a></div></div>
+<div class="ttc" id="namespacearmnn_1_1optimizations_xhtml_a8a81178ddcebb93ec0c35b6e6284273c"><div class="ttname"><a href="namespacearmnn_1_1optimizations.xhtml#a8a81178ddcebb93ec0c35b6e6284273c">armnn::optimizations::FuseBatchNormIntoConvolution2DFloat16</a></div><div class="ttdeci">OptimizeForExclusiveConnection&lt; Convolution2dLayer, BatchNormalizationLayer, FuseBatchNorm&lt; Convolution2dLayer, armnn::DataType::Float16 &gt; &gt; FuseBatchNormIntoConvolution2DFloat16</div><div class="ttdef"><b>Definition:</b> <a href="_fuse_batch_norm_8hpp_source.xhtml#l00183">FuseBatchNorm.hpp:183</a></div></div>
+<div class="ttc" id="namespacearmnn_1_1optimizations_xhtml_aa52c06792e18dc13030e82476f706f9e"><div class="ttname"><a href="namespacearmnn_1_1optimizations.xhtml#aa52c06792e18dc13030e82476f706f9e">armnn::optimizations::FuseBatchNormIntoConvolution2DFloat32</a></div><div class="ttdeci">OptimizeForExclusiveConnection&lt; Convolution2dLayer, BatchNormalizationLayer, FuseBatchNorm&lt; Convolution2dLayer, armnn::DataType::Float32 &gt; &gt; FuseBatchNormIntoConvolution2DFloat32</div><div class="ttdef"><b>Definition:</b> <a href="_fuse_batch_norm_8hpp_source.xhtml#l00178">FuseBatchNorm.hpp:178</a></div></div>
+<div class="ttc" id="_logging_8hpp_xhtml_a7b6ad073975f437ec38ca7d20154727f"><div class="ttname"><a href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a></div><div class="ttdeci">#define ARMNN_LOG(severity)</div><div class="ttdef"><b>Definition:</b> <a href="_logging_8hpp_source.xhtml#l00205">Logging.hpp:205</a></div></div>
+<div class="ttc" id="namespacearmnn_1_1optimizations_xhtml_a29f8d97b2d74f99c88298881cd1d825b"><div class="ttname"><a href="namespacearmnn_1_1optimizations.xhtml#a29f8d97b2d74f99c88298881cd1d825b">armnn::optimizations::SquashEqualReshapeSiblings</a></div><div class="ttdeci">OptimizeForConnection&lt; Layer, ReshapeLayer, SquashEqualSiblingsImpl&lt; ReshapeLayer &gt; &gt; SquashEqualReshapeSiblings</div><div class="ttdef"><b>Definition:</b> <a href="_squash_equal_siblings_8hpp_source.xhtml#l00070">SquashEqualSiblings.hpp:70</a></div></div>
+<div class="ttc" id="namespacearmnn_1_1optimizations_xhtml_a5918588fa316cf4c23f1cf02c81ee706"><div class="ttname"><a href="namespacearmnn_1_1optimizations.xhtml#a5918588fa316cf4c23f1cf02c81ee706">armnn::optimizations::MoveTransposeUp</a></div><div class="ttdeci">OptimizeForConnection&lt; Layer, TransposeLayer, MoveTransposeUpImpl &gt; MoveTransposeUp</div><div class="ttdef"><b>Definition:</b> <a href="_move_transpose_up_8hpp_source.xhtml#l00077">MoveTransposeUp.hpp:77</a></div></div>
+<div class="ttc" id="namespacearmnn_1_1optimizations_xhtml_aa76c76565125ad77092403176d74fd85"><div class="ttname"><a href="namespacearmnn_1_1optimizations.xhtml#aa76c76565125ad77092403176d74fd85">armnn::optimizations::InsertDebugLayer</a></div><div class="ttdeci">OptimizeForType&lt; Layer, AddDebugImpl &gt; InsertDebugLayer</div><div class="ttdef"><b>Definition:</b> <a href="_add_debug_8hpp_source.xhtml#l00034">AddDebug.hpp:34</a></div></div>
+<div class="ttc" id="namespacearmnn_1_1optimizations_xhtml_a8341ca3512ebafb19d60eba44d40d9e4"><div class="ttname"><a href="namespacearmnn_1_1optimizations.xhtml#a8341ca3512ebafb19d60eba44d40d9e4">armnn::optimizations::OptimizeConsecutiveReshapes</a></div><div class="ttdeci">OptimizeForConnection&lt; ReshapeLayer, ReshapeLayer, OptimizeConsecutiveReshapesImpl &gt; OptimizeConsecutiveReshapes</div><div class="ttdef"><b>Definition:</b> <a href="_optimize_consecutive_reshapes_8hpp_source.xhtml#l00061">OptimizeConsecutiveReshapes.hpp:61</a></div></div>
+<div class="ttc" id="_profiling_8hpp_xhtml_a5ccc65e2c464ac05ce311fdae7ede03a"><div class="ttname"><a href="_profiling_8hpp.xhtml#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a></div><div class="ttdeci">#define ARMNN_SCOPED_PROFILING_EVENT(backendId, name)</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_8hpp_source.xhtml#l00220">Profiling.hpp:220</a></div></div>
+<div class="ttc" id="namespacearmnn_1_1optimizations_xhtml_a1a9d718b48612b5817a3c369f9fd71ee"><div class="ttname"><a href="namespacearmnn_1_1optimizations.xhtml#a1a9d718b48612b5817a3c369f9fd71ee">armnn::optimizations::OptimizeInverseConversionsFp16</a></div><div class="ttdeci">OptimizeForConnection&lt; ConvertFp16ToFp32Layer, ConvertFp32ToFp16Layer, OptimizeInverseConversionsImpl &gt; OptimizeInverseConversionsFp16</div><div class="ttdef"><b>Definition:</b> <a href="_optimize_inverse_conversions_8hpp_source.xhtml#l00042">OptimizeInverseConversions.hpp:42</a></div></div>
+<div class="ttc" id="namespacearmnn_1_1optimizations_xhtml_a17d1279f5f8e3b92c328b1ed3b6fd549"><div class="ttname"><a href="namespacearmnn_1_1optimizations.xhtml#a17d1279f5f8e3b92c328b1ed3b6fd549">armnn::optimizations::PermuteAndBatchToSpaceAsDepthToSpace</a></div><div class="ttdeci">OptimizeForConnection&lt; PermuteLayer, BatchToSpaceNdLayer, PermuteAndBatchToSpaceAsDepthToSpaceImpl&lt; PermuteLayer &gt; &gt; PermuteAndBatchToSpaceAsDepthToSpace</div><div class="ttdef"><b>Definition:</b> <a href="_permute_and_batch_to_space_as_depth_to_space_8hpp_source.xhtml#l00102">PermuteAndBatchToSpaceAsDepthToSpace.hpp:102</a></div></div>
+<div class="ttc" id="namespacearmnn_1_1optimizations_xhtml_aafc70d5af99400ff5ea7991825658b2f"><div class="ttname"><a href="namespacearmnn_1_1optimizations.xhtml#aafc70d5af99400ff5ea7991825658b2f">armnn::optimizations::MovePermuteUp</a></div><div class="ttdeci">OptimizeForConnection&lt; Layer, PermuteLayer, MovePermuteUpImpl &gt; MovePermuteUp</div><div class="ttdef"><b>Definition:</b> <a href="_move_permute_up_8hpp_source.xhtml#l00077">MovePermuteUp.hpp:77</a></div></div>
+<div class="ttc" id="namespacearmnn_1_1optimizations_xhtml_a226cef3d775179e25ee35d231f4e8fae"><div class="ttname"><a href="namespacearmnn_1_1optimizations.xhtml#a226cef3d775179e25ee35d231f4e8fae">armnn::optimizations::ConvertConstantsFloatToHalf</a></div><div class="ttdeci">ConvertConstants&lt; Float32ToFloat16, IsFloat16Layer &gt; ConvertConstantsFloatToHalf</div><div class="ttdef"><b>Definition:</b> <a href="_convert_constants_8hpp_source.xhtml#l00153">ConvertConstants.hpp:153</a></div></div>
+<div class="ttc" id="namespacearmnn_1_1optimizations_xhtml_ad1aaeee71293f34d9f65d2dd2792830d"><div class="ttname"><a href="namespacearmnn_1_1optimizations.xhtml#ad1aaeee71293f34d9f65d2dd2792830d">armnn::optimizations::TransposeAsReshape</a></div><div class="ttdeci">OptimizeForType&lt; TransposeLayer, TransposeAsReshapeImpl &gt; TransposeAsReshape</div><div class="ttdef"><b>Definition:</b> <a href="_transpose_as_reshape_8hpp_source.xhtml#l00077">TransposeAsReshape.hpp:77</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a9f31d956861d8277fa5f8fb877dbbb6c"><div class="ttname"><a href="namespacearmnn.xhtml#a9f31d956861d8277fa5f8fb877dbbb6c">armnn::ApplyBackendOptimizations</a></div><div class="ttdeci">OptimizationResult ApplyBackendOptimizations(OptimizedNetworkImpl *optNetObjPtr, BackendSettings &amp;backendSettings, BackendsMap &amp;backends, const ModelOptions &amp;modelOptions, Optional&lt; std::vector&lt; std::string &gt; &amp;&gt; errMessages)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.xhtml#l01155">Network.cpp:1155</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a674efcf6cbdb9e831d653ff0e821fb38"><div class="ttname"><a href="namespacearmnn.xhtml#a674efcf6cbdb9e831d653ff0e821fb38">armnn::IOptimizedNetworkPtr</a></div><div class="ttdeci">std::unique_ptr&lt; IOptimizedNetwork, void(*)(IOptimizedNetwork *network)&gt; IOptimizedNetworkPtr</div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00242">INetwork.hpp:242</a></div></div>
+<div class="ttc" id="namespacearmnn_1_1optimizations_xhtml_ae0b1382e3af141896a46531c50e8863f"><div class="ttname"><a href="namespacearmnn_1_1optimizations.xhtml#ae0b1382e3af141896a46531c50e8863f">armnn::optimizations::PermuteAsReshape</a></div><div class="ttdeci">OptimizeForType&lt; PermuteLayer, PermuteAsReshapeImpl &gt; PermuteAsReshape</div><div class="ttdef"><b>Definition:</b> <a href="_permute_as_reshape_8hpp_source.xhtml#l00066">PermuteAsReshape.hpp:66</a></div></div>
+<div class="ttc" id="namespacearmnn_1_1optimizations_xhtml_aba7b0ca6192b8b58ecd517a82b4f378e"><div class="ttname"><a href="namespacearmnn_1_1optimizations.xhtml#aba7b0ca6192b8b58ecd517a82b4f378e">armnn::optimizations::SquashEqualTransposeSiblings</a></div><div class="ttdeci">OptimizeForConnection&lt; Layer, TransposeLayer, SquashEqualSiblingsImpl&lt; TransposeLayer &gt; &gt; SquashEqualTransposeSiblings</div><div class="ttdef"><b>Definition:</b> <a href="_squash_equal_siblings_8hpp_source.xhtml#l00069">SquashEqualSiblings.hpp:69</a></div></div>
+<div class="ttc" id="namespacearmnn_1_1optimizations_xhtml_a06cac66872538895dd6b59cdf39173d2"><div class="ttname"><a href="namespacearmnn_1_1optimizations.xhtml#a06cac66872538895dd6b59cdf39173d2">armnn::optimizations::ConvertConstantsHalfToFloat</a></div><div class="ttdeci">ConvertConstants&lt; Float16ToFloat32, IsFloat32Layer &gt; ConvertConstantsHalfToFloat</div><div class="ttdef"><b>Definition:</b> <a href="_convert_constants_8hpp_source.xhtml#l00152">ConvertConstants.hpp:152</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a1ec6b4c20ed294a96cf94c33c24caaf5"><div class="ttname"><a href="namespacearmnn.xhtml#a1ec6b4c20ed294a96cf94c33c24caaf5">armnn::CreateSupportedBackends</a></div><div class="ttdeci">BackendsMap CreateSupportedBackends(TensorHandleFactoryRegistry &amp;handleFactoryRegistry, BackendSettings &amp;backendSettings)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.xhtml#l01136">Network.cpp:1136</a></div></div>
+<div class="ttc" id="namespacearmnn_1_1optimizations_xhtml_ae1509d340bc981b11101c3316ee8afd6"><div class="ttname"><a href="namespacearmnn_1_1optimizations.xhtml#ae1509d340bc981b11101c3316ee8afd6">armnn::optimizations::OptimizeInverseConversionsFp32</a></div><div class="ttdeci">OptimizeForConnection&lt; ConvertFp32ToFp16Layer, ConvertFp16ToFp32Layer, OptimizeInverseConversionsImpl &gt; OptimizeInverseConversionsFp32</div><div class="ttdef"><b>Definition:</b> <a href="_optimize_inverse_conversions_8hpp_source.xhtml#l00044">OptimizeInverseConversions.hpp:44</a></div></div>
+<div class="ttc" id="namespacearmnn_1_1optimizations_xhtml_a279d0a7c56966cea334303d48a874964"><div class="ttname"><a href="namespacearmnn_1_1optimizations.xhtml#a279d0a7c56966cea334303d48a874964">armnn::optimizations::FoldPadIntoPooling2d</a></div><div class="ttdeci">OptimizeForExclusiveConnection&lt; PadLayer, Pooling2dLayer, pad_fold::FoldPadIntoPooling2dImpl &gt; FoldPadIntoPooling2d</div><div class="ttdef"><b>Definition:</b> <a href="_fold_pad_into_layer2d_8hpp_source.xhtml#l00239">FoldPadIntoLayer2d.hpp:239</a></div></div>
+<div class="ttc" id="namespacearmnn_1_1optimizations_xhtml_a86d19da62b6cfed3928f6fe7026f22fa"><div class="ttname"><a href="namespacearmnn_1_1optimizations.xhtml#a86d19da62b6cfed3928f6fe7026f22fa">armnn::optimizations::Fp32NetworkToFp16Converter</a></div><div class="ttdeci">OptimizeForType&lt; Layer, ConvertFp32NetworkToFp16Impl &gt; Fp32NetworkToFp16Converter</div><div class="ttdef"><b>Definition:</b> <a href="_convert_fp32_network_to_fp16_8hpp_source.xhtml#l00087">ConvertFp32NetworkToFp16.hpp:87</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a86541d11fcad5246a78cbc21d637a504"><div class="ttname"><a href="namespacearmnn.xhtml#a86541d11fcad5246a78cbc21d637a504">armnn::SelectTensorHandleStrategy</a></div><div class="ttdeci">OptimizationResult SelectTensorHandleStrategy(Graph &amp;optGraph, BackendsMap &amp;backends, TensorHandleFactoryRegistry &amp;registry, bool importEnabled, Optional&lt; std::vector&lt; std::string &gt; &amp;&gt; errMessages)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.xhtml#l01611">Network.cpp:1611</a></div></div>
+<div class="ttc" id="namespacearmnn_1_1optimizations_xhtml_a4fc55afb4885278ad1510b2c4307af76"><div class="ttname"><a href="namespacearmnn_1_1optimizations.xhtml#a4fc55afb4885278ad1510b2c4307af76">armnn::optimizations::AddBroadcastReshapeLayer</a></div><div class="ttdeci">OptimizeForType&lt; Layer, AddBroadcastReshapeLayerImpl &gt; AddBroadcastReshapeLayer</div><div class="ttdef"><b>Definition:</b> <a href="_add_broadcast_reshape_layer_8hpp_source.xhtml#l00094">AddBroadcastReshapeLayer.hpp:94</a></div></div>
+<div class="ttc" id="namespacearmnn_1_1optimizations_xhtml_aeb70f8fcf5180bdd5c94be7bb2f9d176"><div class="ttname"><a href="namespacearmnn_1_1optimizations.xhtml#aeb70f8fcf5180bdd5c94be7bb2f9d176">armnn::optimizations::Fp32NetworkToBf16Converter</a></div><div class="ttdeci">OptimizeForType&lt; Layer, ConvertFp32NetworkToBf16Impl &gt; Fp32NetworkToBf16Converter</div><div class="ttdef"><b>Definition:</b> <a href="_convert_fp32_network_to_bf16_8hpp_source.xhtml#l00076">ConvertFp32NetworkToBf16.hpp:76</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a48e4d70ae8893f6f1a8ebfced5b03a07"><div class="ttname"><a href="namespacearmnn.xhtml#a48e4d70ae8893f6f1a8ebfced5b03a07">armnn::AssignBackends</a></div><div class="ttdeci">OptimizationResult AssignBackends(OptimizedNetworkImpl *optNetObjPtr, BackendSettings &amp;backendSettings, SubgraphView &amp;subgraph, Optional&lt; std::vector&lt; std::string &gt; &amp;&gt; errMessages)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.xhtml#l01122">Network.cpp:1122</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a9173495a61a0092b5f38b855f02c3585"><div class="ttname"><a href="namespacearmnn.xhtml#a9173495a61a0092b5f38b855f02c3585">armnn::BackendsMap</a></div><div class="ttdeci">std::map&lt; BackendId, std::unique_ptr&lt; class IBackendInternal &gt; &gt; BackendsMap</div><div class="ttdef"><b>Definition:</b> <a href="_network_8hpp_source.xhtml#l00287">Network.hpp:287</a></div></div>
+<div class="ttc" id="namespacearmnn_1_1optimizations_xhtml_ae896e4c42865d1bc9cc7c55e1ee24090"><div class="ttname"><a href="namespacearmnn_1_1optimizations.xhtml#ae896e4c42865d1bc9cc7c55e1ee24090">armnn::optimizations::RedirectMembersToConstantInputs</a></div><div class="ttdeci">OptimizeForType&lt; FullyConnectedLayer, RedirectMembersToConstantInputsImpl &gt; RedirectMembersToConstantInputs</div><div class="ttdef"><b>Definition:</b> <a href="_redirect_members_to_constant_inputs_8hpp_source.xhtml#l00083">RedirectMembersToConstantInputs.hpp:83</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a3c62b52d21e28088f040a4b6c2a06022"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3c62b52d21e28088f040a4b6c2a06022">&#9670;&nbsp;</a></span>Pad()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Pad </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>inputInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>outputInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> *&#160;</td>
+ <td class="paramname"><em>inputHandle</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> *&#160;</td>
+ <td class="paramname"><em>outputHandle</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_pad_queue_descriptor.xhtml">PadQueueDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>data</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="backends_2reference_2workloads_2_pad_8cpp_source.xhtml#l00039">39</a> of file <a class="el" href="backends_2reference_2workloads_2_pad_8cpp_source.xhtml">Pad.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Decoder&lt; IType &gt;::Get()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00174">TensorShape::GetNumDimensions()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00196">TensorInfo::GetNumElements()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01170">PadDescriptor::m_PadList</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01173">PadDescriptor::m_PadValue</a>, <a class="el" href="include_2armnn_2backends_2_workload_data_8hpp_source.xhtml#l00054">QueueDescriptorWithParameters&lt; LayerDescriptor &gt;::m_Parameters</a>, <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml#a9afbc055a017adf1bc38ee137bca6e90">ITensorHandle::Map()</a>, and <a class="el" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_test_name_and_descriptor_layer_visitor_8cpp_source.xhtml#l00274">TEST_SUITE()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;{</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keyword">auto</span> padList = data.m_Parameters.m_PadList;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keyword">auto</span> padValue = data.m_Parameters.m_PadValue;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numOutputElements = outputInfo.GetNumElements();</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; TensorShape outputShape = outputInfo.GetShape();</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; TensorShape inputShape = inputInfo.GetShape();</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numInputDimensions = inputShape.GetNumDimensions();</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="preprocessor">#ifndef NDEBUG</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numOutputDimensions = outputShape.GetNumDimensions();</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; assert(numInputDimensions == numOutputDimensions);</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputBatches = 0;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputChannels = 0;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputHeight = 0;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputWidth = 0;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputChannels = 0;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputHeight = 0;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputWidth = 0;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keyword">auto</span> inputData = MakeDecoder&lt;float&gt;(inputInfo, inputHandle-&gt;Map());</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keyword">auto</span> outData = MakeEncoder&lt;float&gt;(outputInfo, outputHandle-&gt;Map());</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="comment">// Fill the output tensor with Pad value first</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">if</span> (outputInfo.IsQuantized())</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; {</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="comment">// For Quantized types Pad Value should not be quantized with scale and offset of the tensor info</span></div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keyword">auto</span> temporaryInfo = TensorInfo(outputInfo.GetShape(), outputInfo.GetDataType(), 1.0f, 0);</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keyword">auto</span> outputData = MakeEncoder&lt;float&gt;(temporaryInfo, outputHandle-&gt;Map());</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; FillOutputWithPadValue(*outputData, padValue, numOutputElements);</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; }</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; {</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; FillOutputWithPadValue(*outData, padValue, numOutputElements);</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; }</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; Decoder&lt;float&gt;&amp; input = *inputData;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; Encoder&lt;float&gt;&amp; output = *outData;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordflow">switch</span>(numInputDimensions) {</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordflow">case</span> 1:</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; inputWidth = inputShape[0];</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> w = 0; w &lt; inputWidth ; w++)</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; {</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; input[w];</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keyword">auto</span> inputValue = input.Get();</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keyword">auto</span> outputIndex = w + std::get&lt;0&gt;(padList[0]);</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; output[outputIndex];</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; output.Set(inputValue);</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; }</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordflow">case</span> 2 :</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; inputHeight = inputShape[0];</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; inputWidth = inputShape[1];</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; outputWidth = outputShape[1];</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> h = 0; h &lt; inputHeight; h++)</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; {</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> w = 0; w &lt; inputWidth ; w++)</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; {</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; input[h * inputWidth + w];</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keyword">auto</span> inputValue = input.Get();</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keyword">auto</span> outputIndex = (h + std::get&lt;0&gt;(padList[0])) * outputWidth + (w + std::get&lt;0&gt;(padList[1]));</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; output[outputIndex];</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; output.Set(inputValue);</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; }</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; }</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordflow">case</span> 3 :</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; inputChannels = inputShape[0];</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; inputHeight = inputShape[1];</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; inputWidth = inputShape[2];</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; outputHeight = outputShape[1];</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; outputWidth = outputShape[2];</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> c = 0; c &lt; inputChannels; c++)</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; {</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> h = 0; h &lt; inputHeight; h++)</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; {</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> w = 0; w &lt; inputWidth ; w++)</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; {</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; input[c * inputHeight * inputWidth + h * inputWidth + w];</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keyword">auto</span> inputValue = input.Get();</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keyword">auto</span> outputIndex = (c + std::get&lt;0&gt;(padList[0])) * outputHeight * outputWidth</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; + (h + std::get&lt;0&gt;(padList[1])) * outputWidth</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; + (w + std::get&lt;0&gt;(padList[2]));</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; output[outputIndex];</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; output.Set(inputValue);</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; }</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; }</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; }</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keywordflow">case</span> 4 :</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; inputBatches = inputShape[0];</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; inputChannels = inputShape[1];</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; inputHeight = inputShape[2];</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; inputWidth = inputShape[3];</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; outputChannels = outputShape[1];</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; outputHeight = outputShape[2];</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; outputWidth = outputShape[3];</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> b = 0; b &lt; inputBatches; b++)</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; {</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> c = 0; c &lt; inputChannels; c++)</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; {</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> h = 0; h &lt; inputHeight; h++)</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; {</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> w = 0; w &lt; inputWidth ; w++)</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; {</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; input[b * inputChannels * inputHeight * inputWidth</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; + c * inputHeight * inputWidth</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; + h * inputWidth</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; + w];</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keyword">auto</span> inputValue = input.Get();</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keyword">auto</span> outputIndex = (b + std::get&lt;0&gt;(padList[0]))</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; * outputChannels * outputHeight * outputWidth</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; + (c + std::get&lt;0&gt;(padList[1])) * outputHeight * outputWidth</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; + (h + std::get&lt;0&gt;(padList[2])) * outputWidth</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; + (w + std::get&lt;0&gt;(padList[3]));</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; output[outputIndex];</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; output.Set(inputValue);</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; }</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; }</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; }</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; }</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; default :</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; }</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="af464d406b22309a891ed0aa3008a7953"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af464d406b22309a891ed0aa3008a7953">&#9670;&nbsp;</a></span>ParseBoolean()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::ParseBoolean </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_options_1_1_var.xhtml">BackendOptions::Var</a> &amp;&#160;</td>
+ <td class="paramname"><em>value</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">bool&#160;</td>
+ <td class="paramname"><em>defaultValue</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_backend_context_8cpp_source.xhtml#l00097">97</a> of file <a class="el" href="_cl_backend_context_8cpp_source.xhtml">ClBackendContext.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_backend_options_8hpp_source.xhtml#l00119">BackendOptions::Var::AsBool()</a>, and <a class="el" href="_backend_options_8hpp_source.xhtml#l00112">BackendOptions::Var::IsBool()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;{</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordflow">if</span> (value.IsBool())</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; {</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">return</span> value.AsBool();</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; }</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordflow">return</span> defaultValue;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="abe4073b0af144421b53828ef752e4ee3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abe4073b0af144421b53828ef752e4ee3">&#9670;&nbsp;</a></span>ParseBooleanBackendOption()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::ParseBooleanBackendOption </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_options_1_1_var.xhtml">armnn::BackendOptions::Var</a> &amp;&#160;</td>
+ <td class="paramname"><em>value</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">bool&#160;</td>
+ <td class="paramname"><em>defaultValue</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_backend_options_8hpp_source.xhtml#l00312">312</a> of file <a class="el" href="_backend_options_8hpp_source.xhtml">BackendOptions.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_backend_options_8hpp_source.xhtml#l00119">BackendOptions::Var::AsBool()</a>, and <a class="el" href="_backend_options_8hpp_source.xhtml#l00112">BackendOptions::Var::IsBool()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160;{</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="keywordflow">if</span> (value.<a class="code" href="classarmnn_1_1_backend_options_1_1_var.xhtml#aec3bdef27fa2d4de29db82d2334ad2d8">IsBool</a>())</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; {</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keywordflow">return</span> value.<a class="code" href="classarmnn_1_1_backend_options_1_1_var.xhtml#ac488187ef67bf8905cbe686daab95183">AsBool</a>();</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; }</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="keywordflow">return</span> defaultValue;</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_backend_options_1_1_var_xhtml_ac488187ef67bf8905cbe686daab95183"><div class="ttname"><a href="classarmnn_1_1_backend_options_1_1_var.xhtml#ac488187ef67bf8905cbe686daab95183">armnn::BackendOptions::Var::AsBool</a></div><div class="ttdeci">bool AsBool() const</div><div class="ttdoc">Value getters. </div><div class="ttdef"><b>Definition:</b> <a href="_backend_options_8hpp_source.xhtml#l00119">BackendOptions.hpp:119</a></div></div>
+<div class="ttc" id="classarmnn_1_1_backend_options_1_1_var_xhtml_aec3bdef27fa2d4de29db82d2334ad2d8"><div class="ttname"><a href="classarmnn_1_1_backend_options_1_1_var.xhtml#aec3bdef27fa2d4de29db82d2334ad2d8">armnn::BackendOptions::Var::IsBool</a></div><div class="ttdeci">bool IsBool() const</div><div class="ttdoc">Type getters. </div><div class="ttdef"><b>Definition:</b> <a href="_backend_options_8hpp_source.xhtml#l00112">BackendOptions.hpp:112</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a65645fa03bf8cddfb9d8a9f83beeb6e8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a65645fa03bf8cddfb9d8a9f83beeb6e8">&#9670;&nbsp;</a></span>ParseComputeDevice()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456ae">armnn::Compute</a> armnn::ParseComputeDevice </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>str</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated function that will be removed together with the Compute enum. </p>
+
+<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00182">182</a> of file <a class="el" href="_types_utils_8hpp_source.xhtml">TypesUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea39f8662ca778258e9c6a14f26fec5ec1">CpuAcc</a>, <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64">CpuRef</a>, <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeafaa4524e3df19ada32643ce9a222362b">GpuAcc</a>, <a class="el" href="_types_utils_8hpp_source.xhtml#l00170">StrEqual()</a>, and <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_inference_test_8hpp_source.xhtml#l00023">operator&gt;&gt;()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;{</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.xhtml#a637fea04314a9870c1dc4355c1bed429">armnn::StrEqual</a>(str, <span class="stringliteral">&quot;CpuAcc&quot;</span>))</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; {</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea39f8662ca778258e9c6a14f26fec5ec1">armnn::Compute::CpuAcc</a>;</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; }</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.xhtml#a637fea04314a9870c1dc4355c1bed429">armnn::StrEqual</a>(str, <span class="stringliteral">&quot;CpuRef&quot;</span>))</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; {</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64">armnn::Compute::CpuRef</a>;</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; }</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.xhtml#a637fea04314a9870c1dc4355c1bed429">armnn::StrEqual</a>(str, <span class="stringliteral">&quot;GpuAcc&quot;</span>))</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; {</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeafaa4524e3df19ada32643ce9a222362b">armnn::Compute::GpuAcc</a>;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; }</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; {</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">armnn::Compute::Undefined</a>;</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; }</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64"><div class="ttname"><a href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64">armnn::Compute::CpuRef</a></div><div class="ttdoc">CPU Execution: Reference C++ kernels. </div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a637fea04314a9870c1dc4355c1bed429"><div class="ttname"><a href="namespacearmnn.xhtml#a637fea04314a9870c1dc4355c1bed429">armnn::StrEqual</a></div><div class="ttdeci">constexpr bool StrEqual(const char *strA, const char(&amp;strB)[N])</div><div class="ttdef"><b>Definition:</b> <a href="_types_utils_8hpp_source.xhtml#l00170">TypesUtils.hpp:170</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360"><div class="ttname"><a href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">armnn::Compute::Undefined</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ae2f04a162585c0a5222a537efd5456aeafaa4524e3df19ada32643ce9a222362b"><div class="ttname"><a href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeafaa4524e3df19ada32643ce9a222362b">armnn::Compute::GpuAcc</a></div><div class="ttdoc">GPU Execution: OpenCL: ArmCompute. </div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ae2f04a162585c0a5222a537efd5456aea39f8662ca778258e9c6a14f26fec5ec1"><div class="ttname"><a href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea39f8662ca778258e9c6a14f26fec5ec1">armnn::Compute::CpuAcc</a></div><div class="ttdoc">CPU Execution: NEON: ArmCompute. </div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a4e9a59f936f3d2050a17597d22825f53"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4e9a59f936f3d2050a17597d22825f53">&#9670;&nbsp;</a></span>ParseFile()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::string armnn::ParseFile </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_options_1_1_var.xhtml">BackendOptions::Var</a> &amp;&#160;</td>
+ <td class="paramname"><em>value</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::string&#160;</td>
+ <td class="paramname"><em>defaultValue</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_backend_context_8cpp_source.xhtml#l00106">106</a> of file <a class="el" href="_cl_backend_context_8cpp_source.xhtml">ClBackendContext.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_backend_options_8hpp_source.xhtml#l00123">BackendOptions::Var::AsString()</a>, and <a class="el" href="_backend_options_8hpp_source.xhtml#l00116">BackendOptions::Var::IsString()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_backend_context_8cpp_source.xhtml#l00140">ClBackendContext::ClBackendContext()</a>, and <a class="el" href="_cl_backend_model_context_8cpp_source.xhtml#l00034">ClBackendModelContext::ClBackendModelContext()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;{</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">if</span> (value.IsString())</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; {</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordflow">return</span> value.AsString();</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; }</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordflow">return</span> defaultValue;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a884361aad1fe11d630c8588cba16c6f1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a884361aad1fe11d630c8588cba16c6f1">&#9670;&nbsp;</a></span>ParseIntBackendOption()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">int armnn::ParseIntBackendOption </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_options_1_1_var.xhtml">armnn::BackendOptions::Var</a> &amp;&#160;</td>
+ <td class="paramname"><em>value</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>defaultValue</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_backend_options_8hpp_source.xhtml#l00330">330</a> of file <a class="el" href="_backend_options_8hpp_source.xhtml">BackendOptions.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_backend_options_8hpp_source.xhtml#l00120">BackendOptions::Var::AsInt()</a>, and <a class="el" href="_backend_options_8hpp_source.xhtml#l00113">BackendOptions::Var::IsInt()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_backend_model_context_8cpp_source.xhtml#l00034">ClBackendModelContext::ClBackendModelContext()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160;{</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="keywordflow">if</span> (value.<a class="code" href="classarmnn_1_1_backend_options_1_1_var.xhtml#aba7f9d096eda6d34bc0c668ee44dd665">IsInt</a>())</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; {</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="keywordflow">return</span> value.<a class="code" href="classarmnn_1_1_backend_options_1_1_var.xhtml#ad0c302a166dc669426251446bca2748a">AsInt</a>();</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; }</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keywordflow">return</span> defaultValue;</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_backend_options_1_1_var_xhtml_aba7f9d096eda6d34bc0c668ee44dd665"><div class="ttname"><a href="classarmnn_1_1_backend_options_1_1_var.xhtml#aba7f9d096eda6d34bc0c668ee44dd665">armnn::BackendOptions::Var::IsInt</a></div><div class="ttdeci">bool IsInt() const</div><div class="ttdef"><b>Definition:</b> <a href="_backend_options_8hpp_source.xhtml#l00113">BackendOptions.hpp:113</a></div></div>
+<div class="ttc" id="classarmnn_1_1_backend_options_1_1_var_xhtml_ad0c302a166dc669426251446bca2748a"><div class="ttname"><a href="classarmnn_1_1_backend_options_1_1_var.xhtml#ad0c302a166dc669426251446bca2748a">armnn::BackendOptions::Var::AsInt</a></div><div class="ttdeci">int AsInt() const</div><div class="ttdef"><b>Definition:</b> <a href="_backend_options_8hpp_source.xhtml#l00120">BackendOptions.hpp:120</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="af457790132251cde6545072d879c7684"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af457790132251cde6545072d879c7684">&#9670;&nbsp;</a></span>ParseOptions()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void armnn::ParseOptions </td>
+ <td>(</td>
+ <td class="paramtype">const std::vector&lt; <a class="el" href="structarmnn_1_1_backend_options.xhtml">BackendOptions</a> &gt; &amp;&#160;</td>
+ <td class="paramname"><em>options</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_backend_id.xhtml">BackendId</a>&#160;</td>
+ <td class="paramname"><em>backend</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">F&#160;</td>
+ <td class="paramname"><em>f</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_backend_options_8hpp_source.xhtml#l00297">297</a> of file <a class="el" href="_backend_options_8hpp_source.xhtml">BackendOptions.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_backend_options_8hpp_source.xhtml#l00251">BackendOptions::BackendOption::GetName()</a>, and <a class="el" href="_backend_options_8hpp_source.xhtml#l00252">BackendOptions::BackendOption::GetValue()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_backend_context_8cpp_source.xhtml#l00140">ClBackendContext::ClBackendContext()</a>, <a class="el" href="_cl_backend_model_context_8cpp_source.xhtml#l00034">ClBackendModelContext::ClBackendModelContext()</a>, <a class="el" href="_neon_backend_model_context_8cpp_source.xhtml#l00034">NeonBackendModelContext::NeonBackendModelContext()</a>, and <a class="el" href="_runtime_8cpp_source.xhtml#l00297">RuntimeImpl::RuntimeImpl()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160;{</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> optionsGroup : options)</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; {</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="keywordflow">if</span> (optionsGroup.GetBackendId() == backend)</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; {</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i=0; i &lt; optionsGroup.GetOptionCount(); i++)</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; {</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keyword">const</span> BackendOptions::BackendOption option = optionsGroup.GetOption(i);</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; f(option.GetName(), option.GetValue());</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; }</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; }</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; }</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a79a7e943477406c7211f8800e24e5074"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a79a7e943477406c7211f8800e24e5074">&#9670;&nbsp;</a></span>ParseStringBackendOption()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::string armnn::ParseStringBackendOption </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_options_1_1_var.xhtml">armnn::BackendOptions::Var</a> &amp;&#160;</td>
+ <td class="paramname"><em>value</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::string&#160;</td>
+ <td class="paramname"><em>defaultValue</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_backend_options_8hpp_source.xhtml#l00321">321</a> of file <a class="el" href="_backend_options_8hpp_source.xhtml">BackendOptions.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_backend_options_8hpp_source.xhtml#l00123">BackendOptions::Var::AsString()</a>, and <a class="el" href="_backend_options_8hpp_source.xhtml#l00116">BackendOptions::Var::IsString()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160;{</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keywordflow">if</span> (value.<a class="code" href="classarmnn_1_1_backend_options_1_1_var.xhtml#a7c412f98489e7d252ef40ed053a3908c">IsString</a>())</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; {</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="keywordflow">return</span> value.<a class="code" href="classarmnn_1_1_backend_options_1_1_var.xhtml#a5e3562cda960da001597e7dd5679b140">AsString</a>();</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; }</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <span class="keywordflow">return</span> defaultValue;</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_backend_options_1_1_var_xhtml_a7c412f98489e7d252ef40ed053a3908c"><div class="ttname"><a href="classarmnn_1_1_backend_options_1_1_var.xhtml#a7c412f98489e7d252ef40ed053a3908c">armnn::BackendOptions::Var::IsString</a></div><div class="ttdeci">bool IsString() const</div><div class="ttdef"><b>Definition:</b> <a href="_backend_options_8hpp_source.xhtml#l00116">BackendOptions.hpp:116</a></div></div>
+<div class="ttc" id="classarmnn_1_1_backend_options_1_1_var_xhtml_a5e3562cda960da001597e7dd5679b140"><div class="ttname"><a href="classarmnn_1_1_backend_options_1_1_var.xhtml#a5e3562cda960da001597e7dd5679b140">armnn::BackendOptions::Var::AsString</a></div><div class="ttdeci">std::string AsString() const</div><div class="ttdef"><b>Definition:</b> <a href="_backend_options_8hpp_source.xhtml#l00123">BackendOptions.hpp:123</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a3ca05ac77af0a0444ff34c1319094f6d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3ca05ac77af0a0444ff34c1319094f6d">&#9670;&nbsp;</a></span>ParseTuningLevel()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn.xhtml#a707090747256af276c389e0cf1cb0a9a">TuningLevel</a> armnn::ParseTuningLevel </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_backend_options_1_1_var.xhtml">BackendOptions::Var</a> &amp;&#160;</td>
+ <td class="paramname"><em>value</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#a707090747256af276c389e0cf1cb0a9a">TuningLevel</a>&#160;</td>
+ <td class="paramname"><em>defaultValue</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_backend_context_8cpp_source.xhtml#l00079">79</a> of file <a class="el" href="_cl_backend_context_8cpp_source.xhtml">ClBackendContext.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_logging_8hpp_source.xhtml#l00205">ARMNN_LOG</a>, <a class="el" href="_backend_options_8hpp_source.xhtml#l00120">BackendOptions::Var::AsInt()</a>, <a class="el" href="namespacearmnn.xhtml#a707090747256af276c389e0cf1cb0a9aafaf34f09ea1e93bfbf591e19dc0dfb9f">Exhaustive</a>, <a class="el" href="_backend_options_8hpp_source.xhtml#l00113">BackendOptions::Var::IsInt()</a>, <a class="el" href="namespacearmnn.xhtml#a707090747256af276c389e0cf1cb0a9aa6adf97f83acf6453d4a6a4b1070f3754">None</a>, and <a class="el" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407a7b83d3f08fa392b79e3f553b585971cd">warning</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_backend_context_8cpp_source.xhtml#l00140">ClBackendContext::ClBackendContext()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;{</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordflow">if</span> (value.IsInt())</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; {</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordtype">int</span> v = value.AsInt();</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">if</span> (v &gt; static_cast&lt;int&gt;(TuningLevel::Exhaustive) ||</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; v &lt; static_cast&lt;int&gt;(TuningLevel::None))</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; {</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(warning) &lt;&lt; <span class="stringliteral">&quot;Invalid GpuAcc tuning level (&quot;</span>&lt;&lt; v &lt;&lt; <span class="stringliteral">&quot;) selected. &quot;</span></div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="stringliteral">&quot;Using default(&quot;</span> &lt;&lt; <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(defaultValue) &lt;&lt; <span class="stringliteral">&quot;)&quot;</span>;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; } <span class="keywordflow">else</span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; {</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><a class="code" href="namespacearmnn.xhtml#a707090747256af276c389e0cf1cb0a9a">TuningLevel</a><span class="keyword">&gt;</span>(v);</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; }</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; }</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordflow">return</span> defaultValue;</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;}</div><div class="ttc" id="_logging_8hpp_xhtml_a7b6ad073975f437ec38ca7d20154727f"><div class="ttname"><a href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a></div><div class="ttdeci">#define ARMNN_LOG(severity)</div><div class="ttdef"><b>Definition:</b> <a href="_logging_8hpp_source.xhtml#l00205">Logging.hpp:205</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a707090747256af276c389e0cf1cb0a9a"><div class="ttname"><a href="namespacearmnn.xhtml#a707090747256af276c389e0cf1cb0a9a">armnn::TuningLevel</a></div><div class="ttdeci">TuningLevel</div><div class="ttdef"><b>Definition:</b> <a href="_cl_backend_context_8cpp_source.xhtml#l00070">ClBackendContext.cpp:70</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="aafe6180ef80d9f334f3a3ba9cc0db35d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aafe6180ef80d9f334f3a3ba9cc0db35d">&#9670;&nbsp;</a></span>PermuteTensor()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classarmnn_1_1_const_tensor.xhtml">armnn::ConstTensor</a> PermuteTensor </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_const_tensor_handle.xhtml">ConstTensorHandle</a> *&#160;</td>
+ <td class="paramname"><em>tensor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_permutation_vector.xhtml">PermutationVector</a> &amp;&#160;</td>
+ <td class="paramname"><em>permutationVector</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void *&#160;</td>
+ <td class="paramname"><em>permuteBuffer</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_workload_utils_8cpp_source.xhtml#l00017">17</a> of file <a class="el" href="_workload_utils_8cpp_source.xhtml">WorkloadUtils.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00015">ARMNN_ASSERT_MSG</a>, <a class="el" href="include_2armnn_2backends_2_tensor_handle_8hpp_source.xhtml#l00028">ConstTensorHandle::GetConstTensor()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00198">TensorInfo::GetDataType()</a>, <a class="el" href="_types_utils_8hpp_source.xhtml#l00151">GetDataTypeSize()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00429">TensorInfo::GetNumBytes()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</a>, <a class="el" href="_types_8hpp_source.xhtml#l00325">PermutationVector::GetSize()</a>, <a class="el" href="include_2armnn_2backends_2_tensor_handle_8hpp_source.xhtml#l00040">ConstTensorHandle::GetTensorInfo()</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4afa662c6eb71caef475b2b981ce8eccd7">Permute</a>, <a class="el" href="_permute_8cpp_source.xhtml#l00098">armnnUtils::Permuted()</a>, and <a class="el" href="_tensor_8cpp_source.xhtml#l00516">TensorInfo::SetConstant()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_workload_utils_8cpp_source.xhtml#l00138">Convert1HWOTensorToAcl()</a>, <a class="el" href="_workload_utils_8cpp_source.xhtml#l00198">Convert1HWOtoMIHW()</a>, <a class="el" href="_workload_utils_8cpp_source.xhtml#l00227">ConvertWeightTensorFromArmnnToAcl()</a>, and <a class="el" href="_workload_utils_8hpp_source.xhtml#l00189">GatherTensorHandlePairs()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;{</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(tensor, <span class="stringliteral">&quot;Invalid input tensor&quot;</span>);</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(permuteBuffer, <span class="stringliteral">&quot;Invalid permute buffer&quot;</span>);</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; TensorInfo tensorInfo = tensor-&gt;GetTensorInfo();</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keywordflow">if</span> (permutationVector.GetSize() &gt; 0)</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; {</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; tensorInfo = <a class="code" href="namespacearmnn_utils.xhtml#abeaf4f6785039866fd075f4569ba8e84">armnnUtils::Permuted</a>(tensorInfo, permutationVector);</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <a class="code" href="namespacearmnn_utils.xhtml#af3c74017185773dd61d8ca6662d65d43">armnnUtils::Permute</a>(tensorInfo.GetShape(), permutationVector,</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; tensor-&gt;GetConstTensor&lt;<span class="keywordtype">void</span>&gt;(), permuteBuffer,</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <a class="code" href="namespacearmnn.xhtml#aa02b9e06fb20fa3c13da0427e6ee5ab2">GetDataTypeSize</a>(tensorInfo.GetDataType()));</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; }</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; {</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; ::memcpy(permuteBuffer, tensor-&gt;GetConstTensor&lt;<span class="keywordtype">void</span>&gt;(), tensorInfo.GetNumBytes());</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; }</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; tensorInfo.SetConstant(<span class="keyword">true</span>);</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">return</span> ConstTensor(tensorInfo, permuteBuffer);</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;}</div><div class="ttc" id="namespacearmnn_utils_xhtml_af3c74017185773dd61d8ca6662d65d43"><div class="ttname"><a href="namespacearmnn_utils.xhtml#af3c74017185773dd61d8ca6662d65d43">armnnUtils::Permute</a></div><div class="ttdeci">void Permute(const armnn::TensorShape &amp;dstShape, const armnn::PermutationVector &amp;mappings, const void *src, void *dst, size_t dataTypeSize)</div><div class="ttdef"><b>Definition:</b> <a href="_permute_8cpp_source.xhtml#l00131">Permute.cpp:131</a></div></div>
+<div class="ttc" id="_assert_8hpp_xhtml_a91c4dfde57907d7698c7531785690a7f"><div class="ttname"><a href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a></div><div class="ttdeci">#define ARMNN_ASSERT_MSG(COND, MSG)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00015">Assert.hpp:15</a></div></div>
+<div class="ttc" id="namespacearmnn_utils_xhtml_abeaf4f6785039866fd075f4569ba8e84"><div class="ttname"><a href="namespacearmnn_utils.xhtml#abeaf4f6785039866fd075f4569ba8e84">armnnUtils::Permuted</a></div><div class="ttdeci">armnn::TensorShape Permuted(const armnn::TensorShape &amp;srcShape, const armnn::PermutationVector &amp;mappings)</div><div class="ttdef"><b>Definition:</b> <a href="_permute_8cpp_source.xhtml#l00098">Permute.cpp:98</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_aa02b9e06fb20fa3c13da0427e6ee5ab2"><div class="ttname"><a href="namespacearmnn.xhtml#aa02b9e06fb20fa3c13da0427e6ee5ab2">armnn::GetDataTypeSize</a></div><div class="ttdeci">constexpr unsigned int GetDataTypeSize(DataType dataType)</div><div class="ttdef"><b>Definition:</b> <a href="_types_utils_8hpp_source.xhtml#l00151">TypesUtils.hpp:151</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="aa4e89c644c511e255f6a7ecbd5d14686"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa4e89c644c511e255f6a7ecbd5d14686">&#9670;&nbsp;</a></span>PolymorphicDowncast()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">DestType armnn::PolymorphicDowncast </td>
+ <td>(</td>
+ <td class="paramtype">SourceType *&#160;</td>
+ <td class="paramname"><em>value</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Polymorphic downcast for build in pointers only. </p>
+<p>Usage: Child* pChild = PolymorphicDowncast&lt;Child*&gt;(pBase);</p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">DestType</td><td>Pointer type to the target object (Child pointer type) </td></tr>
+ <tr><td class="paramname">SourceType</td><td>Pointer type to the source object (Base pointer type) </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">value</td><td>Pointer to the source object </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Pointer of type DestType (Pointer of type child) </dd></dl>
+
+<p class="definition">Definition at line <a class="el" href="_polymorphic_downcast_8hpp_source.xhtml#l00074">74</a> of file <a class="el" href="_polymorphic_downcast_8hpp_source.xhtml">PolymorphicDowncast.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_polymorphic_downcast_8hpp_source.xhtml#l00027">ARMNN_POLYMORPHIC_CAST_CHECK</a>.</p>
+<div class="fragment"><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;{</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; static_assert(std::is_pointer&lt;DestType&gt;::value,</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="stringliteral">&quot;PolymorphicDowncast only works with pointer types.&quot;</span>);</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <a class="code" href="_polymorphic_downcast_8hpp.xhtml#a816fdb1ce84860c918a1915b3ea23459">ARMNN_POLYMORPHIC_CAST_CHECK</a>(dynamic_cast&lt;DestType&gt;(value) == value);</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>DestType<span class="keyword">&gt;</span>(value);</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;}</div><div class="ttc" id="_polymorphic_downcast_8hpp_xhtml_a816fdb1ce84860c918a1915b3ea23459"><div class="ttname"><a href="_polymorphic_downcast_8hpp.xhtml#a816fdb1ce84860c918a1915b3ea23459">ARMNN_POLYMORPHIC_CAST_CHECK</a></div><div class="ttdeci">#define ARMNN_POLYMORPHIC_CAST_CHECK(cond)</div><div class="ttdef"><b>Definition:</b> <a href="_polymorphic_downcast_8hpp_source.xhtml#l00027">PolymorphicDowncast.hpp:27</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a6baab222db3195a0bd77f488a81fd316"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6baab222db3195a0bd77f488a81fd316">&#9670;&nbsp;</a></span>PolymorphicPointerDowncast()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">auto armnn::PolymorphicPointerDowncast </td>
+ <td>(</td>
+ <td class="paramtype">const SourceType &amp;&#160;</td>
+ <td class="paramname"><em>value</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Polymorphic downcast for shared pointers and build in pointers. </p>
+<p>Usage: auto pChild = PolymorphicPointerDowncast&lt;Child&gt;(pBase)</p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">DestType</td><td>Type of the target object (Child type) </td></tr>
+ <tr><td class="paramname">SourceType</td><td>Pointer type to the source object (Base (shared) pointer type) </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">value</td><td>Pointer to the source object </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Pointer of type DestType ((Shared) pointer of type child) </dd></dl>
+
+<p class="definition">Definition at line <a class="el" href="_polymorphic_downcast_8hpp_source.xhtml#l00093">93</a> of file <a class="el" href="_polymorphic_downcast_8hpp_source.xhtml">PolymorphicDowncast.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_polymorphic_downcast_8hpp_source.xhtml#l00027">ARMNN_POLYMORPHIC_CAST_CHECK</a>.</p>
+<div class="fragment"><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;{</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <a class="code" href="_polymorphic_downcast_8hpp.xhtml#a816fdb1ce84860c918a1915b3ea23459">ARMNN_POLYMORPHIC_CAST_CHECK</a>(utility::DynamicPointerCast&lt;DestType&gt;(value)</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; == value);</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">return</span> utility::StaticPointerCast&lt;DestType&gt;(value);</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;}</div><div class="ttc" id="_polymorphic_downcast_8hpp_xhtml_a816fdb1ce84860c918a1915b3ea23459"><div class="ttname"><a href="_polymorphic_downcast_8hpp.xhtml#a816fdb1ce84860c918a1915b3ea23459">ARMNN_POLYMORPHIC_CAST_CHECK</a></div><div class="ttdeci">#define ARMNN_POLYMORPHIC_CAST_CHECK(cond)</div><div class="ttdef"><b>Definition:</b> <a href="_polymorphic_downcast_8hpp_source.xhtml#l00027">PolymorphicDowncast.hpp:27</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ae2e93e304cf516841c521e3eaee025cd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae2e93e304cf516841c521e3eaee025cd">&#9670;&nbsp;</a></span>Pooling2d()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Pooling2d </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>rInputDecoder</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>rOutputEncoder</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>inputInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>outputInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_pooling2d_descriptor.xhtml">Pooling2dDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>params</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Computes the Pooling2d operation. </p>
+
+<p class="definition">Definition at line <a class="el" href="_pooling2d_8cpp_source.xhtml#l00142">142</a> of file <a class="el" href="_pooling2d_8cpp_source.xhtml">Pooling2d.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="classarmnn_1_1_decoder.xhtml#aafe0168dd5ece89e7c62e8d83a4e57cd">Decoder&lt; IType &gt;::DecodeTensor()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00023">DataLayoutIndexed::GetChannelsIndex()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00022">DataLayoutIndexed::GetDataLayout()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00024">DataLayoutIndexed::GetHeightIndex()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00025">DataLayoutIndexed::GetWidthIndex()</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00388">Pooling2dDescriptor::m_DataLayout</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00374">Pooling2dDescriptor::m_PadBottom</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00386">Pooling2dDescriptor::m_PaddingMethod</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00368">Pooling2dDescriptor::m_PadLeft</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00370">Pooling2dDescriptor::m_PadRight</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00372">Pooling2dDescriptor::m_PadTop</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00378">Pooling2dDescriptor::m_PoolHeight</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00366">Pooling2dDescriptor::m_PoolType</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00376">Pooling2dDescriptor::m_PoolWidth</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00380">Pooling2dDescriptor::m_StrideX</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00382">Pooling2dDescriptor::m_StrideY</a>, <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">NHWC</a>, <a class="el" href="_numeric_cast_8hpp_source.xhtml#l00035">numeric_cast()</a>, <a class="el" href="_pooling2d_8cpp_source.xhtml#l00142">Pooling2d()</a>, and <a class="el" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_pooling2d_8cpp_source.xhtml#l00142">Pooling2d()</a>, <a class="el" href="_pooling2d_layer_8cpp_source.xhtml#l00022">Pooling2dLayer::Pooling2dLayer()</a>, and <a class="el" href="_test_name_and_descriptor_layer_visitor_8cpp_source.xhtml#l00274">TEST_SUITE()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;{</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml">DataLayoutIndexed</a> dataLayout(params.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a>);</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keyword">auto</span> channelsIndex = dataLayout.GetChannelsIndex();</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keyword">auto</span> heightIndex = dataLayout.GetHeightIndex();</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keyword">auto</span> widthIndex = dataLayout.GetWidthIndex();</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> batchSize = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">int</span>&gt;(outputInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[0]);</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> channels = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">int</span>&gt;(outputInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[channelsIndex]);</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> heightOutput = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">int</span>&gt;(outputInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[heightIndex]);</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> widthOutput = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">int</span>&gt;(outputInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[widthIndex]);</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> heightInput = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">int</span>&gt;(inputInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[heightIndex]);</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> widthInput = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">int</span>&gt;(inputInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[widthIndex]);</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> padLeft = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">int</span>&gt;(params.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#ac18546ebbebbb32fe0a03baa9bf2c600">m_PadLeft</a>);</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> padRight = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">int</span>&gt;(params.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a002bc30e590d78cbb4f4d12171055ca7">m_PadRight</a>);</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> padTop = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">int</span>&gt;(params.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a56b51f56cef50cdfa554258eecdab046">m_PadTop</a>);</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> padBottom = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">int</span>&gt;(params.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#aa9e49717ebdb741e8c767741647fc618">m_PadBottom</a>);</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> strideX = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">int</span>&gt;(params.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">m_StrideX</a>);</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> strideY = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">int</span>&gt;(params.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a>);</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> poolHeight = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">int</span>&gt;(params.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a5699e8606c37d18c03910b242cd1b010">m_PoolHeight</a>);</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> poolWidth = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">int</span>&gt;(params.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a6d8fb685cc1ff224f25aa127fcf62c86">m_PoolWidth</a>);</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordtype">float</span> defaultInitializer = DefaultInitializer(params.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a0031997bf43bd2747656c31e4977793a">m_PoolType</a>);</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; Accumulator accumulate = GetAccumulator(params.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a0031997bf43bd2747656c31e4977793a">m_PoolType</a>);</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; Executor execute = GetExecutor(params.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a0031997bf43bd2747656c31e4977793a">m_PoolType</a>);</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="comment">// Check supported padding methods outside the loop to simplify</span></div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="comment">// the inner loop.</span></div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="keywordflow">if</span> (params.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a8c29d6ea9b4186d69aad5961c910939c">m_PaddingMethod</a> != PaddingMethod::Exclude &amp;&amp;</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; params.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a8c29d6ea9b4186d69aad5961c910939c">m_PaddingMethod</a> != PaddingMethod::IgnoreValue)</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; {</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>(<span class="stringliteral">&quot;Unsupported padding type&quot;</span>);</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; }</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keyword">const</span> std::vector&lt;float&gt; decodedInputVec = rInputDecoder.<a class="code" href="classarmnn_1_1_decoder.xhtml#aafe0168dd5ece89e7c62e8d83a4e57cd">DecodeTensor</a>(inputInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>());</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160;</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> n = 0; n &lt; batchSize; n++)</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; {</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> c = 0; c &lt; channels; c++)</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; {</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> yOutput = 0; yOutput &lt; heightOutput; yOutput++)</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; {</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="comment">// Calculate values independent of the x axis</span></div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keywordtype">int</span> hstart = (yOutput * strideY) - padTop;</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keywordtype">int</span> hend = hstart + poolHeight;</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="comment">// Clamp the pooling region inside the valid input area (which includes the padding).</span></div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="comment">// This is necessary because the final pooling in a row may overlap beyond the padding.</span></div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; hend = std::min(hend, heightInput + padBottom);</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160;</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keywordtype">int</span> height = hend - hstart;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keywordtype">bool</span> hclamped = ClampRange(hstart, hend, heightInput);</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> xOutput = 0; xOutput &lt; widthOutput; xOutput++)</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; {</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="keywordtype">int</span> wstart = (xOutput * strideX) - padLeft;</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keywordtype">int</span> wend = wstart + poolWidth;</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="comment">// Clamp the pooling region inside the valid input area (which includes the padding).</span></div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="comment">// This is necessary because the final pooling in a row may overlap beyond the padding.</span></div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; wend = std::min(wend, widthInput + padRight);</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="keywordtype">float</span> result = defaultInitializer;</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keywordtype">float</span> poolAreaSize = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">float</span>&gt;(height * (wend - wstart));</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160;</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="comment">// Special case: when the pooling kernel is over a padding region and the padding</span></div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="comment">// size is larger or equal to the kernel and the kernel only covers</span></div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="comment">// padding and no real values, then we initialize the result as zero</span></div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="comment">// by convention. This is because we need to choose a value here and</span></div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="comment">// all values we have are padding, which we ignore.</span></div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="keywordflow">if</span> (OnPaddingOnly(hstart, hend, heightInput) ||</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; OnPaddingOnly(wstart, wend, widthInput))</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; {</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; result = 0.0f;</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160;</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keywordtype">int</span> outputIndex;</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="keywordflow">if</span>(dataLayout.GetDataLayout() == DataLayout::NHWC)</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; {</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; outputIndex = n * heightOutput * widthOutput * channels +</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; yOutput * widthOutput * channels +</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; xOutput * channels +</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; c;</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; }</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; {</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; outputIndex = n * heightOutput * widthOutput * channels +</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; c * heightOutput * widthOutput +</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; yOutput * widthOutput +</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; xOutput;</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; }</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160;</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; rOutputEncoder[<span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(outputIndex)];</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; rOutputEncoder.<a class="code" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Set</a>(result);</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; }</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keywordtype">bool</span> clamped = hclamped |= ClampRange(wstart, wend, widthInput);</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordflow">if</span> (clamped &amp;&amp; params.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a8c29d6ea9b4186d69aad5961c910939c">m_PaddingMethod</a> == PaddingMethod::Exclude)</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; {</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="comment">// When we exclude the padding, it means we calculate with a smaller</span></div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="comment">// kernel size, so I changed the divisor here.</span></div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; poolAreaSize = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">float</span>&gt;((hend - hstart) * (wend - wstart));</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; }</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160;</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> yInput = hstart; yInput &lt; hend; yInput++)</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; {</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> xInput = wstart; xInput &lt; wend; xInput++)</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; {</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="keywordtype">int</span> inputIndex;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keywordflow">if</span>(dataLayout.GetDataLayout() == DataLayout::NHWC)</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; {</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; inputIndex = n * heightInput * widthInput * channels +</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; yInput * widthInput * channels +</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; xInput * channels +</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; c;</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160;</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; }</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; {</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; inputIndex = n * heightInput * widthInput * channels +</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; c * heightInput * widthInput +</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; yInput * widthInput +</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; xInput;</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; }</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160;</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; accumulate(result, decodedInputVec[static_cast&lt;unsigned int&gt;(inputIndex)]);</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; }</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; }</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160;</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; execute(result, poolAreaSize);</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160;</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keywordtype">int</span> outputIndex;</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160;</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keywordflow">if</span>(dataLayout.GetDataLayout() == DataLayout::NHWC)</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; {</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; outputIndex = n * heightOutput * widthOutput * channels +</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; yOutput * widthOutput * channels +</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; xOutput * channels +</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; c;</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; }</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; {</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; outputIndex = n * heightOutput * widthOutput * channels +</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; c * heightOutput * widthOutput +</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; yOutput * widthOutput +</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; xOutput;</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; }</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160;</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; rOutputEncoder[<span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(outputIndex)];</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; rOutputEncoder.<a class="code" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Set</a>(result);</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; }</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; }</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; }</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; }</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160;}</div><div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_aa9e49717ebdb741e8c767741647fc618"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#aa9e49717ebdb741e8c767741647fc618">armnn::Pooling2dDescriptor::m_PadBottom</a></div><div class="ttdeci">uint32_t m_PadBottom</div><div class="ttdoc">Padding bottom value in the height dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00374">Descriptors.hpp:374</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a8b5d0f8a24e9d9238f412260a552acf8"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">armnn::TensorInfo::GetShape</a></div><div class="ttdeci">const TensorShape &amp; GetShape() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00191">Tensor.hpp:191</a></div></div>
+<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_ac18546ebbebbb32fe0a03baa9bf2c600"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#ac18546ebbebbb32fe0a03baa9bf2c600">armnn::Pooling2dDescriptor::m_PadLeft</a></div><div class="ttdeci">uint32_t m_PadLeft</div><div class="ttdoc">Padding left value in the width dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00368">Descriptors.hpp:368</a></div></div>
+<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_a6d8fb685cc1ff224f25aa127fcf62c86"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#a6d8fb685cc1ff224f25aa127fcf62c86">armnn::Pooling2dDescriptor::m_PoolWidth</a></div><div class="ttdeci">uint32_t m_PoolWidth</div><div class="ttdoc">Pooling width value. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00376">Descriptors.hpp:376</a></div></div>
+<div class="ttc" id="classarmnn_1_1_decoder_xhtml_aafe0168dd5ece89e7c62e8d83a4e57cd"><div class="ttname"><a href="classarmnn_1_1_decoder.xhtml#aafe0168dd5ece89e7c62e8d83a4e57cd">armnn::Decoder::DecodeTensor</a></div><div class="ttdeci">virtual std::vector&lt; float &gt; DecodeTensor(const TensorShape &amp;tensorShape, bool isDepthwise=false)=0</div></div>
+<div class="ttc" id="classarmnn_1_1_encoder_xhtml_ae3b62b846a9c239f332830b9e36030eb"><div class="ttname"><a href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">armnn::Encoder::Set</a></div><div class="ttdeci">virtual void Set(IType right)=0</div></div>
+<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_a8c29d6ea9b4186d69aad5961c910939c"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#a8c29d6ea9b4186d69aad5961c910939c">armnn::Pooling2dDescriptor::m_PaddingMethod</a></div><div class="ttdeci">PaddingMethod m_PaddingMethod</div><div class="ttdoc">The padding method to be used. (Exclude, IgnoreValue). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00386">Descriptors.hpp:386</a></div></div>
+<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_a56b51f56cef50cdfa554258eecdab046"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#a56b51f56cef50cdfa554258eecdab046">armnn::Pooling2dDescriptor::m_PadTop</a></div><div class="ttdeci">uint32_t m_PadTop</div><div class="ttdoc">Padding top value in the height dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00372">Descriptors.hpp:372</a></div></div>
+<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_afe6a3377c4531315354def9023c8fdda"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">armnn::Pooling2dDescriptor::m_StrideX</a></div><div class="ttdeci">uint32_t m_StrideX</div><div class="ttdoc">Stride value when proceeding through input for the width dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00380">Descriptors.hpp:380</a></div></div>
+<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_a5699e8606c37d18c03910b242cd1b010"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#a5699e8606c37d18c03910b242cd1b010">armnn::Pooling2dDescriptor::m_PoolHeight</a></div><div class="ttdeci">uint32_t m_PoolHeight</div><div class="ttdoc">Pooling height value. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00378">Descriptors.hpp:378</a></div></div>
+<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_a002bc30e590d78cbb4f4d12171055ca7"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#a002bc30e590d78cbb4f4d12171055ca7">armnn::Pooling2dDescriptor::m_PadRight</a></div><div class="ttdeci">uint32_t m_PadRight</div><div class="ttdoc">Padding right value in the width dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00370">Descriptors.hpp:370</a></div></div>
+<div class="ttc" id="classarmnn_utils_1_1_data_layout_indexed_xhtml"><div class="ttname"><a href="classarmnn_utils_1_1_data_layout_indexed.xhtml">armnnUtils::DataLayoutIndexed</a></div><div class="ttdoc">Provides access to the appropriate indexes for Channels, Height and Width based on DataLayout...</div><div class="ttdef"><b>Definition:</b> <a href="_data_layout_indexed_8hpp_source.xhtml#l00017">DataLayoutIndexed.hpp:17</a></div></div>
+<div class="ttc" id="classarmnn_1_1_invalid_argument_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00080">Exceptions.hpp:80</a></div></div>
+<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_a6089e1ca91914015777ea780a513131a"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">armnn::Pooling2dDescriptor::m_DataLayout</a></div><div class="ttdeci">DataLayout m_DataLayout</div><div class="ttdoc">The data layout to be used (NCHW, NHWC). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00388">Descriptors.hpp:388</a></div></div>
+<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_a0031997bf43bd2747656c31e4977793a"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#a0031997bf43bd2747656c31e4977793a">armnn::Pooling2dDescriptor::m_PoolType</a></div><div class="ttdeci">PoolingAlgorithm m_PoolType</div><div class="ttdoc">The pooling algorithm to use (Max. Average, L2). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00366">Descriptors.hpp:366</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a375ca3cff9f1b005d1412dc5f3cf5b6e"><div class="ttname"><a href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a></div><div class="ttdeci">std::enable_if_t&lt; std::is_unsigned&lt; Source &gt;::value &amp;&amp;std::is_unsigned&lt; Dest &gt;::value, Dest &gt; numeric_cast(Source source)</div><div class="ttdef"><b>Definition:</b> <a href="_numeric_cast_8hpp_source.xhtml#l00035">NumericCast.hpp:35</a></div></div>
+<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_ac1fe174bbadfb39a2b636940c2e647c8"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">armnn::Pooling2dDescriptor::m_StrideY</a></div><div class="ttdeci">uint32_t m_StrideY</div><div class="ttdoc">Stride value when proceeding through input for the height dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00382">Descriptors.hpp:382</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a69acbef24cd1cc572b93fc3e1e6ac030"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a69acbef24cd1cc572b93fc3e1e6ac030">&#9670;&nbsp;</a></span>Pooling3d()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Pooling3d </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>rInputDecoder</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>rOutputEncoder</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>inputInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>outputInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_pooling3d_descriptor.xhtml">Pooling3dDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>params</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Computes the Pooling3d operation. </p>
+
+<p class="definition">Definition at line <a class="el" href="_pooling3d_8cpp_source.xhtml#l00172">172</a> of file <a class="el" href="_pooling3d_8cpp_source.xhtml">Pooling3d.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="classarmnn_1_1_decoder.xhtml#aafe0168dd5ece89e7c62e8d83a4e57cd">Decoder&lt; IType &gt;::DecodeTensor()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00023">DataLayoutIndexed::GetChannelsIndex()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00026">DataLayoutIndexed::GetDepthIndex()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00024">DataLayoutIndexed::GetHeightIndex()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00025">DataLayoutIndexed::GetWidthIndex()</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00464">Pooling3dDescriptor::m_DataLayout</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00446">Pooling3dDescriptor::m_PadBack</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00442">Pooling3dDescriptor::m_PadBottom</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00462">Pooling3dDescriptor::m_PaddingMethod</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00444">Pooling3dDescriptor::m_PadFront</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00436">Pooling3dDescriptor::m_PadLeft</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00438">Pooling3dDescriptor::m_PadRight</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00440">Pooling3dDescriptor::m_PadTop</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00452">Pooling3dDescriptor::m_PoolDepth</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00450">Pooling3dDescriptor::m_PoolHeight</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00434">Pooling3dDescriptor::m_PoolType</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00448">Pooling3dDescriptor::m_PoolWidth</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00454">Pooling3dDescriptor::m_StrideX</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00456">Pooling3dDescriptor::m_StrideY</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00458">Pooling3dDescriptor::m_StrideZ</a>, <a class="el" href="_numeric_cast_8hpp_source.xhtml#l00035">numeric_cast()</a>, <a class="el" href="_pooling3d_8cpp_source.xhtml#l00172">Pooling3d()</a>, and <a class="el" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_pooling3d_8cpp_source.xhtml#l00172">Pooling3d()</a>, and <a class="el" href="_pooling3d_layer_8cpp_source.xhtml#l00022">Pooling3dLayer::Pooling3dLayer()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160;{</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml">DataLayoutIndexed</a> dataLayout(params.<a class="code" href="structarmnn_1_1_pooling3d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a>);</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="keyword">auto</span> channelsIndex = dataLayout.GetChannelsIndex();</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keyword">auto</span> depthIndex = dataLayout.GetDepthIndex();</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keyword">auto</span> heightIndex = dataLayout.GetHeightIndex();</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="keyword">auto</span> widthIndex = dataLayout.GetWidthIndex();</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> batchSize = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">int</span>&gt;(outputInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[0]);</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> channels = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">int</span>&gt;(outputInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[channelsIndex]);</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> depthOutput = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">int</span>&gt;(outputInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[depthIndex]);</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> heightOutput = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">int</span>&gt;(outputInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[heightIndex]);</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> widthOutput = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">int</span>&gt;(outputInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[widthIndex]);</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> depthInput = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">int</span>&gt;(inputInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[depthIndex]);</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> heightInput = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">int</span>&gt;(inputInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[heightIndex]);</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> widthInput = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">int</span>&gt;(inputInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[widthIndex]);</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> padLeft = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">int</span>&gt;(params.<a class="code" href="structarmnn_1_1_pooling3d_descriptor.xhtml#ac18546ebbebbb32fe0a03baa9bf2c600">m_PadLeft</a>);</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> padRight = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">int</span>&gt;(params.<a class="code" href="structarmnn_1_1_pooling3d_descriptor.xhtml#a002bc30e590d78cbb4f4d12171055ca7">m_PadRight</a>);</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> padTop = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">int</span>&gt;(params.<a class="code" href="structarmnn_1_1_pooling3d_descriptor.xhtml#a56b51f56cef50cdfa554258eecdab046">m_PadTop</a>);</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> padBottom = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">int</span>&gt;(params.<a class="code" href="structarmnn_1_1_pooling3d_descriptor.xhtml#aa9e49717ebdb741e8c767741647fc618">m_PadBottom</a>);</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> padFront = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">int</span>&gt;(params.<a class="code" href="structarmnn_1_1_pooling3d_descriptor.xhtml#a83ca447892f460dabaa2f87d3dc3db61">m_PadFront</a>);</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> padBack = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">int</span>&gt;(params.<a class="code" href="structarmnn_1_1_pooling3d_descriptor.xhtml#a11d5c25face9b54e90f79ee8bdc1d0fb">m_PadBack</a>);</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> strideX = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">int</span>&gt;(params.<a class="code" href="structarmnn_1_1_pooling3d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">m_StrideX</a>);</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> strideY = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">int</span>&gt;(params.<a class="code" href="structarmnn_1_1_pooling3d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a>);</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> strideZ = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">int</span>&gt;(params.<a class="code" href="structarmnn_1_1_pooling3d_descriptor.xhtml#a5164336f6a1b15be0d434a6bbf7289da">m_StrideZ</a>);</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> poolHeight = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">int</span>&gt;(params.<a class="code" href="structarmnn_1_1_pooling3d_descriptor.xhtml#a5699e8606c37d18c03910b242cd1b010">m_PoolHeight</a>);</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> poolWidth = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">int</span>&gt;(params.<a class="code" href="structarmnn_1_1_pooling3d_descriptor.xhtml#a6d8fb685cc1ff224f25aa127fcf62c86">m_PoolWidth</a>);</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> poolDepth = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">int</span>&gt;(params.<a class="code" href="structarmnn_1_1_pooling3d_descriptor.xhtml#acc978b36fd5d949bc781d7638e6e08b9">m_PoolDepth</a>);</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160;</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keywordtype">float</span> defaultInitializer = DefaultInitializer(params.<a class="code" href="structarmnn_1_1_pooling3d_descriptor.xhtml#a0031997bf43bd2747656c31e4977793a">m_PoolType</a>);</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; Accumulator accumulate = GetAccumulator(params.<a class="code" href="structarmnn_1_1_pooling3d_descriptor.xhtml#a0031997bf43bd2747656c31e4977793a">m_PoolType</a>);</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; Executor execute = GetExecutor(params.<a class="code" href="structarmnn_1_1_pooling3d_descriptor.xhtml#a0031997bf43bd2747656c31e4977793a">m_PoolType</a>);</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160;</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="comment">// Check supported padding methods outside the loop to simplify</span></div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="comment">// the inner loop.</span></div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="keywordflow">if</span> (params.<a class="code" href="structarmnn_1_1_pooling3d_descriptor.xhtml#a8c29d6ea9b4186d69aad5961c910939c">m_PaddingMethod</a> != PaddingMethod::Exclude &amp;&amp;</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; params.<a class="code" href="structarmnn_1_1_pooling3d_descriptor.xhtml#a8c29d6ea9b4186d69aad5961c910939c">m_PaddingMethod</a> != PaddingMethod::IgnoreValue)</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; {</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>(<span class="stringliteral">&quot;Unsupported padding type&quot;</span>);</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; }</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keyword">const</span> std::vector&lt;float&gt; decodedInputVec = rInputDecoder.<a class="code" href="classarmnn_1_1_decoder.xhtml#aafe0168dd5ece89e7c62e8d83a4e57cd">DecodeTensor</a>(inputInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>());</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160;</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> n = 0; n &lt; batchSize; n++)</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; {</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> c = 0; c &lt; channels; c++)</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; {</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> zOutput = 0; zOutput &lt; depthOutput; zOutput++)</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; {</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="comment">// Calculate values independent of the x and y axis</span></div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="keywordtype">int</span> dstart = (zOutput * strideZ) - padFront;</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keywordtype">int</span> dend = dstart + poolDepth;</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="comment">// Clamp the pooling region inside the valid input area (which includes the padding).</span></div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="comment">// This is necessary because the final pooling in a row may overlap beyond the padding.</span></div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; dend = std::min(dend, depthInput + padBack);</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keywordtype">int</span> depth = dend - dstart;</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="keywordtype">bool</span> dclamped = ClampRange(dstart, dend, depthInput);</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="keywordtype">int</span> depthClamped = dend - dstart;</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> yOutput = 0; yOutput &lt; heightOutput; yOutput++)</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; {</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordtype">int</span> hstart = (yOutput * strideY) - padTop;</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keywordtype">int</span> hend = hstart + poolHeight;</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="comment">// Clamp the pooling region inside the valid input area (which includes the padding).</span></div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="comment">// This is necessary because the final pooling in a row may overlap beyond the padding.</span></div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; hend = std::min(hend, heightInput + padBottom);</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160;</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="keywordtype">int</span> height = hend - hstart;</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="keywordtype">bool</span> hclamped = ClampRange(hstart, hend, heightInput);</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="keywordtype">int</span> heightClamped = hend - hstart;</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160;</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> xOutput = 0; xOutput &lt; widthOutput; xOutput++)</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; {</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="keywordtype">int</span> wstart = (xOutput * strideX) - padLeft;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keywordtype">int</span> wend = wstart + poolWidth;</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="comment">// Clamp the pooling region inside the valid input area (which includes the padding).</span></div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="comment">// This is necessary because the final pooling in a row may overlap beyond the padding.</span></div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; wend = std::min(wend, widthInput + padRight);</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160;</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keywordtype">int</span> width = wend - wstart;</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="keywordtype">bool</span> wclamped = ClampRange(wstart, wend, widthInput);</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="keywordtype">int</span> widthClamped = wend - wstart;</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <span class="keywordtype">float</span> result = defaultInitializer;</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keywordtype">float</span> poolAreaSize = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">float</span>&gt;(depth * height * width);</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="comment">// Special case: when the pooling kernel is over a padding region and the padding</span></div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="comment">// size is larger or equal to the kernel and the kernel only covers</span></div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="comment">// padding and no real values, then we initialize the result as zero</span></div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="comment">// by convention. This is because we need to choose a value here and</span></div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="comment">// all values we have are padding, which we ignore.</span></div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keywordflow">if</span> (OnPaddingOnly(dstart, dend, depthInput) ||</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; OnPaddingOnly(hstart, hend, heightInput) ||</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; OnPaddingOnly(wstart, wend, widthInput))</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; {</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; result = 0.0f;</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160;</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="keywordtype">int</span> outputIndex = CalculateIndex(channels, depthOutput, heightOutput, widthOutput,</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; n, c, zOutput, yOutput, xOutput, dataLayout);</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160;</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; rOutputEncoder[<span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(outputIndex)];</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; rOutputEncoder.<a class="code" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Set</a>(result);</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160;</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; }</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160;</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="keywordtype">bool</span> clamped = (dclamped | hclamped | wclamped);</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160;</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="keywordflow">if</span> (clamped &amp;&amp; params.<a class="code" href="structarmnn_1_1_pooling3d_descriptor.xhtml#a8c29d6ea9b4186d69aad5961c910939c">m_PaddingMethod</a> == PaddingMethod::Exclude)</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; {</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="comment">// When we exclude the padding, it means we calculate with a smaller</span></div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="comment">// kernel size, so I changed the divisor here.</span></div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; poolAreaSize = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">float</span>&gt;(depthClamped * heightClamped * widthClamped);</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; }</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160;</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> zInput = dstart; zInput &lt; dend; zInput++)</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; {</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> yInput = hstart; yInput &lt; hend; yInput++)</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; {</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> xInput = wstart; xInput &lt; wend; xInput++)</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; {</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160;</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keywordtype">int</span> inputIndex = CalculateIndex(channels, depthInput, heightInput, widthInput,</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; n, c, zInput, yInput, xInput, dataLayout);</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; accumulate(result, decodedInputVec[static_cast&lt;unsigned int&gt;(inputIndex)]);</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; }</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; }</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; }</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160;</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; execute(result, poolAreaSize);</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160;</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keywordtype">int</span> outputIndex = CalculateIndex(channels, depthOutput, heightOutput, widthOutput,</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; n, c, zOutput, yOutput, xOutput, dataLayout);</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160;</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; rOutputEncoder[<span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(outputIndex)];</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; rOutputEncoder.<a class="code" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Set</a>(result);</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; }</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; }</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; }</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; }</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; }</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160;}</div><div class="ttc" id="structarmnn_1_1_pooling3d_descriptor_xhtml_a0031997bf43bd2747656c31e4977793a"><div class="ttname"><a href="structarmnn_1_1_pooling3d_descriptor.xhtml#a0031997bf43bd2747656c31e4977793a">armnn::Pooling3dDescriptor::m_PoolType</a></div><div class="ttdeci">PoolingAlgorithm m_PoolType</div><div class="ttdoc">The pooling algorithm to use (Max. Average, L2). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00434">Descriptors.hpp:434</a></div></div>
+<div class="ttc" id="structarmnn_1_1_pooling3d_descriptor_xhtml_ac1fe174bbadfb39a2b636940c2e647c8"><div class="ttname"><a href="structarmnn_1_1_pooling3d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">armnn::Pooling3dDescriptor::m_StrideY</a></div><div class="ttdeci">uint32_t m_StrideY</div><div class="ttdoc">Stride value when proceeding through input for the height dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00456">Descriptors.hpp:456</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a8b5d0f8a24e9d9238f412260a552acf8"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">armnn::TensorInfo::GetShape</a></div><div class="ttdeci">const TensorShape &amp; GetShape() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00191">Tensor.hpp:191</a></div></div>
+<div class="ttc" id="structarmnn_1_1_pooling3d_descriptor_xhtml_a6d8fb685cc1ff224f25aa127fcf62c86"><div class="ttname"><a href="structarmnn_1_1_pooling3d_descriptor.xhtml#a6d8fb685cc1ff224f25aa127fcf62c86">armnn::Pooling3dDescriptor::m_PoolWidth</a></div><div class="ttdeci">uint32_t m_PoolWidth</div><div class="ttdoc">Pooling width value. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00448">Descriptors.hpp:448</a></div></div>
+<div class="ttc" id="structarmnn_1_1_pooling3d_descriptor_xhtml_acc978b36fd5d949bc781d7638e6e08b9"><div class="ttname"><a href="structarmnn_1_1_pooling3d_descriptor.xhtml#acc978b36fd5d949bc781d7638e6e08b9">armnn::Pooling3dDescriptor::m_PoolDepth</a></div><div class="ttdeci">uint32_t m_PoolDepth</div><div class="ttdoc">Pooling depth value. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00452">Descriptors.hpp:452</a></div></div>
+<div class="ttc" id="classarmnn_1_1_decoder_xhtml_aafe0168dd5ece89e7c62e8d83a4e57cd"><div class="ttname"><a href="classarmnn_1_1_decoder.xhtml#aafe0168dd5ece89e7c62e8d83a4e57cd">armnn::Decoder::DecodeTensor</a></div><div class="ttdeci">virtual std::vector&lt; float &gt; DecodeTensor(const TensorShape &amp;tensorShape, bool isDepthwise=false)=0</div></div>
+<div class="ttc" id="classarmnn_1_1_encoder_xhtml_ae3b62b846a9c239f332830b9e36030eb"><div class="ttname"><a href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">armnn::Encoder::Set</a></div><div class="ttdeci">virtual void Set(IType right)=0</div></div>
+<div class="ttc" id="structarmnn_1_1_pooling3d_descriptor_xhtml_a002bc30e590d78cbb4f4d12171055ca7"><div class="ttname"><a href="structarmnn_1_1_pooling3d_descriptor.xhtml#a002bc30e590d78cbb4f4d12171055ca7">armnn::Pooling3dDescriptor::m_PadRight</a></div><div class="ttdeci">uint32_t m_PadRight</div><div class="ttdoc">Padding right value in the width dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00438">Descriptors.hpp:438</a></div></div>
+<div class="ttc" id="structarmnn_1_1_pooling3d_descriptor_xhtml_a6089e1ca91914015777ea780a513131a"><div class="ttname"><a href="structarmnn_1_1_pooling3d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">armnn::Pooling3dDescriptor::m_DataLayout</a></div><div class="ttdeci">DataLayout m_DataLayout</div><div class="ttdoc">The data layout to be used (NCDHW, NDHWC). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00464">Descriptors.hpp:464</a></div></div>
+<div class="ttc" id="structarmnn_1_1_pooling3d_descriptor_xhtml_a83ca447892f460dabaa2f87d3dc3db61"><div class="ttname"><a href="structarmnn_1_1_pooling3d_descriptor.xhtml#a83ca447892f460dabaa2f87d3dc3db61">armnn::Pooling3dDescriptor::m_PadFront</a></div><div class="ttdeci">uint32_t m_PadFront</div><div class="ttdoc">Padding front value in the depth dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00444">Descriptors.hpp:444</a></div></div>
+<div class="ttc" id="structarmnn_1_1_pooling3d_descriptor_xhtml_a5699e8606c37d18c03910b242cd1b010"><div class="ttname"><a href="structarmnn_1_1_pooling3d_descriptor.xhtml#a5699e8606c37d18c03910b242cd1b010">armnn::Pooling3dDescriptor::m_PoolHeight</a></div><div class="ttdeci">uint32_t m_PoolHeight</div><div class="ttdoc">Pooling height value. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00450">Descriptors.hpp:450</a></div></div>
+<div class="ttc" id="structarmnn_1_1_pooling3d_descriptor_xhtml_a11d5c25face9b54e90f79ee8bdc1d0fb"><div class="ttname"><a href="structarmnn_1_1_pooling3d_descriptor.xhtml#a11d5c25face9b54e90f79ee8bdc1d0fb">armnn::Pooling3dDescriptor::m_PadBack</a></div><div class="ttdeci">uint32_t m_PadBack</div><div class="ttdoc">Padding back value in the depth dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00446">Descriptors.hpp:446</a></div></div>
+<div class="ttc" id="classarmnn_utils_1_1_data_layout_indexed_xhtml"><div class="ttname"><a href="classarmnn_utils_1_1_data_layout_indexed.xhtml">armnnUtils::DataLayoutIndexed</a></div><div class="ttdoc">Provides access to the appropriate indexes for Channels, Height and Width based on DataLayout...</div><div class="ttdef"><b>Definition:</b> <a href="_data_layout_indexed_8hpp_source.xhtml#l00017">DataLayoutIndexed.hpp:17</a></div></div>
+<div class="ttc" id="structarmnn_1_1_pooling3d_descriptor_xhtml_aa9e49717ebdb741e8c767741647fc618"><div class="ttname"><a href="structarmnn_1_1_pooling3d_descriptor.xhtml#aa9e49717ebdb741e8c767741647fc618">armnn::Pooling3dDescriptor::m_PadBottom</a></div><div class="ttdeci">uint32_t m_PadBottom</div><div class="ttdoc">Padding bottom value in the height dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00442">Descriptors.hpp:442</a></div></div>
+<div class="ttc" id="classarmnn_1_1_invalid_argument_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00080">Exceptions.hpp:80</a></div></div>
+<div class="ttc" id="structarmnn_1_1_pooling3d_descriptor_xhtml_a5164336f6a1b15be0d434a6bbf7289da"><div class="ttname"><a href="structarmnn_1_1_pooling3d_descriptor.xhtml#a5164336f6a1b15be0d434a6bbf7289da">armnn::Pooling3dDescriptor::m_StrideZ</a></div><div class="ttdeci">uint32_t m_StrideZ</div><div class="ttdoc">Stride value when proceeding through input for the depth dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00458">Descriptors.hpp:458</a></div></div>
+<div class="ttc" id="structarmnn_1_1_pooling3d_descriptor_xhtml_ac18546ebbebbb32fe0a03baa9bf2c600"><div class="ttname"><a href="structarmnn_1_1_pooling3d_descriptor.xhtml#ac18546ebbebbb32fe0a03baa9bf2c600">armnn::Pooling3dDescriptor::m_PadLeft</a></div><div class="ttdeci">uint32_t m_PadLeft</div><div class="ttdoc">Padding left value in the width dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00436">Descriptors.hpp:436</a></div></div>
+<div class="ttc" id="structarmnn_1_1_pooling3d_descriptor_xhtml_a56b51f56cef50cdfa554258eecdab046"><div class="ttname"><a href="structarmnn_1_1_pooling3d_descriptor.xhtml#a56b51f56cef50cdfa554258eecdab046">armnn::Pooling3dDescriptor::m_PadTop</a></div><div class="ttdeci">uint32_t m_PadTop</div><div class="ttdoc">Padding top value in the height dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00440">Descriptors.hpp:440</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a375ca3cff9f1b005d1412dc5f3cf5b6e"><div class="ttname"><a href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a></div><div class="ttdeci">std::enable_if_t&lt; std::is_unsigned&lt; Source &gt;::value &amp;&amp;std::is_unsigned&lt; Dest &gt;::value, Dest &gt; numeric_cast(Source source)</div><div class="ttdef"><b>Definition:</b> <a href="_numeric_cast_8hpp_source.xhtml#l00035">NumericCast.hpp:35</a></div></div>
+<div class="ttc" id="structarmnn_1_1_pooling3d_descriptor_xhtml_afe6a3377c4531315354def9023c8fdda"><div class="ttname"><a href="structarmnn_1_1_pooling3d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">armnn::Pooling3dDescriptor::m_StrideX</a></div><div class="ttdeci">uint32_t m_StrideX</div><div class="ttdoc">Stride value when proceeding through input for the width dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00454">Descriptors.hpp:454</a></div></div>
+<div class="ttc" id="structarmnn_1_1_pooling3d_descriptor_xhtml_a8c29d6ea9b4186d69aad5961c910939c"><div class="ttname"><a href="structarmnn_1_1_pooling3d_descriptor.xhtml#a8c29d6ea9b4186d69aad5961c910939c">armnn::Pooling3dDescriptor::m_PaddingMethod</a></div><div class="ttdeci">PaddingMethod m_PaddingMethod</div><div class="ttdoc">The padding method to be used. (Exclude, IgnoreValue). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00462">Descriptors.hpp:462</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a3be2f69aaf56e58a64ce62054c497fbc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3be2f69aaf56e58a64ce62054c497fbc">&#9670;&nbsp;</a></span>PreluImpl()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void PreluImpl </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>inputInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>alphaInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>outputInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>inputData</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>alphaData</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>outputData</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_prelu_impl_8cpp_source.xhtml#l00013">13</a> of file <a class="el" href="_prelu_impl_8cpp_source.xhtml">PreluImpl.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</a>, and <a class="el" href="_broadcast_8hpp_source.xhtml#l00026">BroadcastLoop::Unroll()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_ref_prelu_workload_8cpp_source.xhtml#l00026">RefPreluWorkload::ExecuteAsync()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;{</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> TensorShape&amp; inputShape = inputInfo.GetShape();</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> TensorShape&amp; alphaShape = alphaInfo.GetShape();</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> TensorShape&amp; outputShape = outputInfo.GetShape();</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="comment">// PReLU activation: f(x) = alpha * x for x &lt; 0, f(x) = x for x &gt;= 0</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">auto</span> prelu = [](<span class="keywordtype">float</span> x, <span class="keywordtype">float</span> alpha)</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; {</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keywordflow">return</span> x &lt; 0 ? alpha * x : x;</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; };</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; BroadcastLoop(inputShape, alphaShape, outputShape).Unroll(prelu, 0, inputData, alphaData, outputData);</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a0b4e1500f83d1edd4c744b4aa3b13347"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0b4e1500f83d1edd4c744b4aa3b13347">&#9670;&nbsp;</a></span>ProfilingUpdateDescriptions()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void armnn::ProfilingUpdateDescriptions </td>
+ <td>(</td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>name</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const DescriptorType &amp;&#160;</td>
+ <td class="paramname"><em>desc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>infos</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const profiling::ProfilingGuid&#160;</td>
+ <td class="paramname"><em>guid</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>&lt; Profiler used </p>
+
+<p class="definition">Definition at line <a class="el" href="_profiling_8hpp_source.xhtml#l00180">180</a> of file <a class="el" href="_profiling_8hpp_source.xhtml">Profiling.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_profiling_8cpp_source.xhtml#l00568">ProfilerManager::GetInstance()</a>, and <a class="el" href="_profiling_8cpp_source.xhtml#l00595">IProfiler::IsProfilingEnabled()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;{</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; IProfiler* profiler(ProfilerManager::GetInstance().GetProfiler()); <span class="comment">///&lt; Profiler used</span></div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;<span class="comment"></span> <span class="keywordflow">if</span> (profiler &amp;&amp; profiler-&gt;IsProfilingEnabled())</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; {</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; profiler-&gt;AddLayerDetails(name, desc, infos, guid);</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; }</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="abbbe4a59b72fba606f21e7c24dcbd8c0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abbbe4a59b72fba606f21e7c24dcbd8c0">&#9670;&nbsp;</a></span>Quantize() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void armnn::Quantize </td>
+ <td>(</td>
+ <td class="paramtype">uint8_t *&#160;</td>
+ <td class="paramname"><em>quant</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const float *&#160;</td>
+ <td class="paramname"><em>dequant</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>info</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ref_workload_utils_8hpp_source.xhtml#l00114">114</a> of file <a class="el" href="_ref_workload_utils_8hpp_source.xhtml">RefWorkloadUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_tensor_8hpp_source.xhtml#l00196">TensorInfo::GetNumElements()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00480">TensorInfo::GetQuantizationOffset()</a>, and <a class="el" href="_tensor_8cpp_source.xhtml#l00463">TensorInfo::GetQuantizationScale()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;{</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetNumElements(); i++)</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; {</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; quant[i] = armnn::Quantize&lt;uint8_t&gt;(dequant[i], <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(), <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; }</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c"><div class="ttname"><a href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">armnn::BoostLogSeverityMapping::info</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ad773a034fb9983e15f3094b4c5c7c30c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad773a034fb9983e15f3094b4c5c7c30c">&#9670;&nbsp;</a></span>Quantize() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">template int32_t Quantize&lt; int32_t &gt; </td>
+ <td>(</td>
+ <td class="paramtype">float&#160;</td>
+ <td class="paramname"><em>value</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float&#160;</td>
+ <td class="paramname"><em>scale</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int32_t&#160;</td>
+ <td class="paramname"><em>offset</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Quantize a floating point data type into an 8-bit data type. </p>
+<p>Explicit specialization of Quantize for int32_t.</p>
+<p>Explicit specialization of Quantize for int16_t.</p>
+<p>Explicit specialization of Quantize for uint8_t.</p>
+<p>Explicit specialization of Quantize for int8_t.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">value</td><td>- The value to quantize. </td></tr>
+ <tr><td class="paramname">scale</td><td>- The scale (must be non-zero). </td></tr>
+ <tr><td class="paramname">offset</td><td>- The offset. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>- The quantized value calculated as round(value/scale)+offset. </dd></dl>
+
+<p class="definition">Definition at line <a class="el" href="_types_utils_8cpp_source.xhtml#l00030">30</a> of file <a class="el" href="_types_utils_8cpp_source.xhtml">TypesUtils.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_test_name_only_layer_visitor_8cpp_source.xhtml#l00035">TEST_SUITE()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;{</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; static_assert(IsQuantizedType&lt;QuantizedType&gt;(), <span class="stringliteral">&quot;Not an integer type.&quot;</span>);</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; constexpr QuantizedType max = std::numeric_limits&lt;QuantizedType&gt;::max();</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; constexpr QuantizedType min = std::numeric_limits&lt;QuantizedType&gt;::lowest();</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(scale != 0.f);</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(!std::isnan(value));</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordtype">float</span> clampedValue = std::min(std::max(static_cast&lt;float&gt;(round(value/scale) + offset), static_cast&lt;float&gt;(min)),</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; static_cast&lt;float&gt;(max));</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keyword">auto</span> quantizedBits = <span class="keyword">static_cast&lt;</span>QuantizedType<span class="keyword">&gt;</span>(clampedValue);</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">return</span> quantizedBits;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;}</div><div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ad64b7a275169ba1b1ba2d15679f7e8b1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad64b7a275169ba1b1ba2d15679f7e8b1">&#9670;&nbsp;</a></span>Reduce()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Reduce </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>inputInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>outputInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::vector&lt; uint32_t &gt;&#160;</td>
+ <td class="paramname"><em>axis</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0">ReduceOperation</a>&#160;</td>
+ <td class="paramname"><em>reduceOperation</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="backends_2reference_2workloads_2_reduce_8cpp_source.xhtml#l00070">70</a> of file <a class="el" href="backends_2reference_2workloads_2_reduce_8cpp_source.xhtml">Reduce.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>, <a class="el" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Decoder&lt; IType &gt;::Get()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00195">TensorInfo::GetNumDimensions()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00196">TensorInfo::GetNumElements()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</a>, <a class="el" href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0a6a061313d22e51e0f25b7cd4dc065233">Max</a>, <a class="el" href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0a3d6c9ac08ada31c184094bbc67afe00d">Mean</a>, <a class="el" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea78d811e98514cd165dda532286610fd2">Min</a>, <a class="el" href="backends_2reference_2workloads_2_reduce_8cpp_source.xhtml#l00019">NextIndex()</a>, <a class="el" href="_numeric_cast_8hpp_source.xhtml#l00035">numeric_cast()</a>, <a class="el" href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0a362a33c23b08e4a32a4ec53fbb82cccd">Prod</a>, <a class="el" href="backends_2reference_2workloads_2_reduce_8cpp_source.xhtml#l00040">ReducedOutputOffset()</a>, <a class="el" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>, and <a class="el" href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0aa0ec87054b5e5b7847d0d8780a01a3d5">Sum</a>.</p>
+<div class="fragment"><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;{</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a> inputDims = inputInfo.GetShape();</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputNumDims = inputInfo.<a class="code" href="classarmnn_1_1_tensor_shape.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>();</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numOutputs = outputInfo.GetNumElements();</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="comment">// Initialise temp output</span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; std::vector&lt;float&gt; tempOut(numOutputs);</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordflow">switch</span>(reduceOperation)</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; {</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordflow">case</span> ReduceOperation::Mean:</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordflow">case</span> ReduceOperation::Sum:</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; std::fill(tempOut.begin(), tempOut.end(), 0.0f);</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordflow">case</span> ReduceOperation::Prod:</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; std::fill(tempOut.begin(), tempOut.end(), 1.0f);</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordflow">case</span> ReduceOperation::Max:</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; std::fill(tempOut.begin(), tempOut.end(), -1 * std::numeric_limits&lt;float&gt;::max());</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordflow">case</span> ReduceOperation::Min:</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; std::fill(tempOut.begin(), tempOut.end(), std::numeric_limits&lt;float&gt;::max());</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>(<span class="stringliteral">&quot;Unknown reduce method: &quot;</span> +</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; std::to_string(static_cast&lt;int&gt;(reduceOperation)));</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; }</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="comment">// Initialise temp index</span></div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; std::vector&lt;unsigned int&gt; tempIndex(inputNumDims, 0);</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; std::vector&lt;unsigned int&gt; resolvedAxis = axis;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keywordflow">if</span> (resolvedAxis.empty())</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; {</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx = 0; idx &lt; inputNumDims; ++idx)</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; {</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; resolvedAxis.push_back(idx);</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; }</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; }</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keyword">auto</span> numResolvedAxis = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(resolvedAxis.size());</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="comment">// Iterates through input_data and operates over the reduced axis</span></div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">bool</span> hasNext = <span class="keyword">true</span>; hasNext; hasNext = <a class="code" href="namespacearmnn.xhtml#a869f740e9c2fcb8642350c6e3d0b3742">NextIndex</a>(inputNumDims, inputDims, tempIndex))</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; {</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputOffset = <a class="code" href="namespacearmnn.xhtml#ae86f1ca23eaa764da9e589cc8e39a969">ReducedOutputOffset</a>(inputNumDims, inputDims, tempIndex, 0, {});</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputOffset = <a class="code" href="namespacearmnn.xhtml#ae86f1ca23eaa764da9e589cc8e39a969">ReducedOutputOffset</a>(inputNumDims, inputDims, tempIndex,</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; numResolvedAxis, resolvedAxis);</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; input[inputOffset];</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keyword">auto</span> inputValue = input.<a class="code" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Get</a>();</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keywordflow">switch</span>(reduceOperation)</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; {</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keywordflow">case</span> ReduceOperation::Mean:</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordflow">case</span> ReduceOperation::Sum:</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; tempOut[outputOffset] += inputValue;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordflow">case</span> ReduceOperation::Prod:</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; tempOut[outputOffset] *= inputValue;</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordflow">case</span> ReduceOperation::Max:</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordflow">if</span> (inputValue &gt; tempOut[outputOffset])</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; {</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; tempOut[outputOffset] = inputValue;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; }</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keywordflow">case</span> ReduceOperation::Min:</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keywordflow">if</span> (inputValue &lt; tempOut[outputOffset])</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; {</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; tempOut[outputOffset] = inputValue;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; }</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>(<span class="stringliteral">&quot;Unknown reduce method: &quot;</span> +</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; std::to_string(static_cast&lt;int&gt;(reduceOperation)));</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; }</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; }</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="comment">// Takes average by num of elements added to get MEAN</span></div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordtype">size_t</span> numElementsInAxis = 1;</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx = 0; idx &lt; numResolvedAxis; ++idx)</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; {</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> current = inputDims[resolvedAxis[idx]];</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(armnn::numeric_cast&lt;float&gt;(current) &lt;</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; (std::numeric_limits&lt;float&gt;::max() / armnn::numeric_cast&lt;float&gt;(numElementsInAxis)));</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; numElementsInAxis *= current;</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; }</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx = 0; idx &lt; numOutputs; ++idx)</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; {</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; output[idx];</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keywordflow">if</span> (reduceOperation == ReduceOperation::Mean)</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; {</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keywordflow">if</span> (numElementsInAxis &gt; 0)</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; {</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; output.<a class="code" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Set</a>(tempOut[idx] / armnn::numeric_cast&lt;float&gt;(numElementsInAxis));</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; }</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; }</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; {</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; output.<a class="code" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Set</a>(tempOut[idx]);</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; }</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; }</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a869f740e9c2fcb8642350c6e3d0b3742"><div class="ttname"><a href="namespacearmnn.xhtml#a869f740e9c2fcb8642350c6e3d0b3742">armnn::NextIndex</a></div><div class="ttdeci">bool NextIndex(const unsigned int numDims, const armnn::TensorShape &amp;dims, std::vector&lt; unsigned int &gt; &amp;current)</div><div class="ttdef"><b>Definition:</b> <a href="backends_2reference_2workloads_2_reduce_8cpp_source.xhtml#l00019">Reduce.cpp:19</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ae86f1ca23eaa764da9e589cc8e39a969"><div class="ttname"><a href="namespacearmnn.xhtml#ae86f1ca23eaa764da9e589cc8e39a969">armnn::ReducedOutputOffset</a></div><div class="ttdeci">unsigned int ReducedOutputOffset(const unsigned int numDims, const armnn::TensorShape &amp;dims, std::vector&lt; unsigned int &gt; &amp;index, const unsigned int numAxis, const std::vector&lt; unsigned int &gt; &amp;axis)</div><div class="ttdef"><b>Definition:</b> <a href="backends_2reference_2workloads_2_reduce_8cpp_source.xhtml#l00040">Reduce.cpp:40</a></div></div>
+<div class="ttc" id="classarmnn_1_1_encoder_xhtml_ae3b62b846a9c239f332830b9e36030eb"><div class="ttname"><a href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">armnn::Encoder::Set</a></div><div class="ttdeci">virtual void Set(IType right)=0</div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_shape_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00020">Tensor.hpp:20</a></div></div>
+<div class="ttc" id="classarmnn_1_1_decoder_xhtml_ac729108381e2340bea12877971713ecb"><div class="ttname"><a href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">armnn::Decoder::Get</a></div><div class="ttdeci">virtual IType Get() const =0</div></div>
+<div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
+<div class="ttc" id="classarmnn_1_1_invalid_argument_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00080">Exceptions.hpp:80</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_shape_xhtml_a157e27d41e9f6b21f0d3c025fa47dc24"><div class="ttname"><a href="classarmnn_1_1_tensor_shape.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">armnn::TensorShape::GetNumDimensions</a></div><div class="ttdeci">unsigned int GetNumDimensions() const</div><div class="ttdoc">Function that returns the tensor rank. </div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8cpp_source.xhtml#l00174">Tensor.cpp:174</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a375ca3cff9f1b005d1412dc5f3cf5b6e"><div class="ttname"><a href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a></div><div class="ttdeci">std::enable_if_t&lt; std::is_unsigned&lt; Source &gt;::value &amp;&amp;std::is_unsigned&lt; Dest &gt;::value, Dest &gt; numeric_cast(Source source)</div><div class="ttdef"><b>Definition:</b> <a href="_numeric_cast_8hpp_source.xhtml#l00035">NumericCast.hpp:35</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ae86f1ca23eaa764da9e589cc8e39a969"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae86f1ca23eaa764da9e589cc8e39a969">&#9670;&nbsp;</a></span>ReducedOutputOffset()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">unsigned int armnn::ReducedOutputOffset </td>
+ <td>(</td>
+ <td class="paramtype">const unsigned int&#160;</td>
+ <td class="paramname"><em>numDims</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a> &amp;&#160;</td>
+ <td class="paramname"><em>dims</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::vector&lt; unsigned int &gt; &amp;&#160;</td>
+ <td class="paramname"><em>index</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const unsigned int&#160;</td>
+ <td class="paramname"><em>numAxis</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::vector&lt; unsigned int &gt; &amp;&#160;</td>
+ <td class="paramname"><em>axis</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="backends_2reference_2workloads_2_reduce_8cpp_source.xhtml#l00040">40</a> of file <a class="el" href="backends_2reference_2workloads_2_reduce_8cpp_source.xhtml">Reduce.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="backends_2reference_2workloads_2_reduce_8cpp_source.xhtml#l00070">Reduce()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;{</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> offset = 0;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx = 0; idx &lt; numDims; ++idx)</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; {</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordtype">bool</span> isAxis = <span class="keyword">false</span>;</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordflow">if</span> (!axis.empty())</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; {</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> axisIdx = 0; axisIdx &lt; numAxis; ++axisIdx)</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; {</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordflow">if</span> (idx == axis[axisIdx])</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; {</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; isAxis = <span class="keyword">true</span>;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; }</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; }</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; }</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordflow">if</span> (!isAxis)</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; {</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; offset = offset * dims[idx] + index[idx];</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; }</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; }</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordflow">return</span> offset;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="ae7d50846b2769f81521af24d063bc093"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae7d50846b2769f81521af24d063bc093">&#9670;&nbsp;</a></span>RefBackendId()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr const char* armnn::RefBackendId </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ref_backend_id_8hpp_source.xhtml#l00010">10</a> of file <a class="el" href="_ref_backend_id_8hpp_source.xhtml">RefBackendId.hpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_ref_backend_8cpp_source.xhtml#l00023">RefBackend::GetIdStatic()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;{ <span class="keywordflow">return</span> <span class="stringliteral">&quot;CpuRef&quot;</span>; }</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a5baedac4819656984488bc1fe5fe1505"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5baedac4819656984488bc1fe5fe1505">&#9670;&nbsp;</a></span>RefTensorHandleFactoryId()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr const char* armnn::RefTensorHandleFactoryId </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_ref_tensor_handle_factory_8hpp_source.xhtml#l00015">15</a> of file <a class="el" href="_ref_tensor_handle_factory_8hpp_source.xhtml">RefTensorHandleFactory.hpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_ref_tensor_handle_factory_8cpp_source.xhtml#l00016">RefTensorHandleFactory::GetIdStatic()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;{ <span class="keywordflow">return</span> <span class="stringliteral">&quot;Arm/Ref/TensorHandleFactory&quot;</span>; }</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a52b301fd3adce20b51c4482cb52f1a38"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a52b301fd3adce20b51c4482cb52f1a38">&#9670;&nbsp;</a></span>ReorderWeightChannelsForAcl()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classarmnn_1_1_const_tensor.xhtml">ConstTensor</a> armnn::ReorderWeightChannelsForAcl </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_const_tensor.xhtml">ConstTensor</a> &amp;&#160;</td>
+ <td class="paramname"><em>weightHandle</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a>&#160;</td>
+ <td class="paramname"><em>dataLayout</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void *&#160;</td>
+ <td class="paramname"><em>permuteBuffer</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_workload_utils_8cpp_source.xhtml#l00066">66</a> of file <a class="el" href="_workload_utils_8cpp_source.xhtml">WorkloadUtils.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_tensor_8hpp_source.xhtml#l00295">BaseTensor&lt; MemoryType &gt;::GetInfo()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00429">TensorInfo::GetNumBytes()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00297">BaseTensor&lt; MemoryType &gt;::GetShape()</a>, <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">NCHW</a>, and <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">NHWC</a>.</p>
+<div class="fragment"><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;{</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>* weight = <span class="keyword">static_cast&lt;</span><a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>*<span class="keyword">&gt;</span>(permuteBuffer);</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keyword">const</span> TensorShape&amp; weightShape = weightHandle.GetShape();</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> multiplier;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> height;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> width;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputChannels;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordflow">switch</span> (dataLayout)</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; {</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">case</span> DataLayout::NHWC: <span class="comment">//It actually is [ H, W, I, M ]</span></div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; height = weightShape[0];</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; width = weightShape[1];</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; inputChannels = weightShape[2];</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; multiplier = weightShape[3];</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">case</span> DataLayout::NCHW: <span class="comment">//It actually is [ M, I, H, W ]</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; height = weightShape[2];</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; width = weightShape[3];</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; inputChannels = weightShape[1];</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; multiplier = weightShape[0];</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; }</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; std::vector&lt;DataType&gt; weightAclOrder(height*width*inputChannels*multiplier);</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> destinationWeightsChannel;</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> totalChannels = inputChannels * multiplier;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channelSize = height * width;</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputChannel = 0;</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> originWeightsChannel = 0; originWeightsChannel &lt; totalChannels; originWeightsChannel++)</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; {</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; inputChannel = originWeightsChannel % inputChannels;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; destinationWeightsChannel = (originWeightsChannel - inputChannel) / inputChannels + multiplier * inputChannel;</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; channelSize; i++)</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; {</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; weightAclOrder[i + destinationWeightsChannel * channelSize] =</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; weight[i + originWeightsChannel * channelSize];</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; }</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; }</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; ::memcpy(permuteBuffer, weightAclOrder.data(), weightHandle.GetInfo().GetNumBytes());</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordflow">return</span> ConstTensor(weightHandle.GetInfo(), permuteBuffer);</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a></div><div class="ttdeci">DataType</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00035">Types.hpp:35</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a8134b220b50f01163c5fcd8d2d4524a2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8134b220b50f01163c5fcd8d2d4524a2">&#9670;&nbsp;</a></span>ReplaceLayers()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void armnn::ReplaceLayers </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_optimization_views.xhtml">OptimizationViews</a> &amp;&#160;</td>
+ <td class="paramname"><em>optimizationViews</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *&#160;</td>
+ <td class="paramname"><em>baseLayer</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::vector&lt; <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a> *&gt; &amp;&#160;</td>
+ <td class="paramname"><em>layers</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00392">392</a> of file <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml">ArmComputeSubgraphUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="include_2armnn_2backends_2_optimization_views_8hpp_source.xhtml#l00034">OptimizationViews::AddSubstitution()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160;{</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; std::list&lt;IConnectableLayer*&gt; replacementLayers(layers.begin(), layers.end());</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160;</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; SubgraphView substitutionSubgraph(baseLayer);</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; SubgraphView replacementSubgraph(std::move(replacementLayers),</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; CreateIInputsFrom({replacementLayers.front()}),</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; CreateIOutputsFrom({replacementLayers.back()}));</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160;</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; optimizationViews.AddSubstitution({substitutionSubgraph, replacementSubgraph});</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a7658f93d899c8646515a29370e6aa994"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7658f93d899c8646515a29370e6aa994">&#9670;&nbsp;</a></span>ReportError()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void armnn::ReportError </td>
+ <td>(</td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>errorMessage</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; std::vector&lt; std::string &gt; &amp;&gt;&#160;</td>
+ <td class="paramname"><em>errorMessages</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.xhtml#l00572">572</a> of file <a class="el" href="_network_8cpp_source.xhtml">Network.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_logging_8hpp_source.xhtml#l00205">ARMNN_LOG</a>, and <a class="el" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407a7b83d3f08fa392b79e3f553b585971cd">warning</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.xhtml#l01034">AssignBackends()</a>, <a class="el" href="_network_8cpp_source.xhtml#l00611">CheckScaleSetOnQuantizedType()</a>, <a class="el" href="_network_8cpp_source.xhtml#l01680">Optimize()</a>, and <a class="el" href="_network_8cpp_source.xhtml#l00596">ReturnWithError()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160;{</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; std::stringstream fullErrorMessage;</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; fullErrorMessage &lt;&lt; <span class="stringliteral">&quot;ERROR: &quot;</span> &lt;&lt; errorMessage;</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(warning) &lt;&lt; fullErrorMessage.str();</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; <span class="keywordflow">if</span> (errorMessages)</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; {</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; errorMessages.value().push_back(fullErrorMessage.str());</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; }</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160;}</div><div class="ttc" id="_logging_8hpp_xhtml_a7b6ad073975f437ec38ca7d20154727f"><div class="ttname"><a href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a></div><div class="ttdeci">#define ARMNN_LOG(severity)</div><div class="ttdef"><b>Definition:</b> <a href="_logging_8hpp_source.xhtml#l00205">Logging.hpp:205</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="aa1002c35597679b4f6624827524af04e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa1002c35597679b4f6624827524af04e">&#9670;&nbsp;</a></span>ReportUntouchedLayers()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void armnn::ReportUntouchedLayers </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_optimization_views.xhtml">OptimizationViews</a> &amp;&#160;</td>
+ <td class="paramname"><em>optimizationViews</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::map&lt; <a class="el" href="namespacearmnn.xhtml#afad4088a9a058114ee5f87246f87bf49">LayerGuid</a>, <a class="el" href="classarmnn_1_1_layer.xhtml">Layer</a> *&gt;&#160;</td>
+ <td class="paramname"><em>untouched</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00082">82</a> of file <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml">ArmComputeSubgraphUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="include_2armnn_2backends_2_optimization_views_8hpp_source.xhtml#l00044">OptimizationViews::AddUntouchedSubgraph()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_backend_8cpp_source.xhtml#l00142">NeonBackend::OptimizeSubgraphView()</a>, and <a class="el" href="_cl_backend_8cpp_source.xhtml#l00276">ClBackend::OptimizeSubgraphView()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;{</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; std::vector&lt;Layer*&gt; untouchedVector;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; pair : untouched)</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; {</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <a class="code" href="namespacearmnn_serializer.xhtml#a9a8118be7780e95363d631cbca7e7800">Layer</a>* layer = pair.second;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; SubgraphView subgraphView({layer},</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; CreateIInputsFrom({layer}),</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; CreateIOutputsFrom({layer}));</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; optimizationViews.AddUntouchedSubgraph(std::move(subgraphView));</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; }</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;}</div><div class="ttc" id="namespacearmnn_serializer_xhtml_a9a8118be7780e95363d631cbca7e7800"><div class="ttname"><a href="namespacearmnn_serializer.xhtml#a9a8118be7780e95363d631cbca7e7800">armnnSerializer::Layer</a></div><div class="ttdeci">Layer</div><div class="ttdef"><b>Definition:</b> <a href="_armnn_schema__generated_8h_source.xhtml#l01243">ArmnnSchema_generated.h:1243</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a38e626422579decc13e3ee37da1a84c9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a38e626422579decc13e3ee37da1a84c9">&#9670;&nbsp;</a></span>ReportWarning()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void armnn::ReportWarning </td>
+ <td>(</td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>warningMessage</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; std::vector&lt; std::string &gt; &amp;&gt;&#160;</td>
+ <td class="paramname"><em>warningMessages</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.xhtml#l00584">584</a> of file <a class="el" href="_network_8cpp_source.xhtml">Network.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_logging_8hpp_source.xhtml#l00205">ARMNN_LOG</a>, and <a class="el" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407a7b83d3f08fa392b79e3f553b585971cd">warning</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.xhtml#l01155">ApplyBackendOptimizations()</a>, and <a class="el" href="_network_8cpp_source.xhtml#l00670">AttemptBackendAssignment()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160;{</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; std::stringstream fullWarningMessage;</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; fullWarningMessage &lt;&lt; <span class="stringliteral">&quot;WARNING: &quot;</span> &lt;&lt; warningMessage;</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(warning) &lt;&lt; fullWarningMessage.str();</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; <span class="keywordflow">if</span> (warningMessages)</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; {</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; warningMessages.value().push_back(fullWarningMessage.str());</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; }</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160;}</div><div class="ttc" id="_logging_8hpp_xhtml_a7b6ad073975f437ec38ca7d20154727f"><div class="ttname"><a href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a></div><div class="ttdeci">#define ARMNN_LOG(severity)</div><div class="ttdef"><b>Definition:</b> <a href="_logging_8hpp_source.xhtml#l00205">Logging.hpp:205</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a5ee4a1cca55f69b31e625c786655ed1a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5ee4a1cca55f69b31e625c786655ed1a">&#9670;&nbsp;</a></span>RequiresCopy()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::RequiresCopy </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_i_tensor_handle_factory.xhtml#a32f4aa6a7089d877af08928139c2c277">ITensorHandleFactory::FactoryId</a>&#160;</td>
+ <td class="paramname"><em>src</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_i_tensor_handle_factory.xhtml#a32f4aa6a7089d877af08928139c2c277">ITensorHandleFactory::FactoryId</a>&#160;</td>
+ <td class="paramname"><em>dst</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_tensor_handle_factory_registry.xhtml">TensorHandleFactoryRegistry</a> &amp;&#160;</td>
+ <td class="paramname"><em>registry</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.xhtml#l01257">1257</a> of file <a class="el" href="_network_8cpp_source.xhtml">Network.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="include_2armnn_2backends_2_i_tensor_handle_factory_8hpp_source.xhtml#l00086">ITensorHandleFactory::GetExportFlags()</a>, <a class="el" href="_tensor_handle_factory_registry_8cpp_source.xhtml#l00039">TensorHandleFactoryRegistry::GetFactory()</a>, and <a class="el" href="include_2armnn_2backends_2_i_tensor_handle_factory_8hpp_source.xhtml#l00087">ITensorHandleFactory::GetImportFlags()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.xhtml#l01372">CalculateSlotOption()</a>.</p>
+<div class="fragment"><div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160;{</div><div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160; <span class="keywordflow">if</span> (src != dst)</div><div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160; {</div><div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160; ITensorHandleFactory* srcFactory = registry.GetFactory(src);</div><div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160; ITensorHandleFactory* dstFactory = registry.GetFactory(dst);</div><div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160;</div><div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160; <span class="keywordflow">if</span> (srcFactory &amp;&amp; dstFactory &amp;&amp;</div><div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160; (srcFactory-&gt;GetExportFlags() &amp; dstFactory-&gt;GetImportFlags()) != 0)</div><div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160; {</div><div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160; }</div><div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160; }</div><div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a3170fdd696155a247ecd81d445c0e2e1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3170fdd696155a247ecd81d445c0e2e1">&#9670;&nbsp;</a></span>ReshapeWeightsForAcl()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void ReshapeWeightsForAcl </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>weightInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a>&#160;</td>
+ <td class="paramname"><em>dataLayout</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_workload_utils_8cpp_source.xhtml#l00040">40</a> of file <a class="el" href="_workload_utils_8cpp_source.xhtml">WorkloadUtils.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</a>, <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">NCHW</a>, <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">NHWC</a>, and <a class="el" href="_tensor_8hpp_source.xhtml#l00193">TensorInfo::SetShape()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_workload_utils_8cpp_source.xhtml#l00227">ConvertWeightTensorFromArmnnToAcl()</a>, <a class="el" href="_workload_utils_8cpp_source.xhtml#l00114">ConvertWeightTensorInfoFromArmnnToAcl()</a>, and <a class="el" href="_workload_utils_8hpp_source.xhtml#l00189">GatherTensorHandlePairs()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;{</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="comment">// Reshape the weights in-place</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keyword">const</span> TensorShape&amp; weightShape = weightInfo.GetShape();</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordflow">switch</span> (dataLayout)</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; {</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">case</span> DataLayout::NHWC:</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="comment">// The data layout is NHWC, reshape from [ H, W, I, M ] to [ 1, H, W, I * M ]</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; weightInfo.SetShape({ 1,</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; weightShape[0],</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; weightShape[1],</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; weightShape[2] * weightShape[3] });</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; weightInfo.SetShape({ 1,</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; weightShape[0] * weightShape[1],</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; weightShape[2],</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; weightShape[3] });</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">case</span> DataLayout::NCHW:</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="comment">// The data layout is NCHW, reshape from [ M, I, H, W ] to [ 1, I * M, H, W, ]</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; weightInfo.SetShape({ 1, weightShape[0] * weightShape[1], weightShape[2], weightShape[3] });</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; }</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a6894316aa645fd5e837739135bef04bb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6894316aa645fd5e837739135bef04bb">&#9670;&nbsp;</a></span>Resize()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Resize </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>in</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>inputInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>out</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>outputInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_utils_1_1_data_layout_indexed.xhtml">DataLayoutIndexed</a>&#160;</td>
+ <td class="paramname"><em>dataLayout</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#a9a2af2f8c4af4f9efa8e79417d505ac4">armnn::ResizeMethod</a>&#160;</td>
+ <td class="paramname"><em>resizeMethod</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">bool&#160;</td>
+ <td class="paramname"><em>alignCorners</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">bool&#160;</td>
+ <td class="paramname"><em>halfPixelCenters</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_resize_8cpp_source.xhtml#l00065">65</a> of file <a class="el" href="_resize_8cpp_source.xhtml">Resize.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>, <a class="el" href="namespacearmnn.xhtml#a9a2af2f8c4af4f9efa8e79417d505ac4aaf17c98bbd83c27d6426d2ff3fa81d7f">Bilinear</a>, <a class="el" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Decoder&lt; IType &gt;::Get()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00023">DataLayoutIndexed::GetChannelsIndex()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00024">DataLayoutIndexed::GetHeightIndex()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00028">DataLayoutIndexed::GetIndex()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00025">DataLayoutIndexed::GetWidthIndex()</a>, <a class="el" href="namespacearmnn.xhtml#a9a2af2f8c4af4f9efa8e79417d505ac4aaa020331bb30d2fa2ecf7c3a0777823f">NearestNeighbor</a>, <a class="el" href="_resize_8cpp_source.xhtml#l00065">Resize()</a>, and <a class="el" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_inference_test_image_8hpp_source.xhtml#l00079">InferenceTestImage::GetSizeInBytes()</a>, <a class="el" href="_resize_8cpp_source.xhtml#l00065">Resize()</a>, <a class="el" href="_resize_layer_8cpp_source.xhtml#l00021">ResizeLayer::ResizeLayer()</a>, and <a class="el" href="_test_name_and_descriptor_layer_visitor_8cpp_source.xhtml#l00274">TEST_SUITE()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;{</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="comment">// alignCorners and halfPixelCenters cannot both be true</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(!(alignCorners &amp;&amp; halfPixelCenters));</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="comment">// We follow the definition of TensorFlow and AndroidNN: the top-left corner of a texel in the output</span></div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="comment">// image is projected into the input image to figure out the interpolants and weights. Note that this</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="comment">// will yield different results than if projecting the centre of output texels.</span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> batchSize = inputInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[0];</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channelCount = inputInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a861b2621ee46e4b63379988b360b8cd9">GetChannelsIndex</a>()];</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputHeight = inputInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a61c00316c443adc233c24e85c6c5b740">GetHeightIndex</a>()];</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputWidth = inputInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a414e6f95548e6f7a01d5028b55ad3941">GetWidthIndex</a>()];</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputHeight = outputInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a61c00316c443adc233c24e85c6c5b740">GetHeightIndex</a>()];</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputWidth = outputInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a414e6f95548e6f7a01d5028b55ad3941">GetWidthIndex</a>()];</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="comment">// How much to scale pixel coordinates in the output image, to get the corresponding pixel coordinates</span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="comment">// in the input image.</span></div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keyword">const</span> <span class="keywordtype">float</span> scaleY = CalculateResizeScale(inputHeight, outputHeight, alignCorners);</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keyword">const</span> <span class="keywordtype">float</span> scaleX = CalculateResizeScale(inputWidth, outputWidth, alignCorners);</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> inputShape = inputInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>();</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> outputShape = outputInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>();</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> n = 0; n &lt; batchSize; ++n)</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; {</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> c = 0; c &lt; channelCount; ++c)</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; {</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> y = 0; y &lt; outputHeight; ++y)</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; {</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="comment">// Corresponding real-valued height coordinate in input image.</span></div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordtype">float</span> iy = PixelScaler(y, scaleY, halfPixelCenters, resizeMethod);</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="comment">// Discrete height coordinate of top-left texel (in the 2x2 texel area used for interpolation).</span></div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keyword">const</span> <span class="keywordtype">float</span> fiy = (resizeMethod == <a class="code" href="namespacearmnn.xhtml#a9a2af2f8c4af4f9efa8e79417d505ac4aaa020331bb30d2fa2ecf7c3a0777823f">armnn::ResizeMethod::NearestNeighbor</a> &amp;&amp; alignCorners) ?</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; roundf(iy) : floorf(iy);</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="comment">// Pixel scaling a value with Half Pixel Centers can be negative, if so set to 0</span></div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> y0 = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(std::max(fiy, 0.0f));</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="comment">// Interpolation weight (range [0,1]).</span></div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keyword">const</span> <span class="keywordtype">float</span> yw = iy - fiy;</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> x = 0; x &lt; outputWidth; ++x)</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; {</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="comment">// Real-valued and discrete width coordinates in input image.</span></div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keywordtype">float</span> ix = PixelScaler(x, scaleX, halfPixelCenters, resizeMethod);</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="comment">// Nearest Neighbour uses rounding to align to corners</span></div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keyword">const</span> <span class="keywordtype">float</span> fix = resizeMethod == <a class="code" href="namespacearmnn.xhtml#a9a2af2f8c4af4f9efa8e79417d505ac4aaa020331bb30d2fa2ecf7c3a0777823f">armnn::ResizeMethod::NearestNeighbor</a> &amp;&amp; alignCorners ?</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; roundf(ix) : floorf(ix);</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="comment">// Pixel scaling a value with Half Pixel Centers can be negative, if so set to 0</span></div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> x0 = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(std::max(fix, 0.0f));</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="comment">// Interpolation weight (range [0,1]).</span></div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keyword">const</span> <span class="keywordtype">float</span> xw = ix - fix;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> x1;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> y1;</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="comment">// Half Pixel Centers uses the scaling to compute a weighted parameter for nearby pixels</span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordflow">if</span> (halfPixelCenters)</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; {</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; x1 = std::min(static_cast&lt;unsigned int&gt;(std::ceil(ix)), inputWidth - 1u);</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; y1 = std::min(static_cast&lt;unsigned int&gt;(std::ceil(iy)), inputHeight - 1u);</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; }</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="comment">// Discrete width/height coordinates of texels below and to the right of (x0, y0).</span></div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; {</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; x1 = std::min(x0 + 1, inputWidth - 1u);</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; y1 = std::min(y0 + 1, inputHeight - 1u);</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; }</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="keywordtype">float</span> interpolatedValue;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keywordflow">switch</span> (resizeMethod)</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; {</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#a9a2af2f8c4af4f9efa8e79417d505ac4aaf17c98bbd83c27d6426d2ff3fa81d7f">armnn::ResizeMethod::Bilinear</a>:</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; {</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; in[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a1e25d8623da985a43597b5756c73b206">GetIndex</a>(inputShape, n, c, y0, x0)];</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordtype">float</span> input1 = in.<a class="code" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Get</a>();</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; in[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a1e25d8623da985a43597b5756c73b206">GetIndex</a>(inputShape, n, c, y0, x1)];</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordtype">float</span> input2 = in.<a class="code" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Get</a>();</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; in[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a1e25d8623da985a43597b5756c73b206">GetIndex</a>(inputShape, n, c, y1, x0)];</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordtype">float</span> input3 = in.<a class="code" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Get</a>();</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; in[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a1e25d8623da985a43597b5756c73b206">GetIndex</a>(inputShape, n, c, y1, x1)];</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keywordtype">float</span> input4 = in.<a class="code" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Get</a>();</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="keyword">const</span> <span class="keywordtype">float</span> ly0 = Lerp(input1, input2, xw); <span class="comment">// lerp along row y0.</span></div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keyword">const</span> <span class="keywordtype">float</span> ly1 = Lerp(input3, input4, xw); <span class="comment">// lerp along row y1.</span></div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; interpolatedValue = Lerp(ly0, ly1, yw);</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; }</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#a9a2af2f8c4af4f9efa8e79417d505ac4aaa020331bb30d2fa2ecf7c3a0777823f">armnn::ResizeMethod::NearestNeighbor</a>:</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; {</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="comment">// calculate euclidean distance to the 4 neighbours</span></div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keyword">auto</span> distance00 = EuclideanDistance(fix, fiy, x0, y0);</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keyword">auto</span> distance01 = EuclideanDistance(fix, fiy, x0, y1);</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keyword">auto</span> distance10 = EuclideanDistance(fix, fiy, x1, y0);</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keyword">auto</span> distance11 = EuclideanDistance(fix, fiy, x1, y1);</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keyword">auto</span> <a class="code" href="structarmnn_1_1minimum.xhtml">minimum</a> = std::min( { distance00, distance01, distance10, distance11 } );</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> xNearest = 0;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> yNearest = 0;</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="structarmnn_1_1minimum.xhtml">minimum</a> == distance00)</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; {</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; xNearest = x0;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; yNearest = y0;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; }</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="structarmnn_1_1minimum.xhtml">minimum</a> == distance01)</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; {</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; xNearest = x0;</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; yNearest = y1;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; }</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="structarmnn_1_1minimum.xhtml">minimum</a> == distance10)</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; {</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; xNearest = x1;</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; yNearest = y0;</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; }</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="structarmnn_1_1minimum.xhtml">minimum</a> == distance11)</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; {</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; xNearest = x1;</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; yNearest = y1;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; }</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; {</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>(<span class="stringliteral">&quot;Resize Nearest Neighbor failure&quot;</span>);</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; }</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; in[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a1e25d8623da985a43597b5756c73b206">GetIndex</a>(inputShape, n, c, yNearest, xNearest)];</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; interpolatedValue = in.<a class="code" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Get</a>();</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; }</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>(<span class="stringliteral">&quot;Unknown resize method: &quot;</span> +</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; std::to_string(static_cast&lt;int&gt;(resizeMethod)));</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; }</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; out[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a1e25d8623da985a43597b5756c73b206">GetIndex</a>(outputShape, n, c, y, x)];</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; out.<a class="code" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Set</a>(interpolatedValue);</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; }</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; }</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; }</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; }</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160;}</div><div class="ttc" id="classarmnn_utils_1_1_data_layout_indexed_xhtml_a414e6f95548e6f7a01d5028b55ad3941"><div class="ttname"><a href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a414e6f95548e6f7a01d5028b55ad3941">armnnUtils::DataLayoutIndexed::GetWidthIndex</a></div><div class="ttdeci">unsigned int GetWidthIndex() const</div><div class="ttdef"><b>Definition:</b> <a href="_data_layout_indexed_8hpp_source.xhtml#l00025">DataLayoutIndexed.hpp:25</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a8b5d0f8a24e9d9238f412260a552acf8"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">armnn::TensorInfo::GetShape</a></div><div class="ttdeci">const TensorShape &amp; GetShape() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00191">Tensor.hpp:191</a></div></div>
+<div class="ttc" id="classarmnn_1_1_encoder_xhtml_ae3b62b846a9c239f332830b9e36030eb"><div class="ttname"><a href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">armnn::Encoder::Set</a></div><div class="ttdeci">virtual void Set(IType right)=0</div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_shape_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00020">Tensor.hpp:20</a></div></div>
+<div class="ttc" id="classarmnn_utils_1_1_data_layout_indexed_xhtml_a61c00316c443adc233c24e85c6c5b740"><div class="ttname"><a href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a61c00316c443adc233c24e85c6c5b740">armnnUtils::DataLayoutIndexed::GetHeightIndex</a></div><div class="ttdeci">unsigned int GetHeightIndex() const</div><div class="ttdef"><b>Definition:</b> <a href="_data_layout_indexed_8hpp_source.xhtml#l00024">DataLayoutIndexed.hpp:24</a></div></div>
+<div class="ttc" id="classarmnn_1_1_decoder_xhtml_ac729108381e2340bea12877971713ecb"><div class="ttname"><a href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">armnn::Decoder::Get</a></div><div class="ttdeci">virtual IType Get() const =0</div></div>
+<div class="ttc" id="classarmnn_utils_1_1_data_layout_indexed_xhtml_a1e25d8623da985a43597b5756c73b206"><div class="ttname"><a href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a1e25d8623da985a43597b5756c73b206">armnnUtils::DataLayoutIndexed::GetIndex</a></div><div class="ttdeci">unsigned int GetIndex(const armnn::TensorShape &amp;shape, unsigned int batchIndex, unsigned int channelIndex, unsigned int heightIndex, unsigned int widthIndex) const</div><div class="ttdef"><b>Definition:</b> <a href="_data_layout_indexed_8hpp_source.xhtml#l00028">DataLayoutIndexed.hpp:28</a></div></div>
+<div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
+<div class="ttc" id="classarmnn_1_1_invalid_argument_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00080">Exceptions.hpp:80</a></div></div>
+<div class="ttc" id="structarmnn_1_1minimum_xhtml"><div class="ttname"><a href="structarmnn_1_1minimum.xhtml">armnn::minimum</a></div><div class="ttdef"><b>Definition:</b> <a href="_minimum_8hpp_source.xhtml#l00012">Minimum.hpp:12</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a9a2af2f8c4af4f9efa8e79417d505ac4aaf17c98bbd83c27d6426d2ff3fa81d7f"><div class="ttname"><a href="namespacearmnn.xhtml#a9a2af2f8c4af4f9efa8e79417d505ac4aaf17c98bbd83c27d6426d2ff3fa81d7f">armnn::ResizeMethod::Bilinear</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a9a2af2f8c4af4f9efa8e79417d505ac4aaa020331bb30d2fa2ecf7c3a0777823f"><div class="ttname"><a href="namespacearmnn.xhtml#a9a2af2f8c4af4f9efa8e79417d505ac4aaa020331bb30d2fa2ecf7c3a0777823f">armnn::ResizeMethod::NearestNeighbor</a></div></div>
+<div class="ttc" id="classarmnn_utils_1_1_data_layout_indexed_xhtml_a861b2621ee46e4b63379988b360b8cd9"><div class="ttname"><a href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a861b2621ee46e4b63379988b360b8cd9">armnnUtils::DataLayoutIndexed::GetChannelsIndex</a></div><div class="ttdeci">unsigned int GetChannelsIndex() const</div><div class="ttdef"><b>Definition:</b> <a href="_data_layout_indexed_8hpp_source.xhtml#l00023">DataLayoutIndexed.hpp:23</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ae50fff9aa2a1ce46392d8641c10aa3bc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae50fff9aa2a1ce46392d8641c10aa3bc">&#9670;&nbsp;</a></span>ReturnWithError()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structarmnn_1_1_optimization_result.xhtml">OptimizationResult</a> armnn::ReturnWithError </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structarmnn_1_1_optimization_result.xhtml">OptimizationResult</a>&#160;</td>
+ <td class="paramname"><em>res</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_layer.xhtml">Layer</a> *&#160;</td>
+ <td class="paramname"><em>layer</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_backend_settings.xhtml">BackendSettings</a> &amp;&#160;</td>
+ <td class="paramname"><em>backendSettings</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; std::vector&lt; std::string &gt; &amp;&gt;&#160;</td>
+ <td class="paramname"><em>errMessages</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.xhtml#l00596">596</a> of file <a class="el" href="_network_8cpp_source.xhtml">Network.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_internal_types_8cpp_source.xhtml#l00013">GetLayerTypeAsCString()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00270">Layer::GetType()</a>, <a class="el" href="_network_8hpp_source.xhtml#l00268">OptimizationResult::m_Error</a>, <a class="el" href="_backend_settings_8hpp_source.xhtml#l00020">BackendSettings::m_PreferredBackends</a>, and <a class="el" href="_network_8cpp_source.xhtml#l00572">ReportError()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.xhtml#l00921">AssignBackendsIConnectable()</a>, and <a class="el" href="_network_8cpp_source.xhtml#l00670">AttemptBackendAssignment()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160;{</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; std::stringstream failureMsg;</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; failureMsg &lt;&lt; <span class="stringliteral">&quot;Layer of type &quot;</span> &lt;&lt; <a class="code" href="namespacearmnn.xhtml#addb6b14dd1b632263ffe77430259a7c4">GetLayerTypeAsCString</a>(layer-&gt;GetType())</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; &lt;&lt; <span class="stringliteral">&quot; is not supported on any preferred backend &quot;</span> &lt;&lt; backendSettings.m_PreferredBackends;</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; <a class="code" href="namespacearmnn.xhtml#a7658f93d899c8646515a29370e6aa994">ReportError</a>(failureMsg.str(), errMessages);</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160;</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; res.m_Error = <span class="keyword">true</span>;</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; <span class="keywordflow">return</span> res;</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a7658f93d899c8646515a29370e6aa994"><div class="ttname"><a href="namespacearmnn.xhtml#a7658f93d899c8646515a29370e6aa994">armnn::ReportError</a></div><div class="ttdeci">void ReportError(const std::string &amp;errorMessage, Optional&lt; std::vector&lt; std::string &gt; &amp;&gt; errorMessages)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.xhtml#l00572">Network.cpp:572</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_addb6b14dd1b632263ffe77430259a7c4"><div class="ttname"><a href="namespacearmnn.xhtml#addb6b14dd1b632263ffe77430259a7c4">armnn::GetLayerTypeAsCString</a></div><div class="ttdeci">const char * GetLayerTypeAsCString(LayerType type)</div><div class="ttdef"><b>Definition:</b> <a href="_internal_types_8cpp_source.xhtml#l00013">InternalTypes.cpp:13</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="aff5bee79757341daf750c7dd7c123a15"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aff5bee79757341daf750c7dd7c123a15">&#9670;&nbsp;</a></span>RunClFunction()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void armnn::RunClFunction </td>
+ <td>(</td>
+ <td class="paramtype">arm_compute::IFunction &amp;&#160;</td>
+ <td class="paramname"><em>function</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_check_location.xhtml">CheckLocation</a> &amp;&#160;</td>
+ <td class="paramname"><em>location</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_workload_utils_8hpp_source.xhtml#l00155">155</a> of file <a class="el" href="_cl_workload_utils_8hpp_source.xhtml">ClWorkloadUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da902b0d55fddef6f8d651fe1035b7d4bd">Error</a>, <a class="el" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acb5e100e5a9a3e7f6d1fd97512215282">error</a>, and <a class="el" href="_cl_workload_utils_8hpp_source.xhtml#l00147">WrapClError()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_fill_workload_8cpp_source.xhtml#l00040">ClFillWorkload::Execute()</a>, <a class="el" href="_cl_pad_workload_8cpp_source.xhtml#l00056">ClPadWorkload::Execute()</a>, <a class="el" href="_cl_addition_workload_8cpp_source.xhtml#l00039">ClAdditionWorkload::Execute()</a>, <a class="el" href="_cl_subtraction_workload_8cpp_source.xhtml#l00040">ClSubtractionWorkload::Execute()</a>, <a class="el" href="_cl_activation_workload_8cpp_source.xhtml#l00056">ClActivationWorkload::Execute()</a>, <a class="el" href="_cl_prelu_workload_8cpp_source.xhtml#l00046">ClPreluWorkload::Execute()</a>, <a class="el" href="_cl_exp_workload_8cpp_source.xhtml#l00048">ClExpWorkload::Execute()</a>, <a class="el" href="_cl_quantize_workload_8cpp_source.xhtml#l00048">ClQuantizeWorkload::Execute()</a>, <a class="el" href="_cl_rsqrt_workload_8cpp_source.xhtml#l00042">ClRsqrtWorkload::Execute()</a>, <a class="el" href="_cl_sin_workload_8cpp_source.xhtml#l00042">ClSinWorkload::Execute()</a>, <a class="el" href="_cl_convert_fp16_to_fp32_workload_8cpp_source.xhtml#l00038">ClConvertFp16ToFp32Workload::Execute()</a>, <a class="el" href="_cl_convert_fp32_to_fp16_workload_8cpp_source.xhtml#l00038">ClConvertFp32ToFp16Workload::Execute()</a>, <a class="el" href="_cl_abs_workload_8cpp_source.xhtml#l00042">ClAbsWorkload::Execute()</a>, <a class="el" href="_cl_log_workload_8cpp_source.xhtml#l00042">ClLogWorkload::Execute()</a>, <a class="el" href="_cl_lstm_float_workload_8cpp_source.xhtml#l00264">ClLstmFloatWorkload::Execute()</a>, <a class="el" href="_cl_cast_workload_8cpp_source.xhtml#l00044">ClCastWorkload::Execute()</a>, <a class="el" href="_cl_neg_workload_8cpp_source.xhtml#l00042">ClNegWorkload::Execute()</a>, <a class="el" href="_cl_resize_workload_8cpp_source.xhtml#l00091">ClResizeWorkload::Execute()</a>, <a class="el" href="_cl_space_to_depth_workload_8cpp_source.xhtml#l00048">ClSpaceToDepthWorkload::Execute()</a>, <a class="el" href="_cl_floor_float_workload_8cpp_source.xhtml#l00038">ClFloorFloatWorkload::Execute()</a>, <a class="el" href="_cl_reshape_workload_8cpp_source.xhtml#l00040">ClReshapeWorkload::Execute()</a>, <a class="el" href="_cl_gather_workload_8cpp_source.xhtml#l00054">ClGatherWorkload::Execute()</a>, <a class="el" href="_cl_instance_normalization_workload_8cpp_source.xhtml#l00064">ClInstanceNormalizationWorkload::Execute()</a>, <a class="el" href="_cl_batch_to_space_nd_workload_8cpp_source.xhtml#l00051">ClBatchToSpaceNdWorkload::Execute()</a>, <a class="el" href="_cl_maximum_workload_8cpp_source.xhtml#l00056">ClMaximumWorkload::Execute()</a>, <a class="el" href="_cl_minimum_workload_8cpp_source.xhtml#l00056">ClMinimumWorkload::Execute()</a>, <a class="el" href="_cl_normalization_float_workload_8cpp_source.xhtml#l00059">ClNormalizationFloatWorkload::Execute()</a>, <a class="el" href="_cl_l2_normalization_float_workload_8cpp_source.xhtml#l00057">ClL2NormalizationFloatWorkload::Execute()</a>, <a class="el" href="_cl_arg_min_max_workload_8cpp_source.xhtml#l00090">ClArgMinMaxWorkload::Execute()</a>, <a class="el" href="_cl_channel_shuffle_workload_8cpp_source.xhtml#l00095">ClChannelShuffleWorkload::Execute()</a>, <a class="el" href="_cl_comparison_workload_8cpp_source.xhtml#l00067">ClComparisonWorkload::Execute()</a>, <a class="el" href="_cl_slice_workload_8cpp_source.xhtml#l00060">ClSliceWorkload::Execute()</a>, <a class="el" href="_cl_depth_to_space_workload_8cpp_source.xhtml#l00070">ClDepthToSpaceWorkload::Execute()</a>, <a class="el" href="_cl_division_workload_8cpp_source.xhtml#l00053">ClDivisionWorkload::Execute()</a>, <a class="el" href="_cl_multiplication_workload_8cpp_source.xhtml#l00079">ClMultiplicationWorkload::Execute()</a>, <a class="el" href="_cl_space_to_batch_nd_workload_8cpp_source.xhtml#l00091">ClSpaceToBatchNdWorkload::Execute()</a>, <a class="el" href="_cl_strided_slice_workload_8cpp_source.xhtml#l00102">ClStridedSliceWorkload::Execute()</a>, <a class="el" href="_cl_pooling2d_workload_8cpp_source.xhtml#l00065">ClPooling2dWorkload::Execute()</a>, <a class="el" href="_cl_quantized_lstm_workload_8cpp_source.xhtml#l00142">ClQuantizedLstmWorkload::Execute()</a>, <a class="el" href="_cl_softmax_workload_8cpp_source.xhtml#l00053">ClSoftmaxWorkload::Execute()</a>, <a class="el" href="_cl_log_softmax_workload_8cpp_source.xhtml#l00054">ClLogSoftmaxWorkload::Execute()</a>, <a class="el" href="_cl_batch_normalization_float_workload_8cpp_source.xhtml#l00113">ClBatchNormalizationFloatWorkload::Execute()</a>, <a class="el" href="_cl_depthwise_convolution_workload_8cpp_source.xhtml#l00172">ClDepthwiseConvolutionWorkload::Execute()</a>, <a class="el" href="_cl_fully_connected_workload_8cpp_source.xhtml#l00115">ClFullyConnectedWorkload::Execute()</a>, <a class="el" href="_cl_convolution3d_workload_8cpp_source.xhtml#l00112">ClConvolution3dWorkload::Execute()</a>, <a class="el" href="_cl_transpose_convolution2d_workload_8cpp_source.xhtml#l00120">ClTransposeConvolution2dWorkload::Execute()</a>, <a class="el" href="_cl_permute_workload_8cpp_source.xhtml#l00055">ClPermuteWorkload::Execute()</a>, <a class="el" href="_cl_transpose_workload_8cpp_source.xhtml#l00055">ClTransposeWorkload::Execute()</a>, and <a class="el" href="_cl_convolution2d_workload_8cpp_source.xhtml#l00164">ClConvolution2dWorkload::Execute()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;{</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="keywordflow">try</span></div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; {</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keyword">function</span>.run();</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; }</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="keywordflow">catch</span> (cl::Error&amp; error)</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; {</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="namespacearmnn.xhtml#a2192b5ff59aacdb27f8b0238323915dc">WrapClError</a>(error, location);</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; }</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a2192b5ff59aacdb27f8b0238323915dc"><div class="ttname"><a href="namespacearmnn.xhtml#a2192b5ff59aacdb27f8b0238323915dc">armnn::WrapClError</a></div><div class="ttdeci">RuntimeException WrapClError(const cl::Error &amp;clError, const CheckLocation &amp;location)</div><div class="ttdef"><b>Definition:</b> <a href="_cl_workload_utils_8hpp_source.xhtml#l00147">ClWorkloadUtils.hpp:147</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a27e785ad7e11ffaa55b7679130085681"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a27e785ad7e11ffaa55b7679130085681">&#9670;&nbsp;</a></span>RuntimeLoadedNetworksReserve()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void RuntimeLoadedNetworksReserve </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structarmnn_1_1_runtime_impl.xhtml">armnn::RuntimeImpl</a> *&#160;</td>
+ <td class="paramname"><em>runtime</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_runtime_tests_8cpp_source.xhtml#l00030">30</a> of file <a class="el" href="_runtime_tests_8cpp_source.xhtml">RuntimeTests.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_runtime_tests_8cpp_source.xhtml#l00037">TEST_SUITE()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;{</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; runtime-&gt;m_LoadedNetworks.reserve(1);</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a86541d11fcad5246a78cbc21d637a504"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a86541d11fcad5246a78cbc21d637a504">&#9670;&nbsp;</a></span>SelectTensorHandleStrategy()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structarmnn_1_1_optimization_result.xhtml">OptimizationResult</a> SelectTensorHandleStrategy </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_graph.xhtml">Graph</a> &amp;&#160;</td>
+ <td class="paramname"><em>optGraph</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a> &amp;&#160;</td>
+ <td class="paramname"><em>backends</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_tensor_handle_factory_registry.xhtml">TensorHandleFactoryRegistry</a> &amp;&#160;</td>
+ <td class="paramname"><em>registry</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">bool&#160;</td>
+ <td class="paramname"><em>importEnabled</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; std::vector&lt; std::string &gt; &amp;&gt;&#160;</td>
+ <td class="paramname"><em>errMessages</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.xhtml#l01611">1611</a> of file <a class="el" href="_network_8cpp_source.xhtml">Network.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>, <a class="el" href="_profiling_8hpp_source.xhtml#l00220">ARMNN_SCOPED_PROFILING_EVENT</a>, <a class="el" href="_network_8cpp_source.xhtml#l01522">CalculateEdgeStrategy()</a>, <a class="el" href="_network_8cpp_source.xhtml#l01372">CalculateSlotOption()</a>, <a class="el" href="_network_8cpp_source.xhtml#l01277">CalculateSlotOptionForInput()</a>, <a class="el" href="_network_8cpp_source.xhtml#l01362">CalculateSlotOptionForOutput()</a>, <a class="el" href="_graph_8hpp_source.xhtml#l00040">Graph::ForEachLayer()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00274">Layer::GetBackendId()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00130">OutputSlot::GetConnections()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00319">Layer::GetNumOutputSlots()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00323">Layer::GetOutputSlot()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00270">Layer::GetType()</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a324118a6721dd6b8a9b9f4e327df2bf5">Input</a>, <a class="el" href="include_2armnn_2backends_2_i_tensor_handle_factory_8hpp_source.xhtml#l00046">ITensorHandleFactory::LegacyFactoryId</a>, <a class="el" href="_network_8hpp_source.xhtml#l00268">OptimizationResult::m_Error</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a29c2c02a361c9d7028472e5d92cd4a54">Output</a>, <a class="el" href="_layer_8cpp_source.xhtml#l00184">OutputSlot::SetEdgeStrategy()</a>, <a class="el" href="_layer_8cpp_source.xhtml#l00174">OutputSlot::SetTensorHandleFactory()</a>, and <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.xhtml#l01680">Optimize()</a>, and <a class="el" href="_tensor_handle_strategy_test_8cpp_source.xhtml#l00274">TEST_SUITE()</a>.</p>
+<div class="fragment"><div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>&#160;{</div><div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>&#160; <a class="code" href="_profiling_8hpp.xhtml#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(Compute::Undefined, <span class="stringliteral">&quot;Optimizer_SelectTensorHandleStrategy&quot;</span>);</div><div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>&#160; OptimizationResult result;</div><div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>&#160;</div><div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>&#160; optGraph.ForEachLayer([&amp;backends, &amp;registry, &amp;result, &amp;errMessages, importEnabled](<a class="code" href="namespacearmnn_serializer.xhtml#a9a8118be7780e95363d631cbca7e7800">Layer</a>* layer)</div><div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>&#160; {</div><div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer);</div><div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>&#160;</div><div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>&#160; <span class="comment">// Lets make sure the backend is in our list of supported backends. Something went wrong during backend</span></div><div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>&#160; <span class="comment">// assignment if this check fails</span></div><div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(backends.find(layer-&gt;GetBackendId()) != backends.end());</div><div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>&#160;</div><div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>&#160; <span class="comment">// Check each output separately</span></div><div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> slotIdx = 0; slotIdx &lt; layer-&gt;GetNumOutputSlots(); slotIdx++)</div><div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>&#160; {</div><div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>&#160; OutputSlot&amp; outputSlot = layer-&gt;GetOutputSlot(slotIdx);</div><div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>&#160;</div><div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>&#160; <a class="code" href="namespacearmnn.xhtml#a947e07902b1b5d98b57eeae34053146b">ITensorHandleFactory::FactoryId</a> slotOption = ITensorHandleFactory::LegacyFactoryId;</div><div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>&#160;</div><div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>&#160; <span class="comment">// Calculate the factory to use which results in the fewest copies being made.</span></div><div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>&#160; <span class="keywordflow">switch</span>(layer-&gt;GetType())</div><div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>&#160; {</div><div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>&#160; <span class="keywordflow">case</span> LayerType::Input:</div><div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>&#160; slotOption = <a class="code" href="namespacearmnn.xhtml#a5f34318a121e010053655204df94720c">CalculateSlotOptionForInput</a>(backends, outputSlot, registry, importEnabled);</div><div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>&#160; <span class="keywordflow">case</span> LayerType::Output:</div><div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>&#160; slotOption = <a class="code" href="namespacearmnn.xhtml#ab46c7f5f4736d550ab0e5e05a0fff4a9">CalculateSlotOptionForOutput</a>(backends, outputSlot, registry);</div><div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>&#160; slotOption = <a class="code" href="namespacearmnn.xhtml#a9cffc3a390a70c97ba1463da69077c23">CalculateSlotOption</a>(backends, outputSlot, registry, importEnabled);</div><div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>&#160; }</div><div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>&#160; outputSlot.SetTensorHandleFactory(slotOption);</div><div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>&#160;</div><div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>&#160; <span class="comment">// Now determine the &quot;best&quot; edge strategy for each connection given the slotOption.</span></div><div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> connectionIdx = 0;</div><div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; connection : outputSlot.GetConnections())</div><div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>&#160; {</div><div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn_serializer.xhtml#a9a8118be7780e95363d631cbca7e7800">Layer</a>&amp; connectedLayer = connection-&gt;GetOwningLayer();</div><div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>&#160;</div><div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>&#160; <a class="code" href="namespacearmnn.xhtml#aff209afc1dc598da399e3e78617ce016">EdgeStrategy</a> strategy = <a class="code" href="namespacearmnn.xhtml#a738d3243c1dc564304d78908c6112e4f">CalculateEdgeStrategy</a>(backends, slotOption, *layer, connectedLayer,</div><div class="line"><a name="l01657"></a><span class="lineno"> 1657</span>&#160; registry, importEnabled);</div><div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>&#160;</div><div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>&#160; <span class="keywordflow">if</span> (strategy == EdgeStrategy::Undefined)</div><div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>&#160; {</div><div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>&#160; result.m_Error = <span class="keyword">true</span>;</div><div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>&#160; <span class="keywordflow">if</span> (errMessages)</div><div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>&#160; {</div><div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>&#160; errMessages.value().emplace_back(<span class="stringliteral">&quot;Could not find valid strategy required for compatibility&quot;</span></div><div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>&#160; <span class="stringliteral">&quot; between backends.&quot;</span>);</div><div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>&#160; }</div><div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>&#160; }</div><div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>&#160;</div><div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>&#160; outputSlot.SetEdgeStrategy(connectionIdx, strategy);</div><div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>&#160;</div><div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>&#160; connectionIdx++;</div><div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>&#160; }</div><div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>&#160; }</div><div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>&#160; });</div><div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>&#160;</div><div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ab46c7f5f4736d550ab0e5e05a0fff4a9"><div class="ttname"><a href="namespacearmnn.xhtml#ab46c7f5f4736d550ab0e5e05a0fff4a9">armnn::CalculateSlotOptionForOutput</a></div><div class="ttdeci">ITensorHandleFactory::FactoryId CalculateSlotOptionForOutput(BackendsMap &amp;backends, OutputSlot &amp;slot, TensorHandleFactoryRegistry &amp;registry)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.xhtml#l01362">Network.cpp:1362</a></div></div>
+<div class="ttc" id="namespacearmnn_serializer_xhtml_a9a8118be7780e95363d631cbca7e7800"><div class="ttname"><a href="namespacearmnn_serializer.xhtml#a9a8118be7780e95363d631cbca7e7800">armnnSerializer::Layer</a></div><div class="ttdeci">Layer</div><div class="ttdef"><b>Definition:</b> <a href="_armnn_schema__generated_8h_source.xhtml#l01243">ArmnnSchema_generated.h:1243</a></div></div>
+<div class="ttc" id="_profiling_8hpp_xhtml_a5ccc65e2c464ac05ce311fdae7ede03a"><div class="ttname"><a href="_profiling_8hpp.xhtml#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a></div><div class="ttdeci">#define ARMNN_SCOPED_PROFILING_EVENT(backendId, name)</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_8hpp_source.xhtml#l00220">Profiling.hpp:220</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a947e07902b1b5d98b57eeae34053146b"><div class="ttname"><a href="namespacearmnn.xhtml#a947e07902b1b5d98b57eeae34053146b">armnn::FactoryId</a></div><div class="ttdeci">ITensorHandleFactory::FactoryId FactoryId</div><div class="ttdef"><b>Definition:</b> <a href="_mock_tensor_handle_factory_8cpp_source.xhtml#l00012">MockTensorHandleFactory.cpp:12</a></div></div>
+<div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_aff209afc1dc598da399e3e78617ce016"><div class="ttname"><a href="namespacearmnn.xhtml#aff209afc1dc598da399e3e78617ce016">armnn::EdgeStrategy</a></div><div class="ttdeci">EdgeStrategy</div><div class="ttdef"><b>Definition:</b> <a href="include_2armnn_2backends_2_i_tensor_handle_factory_8hpp_source.xhtml#l00100">ITensorHandleFactory.hpp:100</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a9cffc3a390a70c97ba1463da69077c23"><div class="ttname"><a href="namespacearmnn.xhtml#a9cffc3a390a70c97ba1463da69077c23">armnn::CalculateSlotOption</a></div><div class="ttdeci">ITensorHandleFactory::FactoryId CalculateSlotOption(BackendsMap &amp;backends, OutputSlot &amp;outputSlot, TensorHandleFactoryRegistry &amp;registry, bool importEnabled)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.xhtml#l01372">Network.cpp:1372</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a738d3243c1dc564304d78908c6112e4f"><div class="ttname"><a href="namespacearmnn.xhtml#a738d3243c1dc564304d78908c6112e4f">armnn::CalculateEdgeStrategy</a></div><div class="ttdeci">EdgeStrategy CalculateEdgeStrategy(BackendsMap &amp;backends, ITensorHandleFactory::FactoryId srcFactoryId, const Layer &amp;layer, const Layer &amp;connectedLayer, TensorHandleFactoryRegistry &amp;registry, bool importEnabled)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.xhtml#l01522">Network.cpp:1522</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a5f34318a121e010053655204df94720c"><div class="ttname"><a href="namespacearmnn.xhtml#a5f34318a121e010053655204df94720c">armnn::CalculateSlotOptionForInput</a></div><div class="ttdeci">ITensorHandleFactory::FactoryId CalculateSlotOptionForInput(BackendsMap &amp;backends, OutputSlot &amp;slot, TensorHandleFactoryRegistry &amp;registry, bool importEnabled)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.xhtml#l01277">Network.cpp:1277</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a7f8325a4bc02f2f687ba1968b595ec0a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7f8325a4bc02f2f687ba1968b595ec0a">&#9670;&nbsp;</a></span>SetAllLoggingSinks()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void SetAllLoggingSinks </td>
+ <td>(</td>
+ <td class="paramtype">bool&#160;</td>
+ <td class="paramname"><em>standardOut</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">bool&#160;</td>
+ <td class="paramname"><em>debugOut</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">bool&#160;</td>
+ <td class="paramname"><em>coloured</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_logging_8cpp_source.xhtml#l00191">191</a> of file <a class="el" href="_logging_8cpp_source.xhtml">Logging.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_logging_8hpp_source.xhtml#l00176">SimpleLogger&lt; Level &gt;::AddSink()</a>, <a class="el" href="_utils_8cpp_source.xhtml#l00018">ConfigureLogging()</a>, <a class="el" href="_tf_lite_yolo_v3_big-_armnn_8cpp_source.xhtml#l00484">main()</a>, and <a class="el" href="_unit_tests_8cpp_source.xhtml#l00023">TEST_SUITE()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;{</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; SetLoggingSinks&lt;LogSeverity::Trace&gt;(standardOut, debugOut, coloured);</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; SetLoggingSinks&lt;LogSeverity::Debug&gt;(standardOut, debugOut, coloured);</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; SetLoggingSinks&lt;LogSeverity::Info&gt;(standardOut, debugOut, coloured);</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; SetLoggingSinks&lt;LogSeverity::Warning&gt;(standardOut, debugOut, coloured);</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; SetLoggingSinks&lt;LogSeverity::Error&gt;(standardOut, debugOut, coloured);</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; SetLoggingSinks&lt;LogSeverity::Fatal&gt;(standardOut, debugOut, coloured);</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a460e01ad4cd0bfa6bde4eccaf0e77220"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a460e01ad4cd0bfa6bde4eccaf0e77220">&#9670;&nbsp;</a></span>SetClSliceData()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">auto armnn::SetClSliceData </td>
+ <td>(</td>
+ <td class="paramtype">const std::vector&lt; unsigned int &gt; &amp;&#160;</td>
+ <td class="paramname"><em>m_begin</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::vector&lt; unsigned int &gt; &amp;&#160;</td>
+ <td class="paramname"><em>m_size</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_workload_utils_8hpp_source.xhtml#l00091">91</a> of file <a class="el" href="_cl_workload_utils_8hpp_source.xhtml">ClWorkloadUtils.hpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_slice_workload_8cpp_source.xhtml#l00033">ClSliceWorkload::ClSliceWorkload()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;{</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="comment">// This function must translate the size vector given to an end vector</span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="comment">// expected by the ACL NESlice workload</span></div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <a class="code" href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> starts;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <a class="code" href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> ends;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_dims = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(m_begin.size());</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="comment">// For strided slices, we have the relationship size = (end - begin) / stride</span></div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="comment">// For slice, we assume stride to be a vector of all ones, yielding the formula</span></div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="comment">// size = (end - begin) therefore we know end = size + begin</span></div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; num_dims; i++)</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; {</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> revertedIndex = num_dims - i - 1;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; starts.set(i, static_cast&lt;int&gt;(m_begin[revertedIndex]));</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; ends.set(i, static_cast&lt;int&gt;(m_begin[revertedIndex] + m_size[revertedIndex]));</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; }</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordflow">return</span> std::make_tuple(starts, ends);</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ac6e86c1def7f674d3c4cb7f577874aa6"><div class="ttname"><a href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">armnn::Coordinates</a></div><div class="ttdeci">std::array&lt; unsigned int, MaxNumOfTensorDimensions &gt; Coordinates</div><div class="ttdef"><b>Definition:</b> <a href="_internal_types_8hpp_source.xhtml#l00015">InternalTypes.hpp:15</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a6d4bdf4368a1422943f8f2b1740ec491"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6d4bdf4368a1422943f8f2b1740ec491">&#9670;&nbsp;</a></span>SetClStridedSliceData()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">auto armnn::SetClStridedSliceData </td>
+ <td>(</td>
+ <td class="paramtype">const std::vector&lt; int &gt; &amp;&#160;</td>
+ <td class="paramname"><em>m_begin</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::vector&lt; int &gt; &amp;&#160;</td>
+ <td class="paramname"><em>m_end</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::vector&lt; int &gt; &amp;&#160;</td>
+ <td class="paramname"><em>m_stride</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_workload_utils_8hpp_source.xhtml#l00070">70</a> of file <a class="el" href="_cl_workload_utils_8hpp_source.xhtml">ClWorkloadUtils.hpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_strided_slice_workload_8cpp_source.xhtml#l00055">ClStridedSliceWorkload::ClStridedSliceWorkload()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;{</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <a class="code" href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> starts;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <a class="code" href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> ends;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <a class="code" href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> strides;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_dims = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(m_begin.size());</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; num_dims; i++) {</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> revertedIndex = num_dims - i - 1;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; starts.set(i, static_cast&lt;int&gt;(m_begin[revertedIndex]));</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; ends.set(i, static_cast&lt;int&gt;(m_end[revertedIndex]));</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; strides.set(i, static_cast&lt;int&gt;(m_stride[revertedIndex]));</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; }</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordflow">return</span> std::make_tuple(starts, ends, strides);</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ac6e86c1def7f674d3c4cb7f577874aa6"><div class="ttname"><a href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">armnn::Coordinates</a></div><div class="ttdeci">std::array&lt; unsigned int, MaxNumOfTensorDimensions &gt; Coordinates</div><div class="ttdef"><b>Definition:</b> <a href="_internal_types_8hpp_source.xhtml#l00015">InternalTypes.hpp:15</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ac9aad76a34137b6359a867b282ea7cfb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac9aad76a34137b6359a867b282ea7cfb">&#9670;&nbsp;</a></span>SetLogFilter()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void SetLogFilter </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3d">LogSeverity</a>&#160;</td>
+ <td class="paramname"><em>level</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_logging_8cpp_source.xhtml#l00073">73</a> of file <a class="el" href="_logging_8cpp_source.xhtml">Logging.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>, <a class="el" href="_utils_8hpp_source.xhtml#l00037">ARMNN_FALLTHROUGH</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4aa603905470e2a5b8c13e96b579ef0dba">Debug</a>, <a class="el" href="_logging_8hpp_source.xhtml#l00161">SimpleLogger&lt; Level &gt;::Enable()</a>, <a class="el" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da902b0d55fddef6f8d651fe1035b7d4bd">Error</a>, <a class="el" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da882384ec38ce8d9582b57e70861730e4">Fatal</a>, <a class="el" href="_logging_8cpp_source.xhtml#l00025">SimpleLogger&lt; Level &gt;::Get()</a>, <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused()</a>, <a class="el" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da4059b0251f66a18cb56f544728796875">Info</a>, <a class="el" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3dadd4ec0ac4e58f7c32a01244ae91150b1">Trace</a>, and <a class="el" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da0eaadb4fcb48a0a0ed7bc9868be9fbaa">Warning</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_logging_8hpp_source.xhtml#l00176">SimpleLogger&lt; Level &gt;::AddSink()</a>, <a class="el" href="_utils_8cpp_source.xhtml#l00018">ConfigureLogging()</a>, <a class="el" href="_tf_lite_yolo_v3_big-_armnn_8cpp_source.xhtml#l00484">main()</a>, and <a class="el" href="_unit_tests_8cpp_source.xhtml#l00023">TEST_SUITE()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;{</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; SimpleLogger&lt;LogSeverity::Trace&gt;::Get().Enable(<span class="keyword">false</span>);</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; SimpleLogger&lt;LogSeverity::Debug&gt;::Get().Enable(<span class="keyword">false</span>);</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; SimpleLogger&lt;LogSeverity::Info&gt;::Get().Enable(<span class="keyword">false</span>);</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; SimpleLogger&lt;LogSeverity::Warning&gt;::Get().Enable(<span class="keyword">false</span>);</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; SimpleLogger&lt;LogSeverity::Error&gt;::Get().Enable(<span class="keyword">false</span>);</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; SimpleLogger&lt;LogSeverity::Fatal&gt;::Get().Enable(<span class="keyword">false</span>);</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordflow">switch</span> (level)</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; {</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordflow">case</span> LogSeverity::Trace:</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; SimpleLogger&lt;LogSeverity::Trace&gt;::Get().Enable(<span class="keyword">true</span>);</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <a class="code" href="_utils_8hpp.xhtml#abbf421eb1186af0d505648ed2ea54a00">ARMNN_FALLTHROUGH</a>;</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#a5aae369ef847a00062925cea8e9be9c4">LogSeverity::Debug</a>:</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; SimpleLogger&lt;LogSeverity::Debug&gt;::Get().Enable(<span class="keyword">true</span>);</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <a class="code" href="_utils_8hpp.xhtml#abbf421eb1186af0d505648ed2ea54a00">ARMNN_FALLTHROUGH</a>;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordflow">case</span> LogSeverity::Info:</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; SimpleLogger&lt;LogSeverity::Info&gt;::Get().Enable(<span class="keyword">true</span>);</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <a class="code" href="_utils_8hpp.xhtml#abbf421eb1186af0d505648ed2ea54a00">ARMNN_FALLTHROUGH</a>;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordflow">case</span> LogSeverity::Warning:</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; SimpleLogger&lt;LogSeverity::Warning&gt;::Get().Enable(<span class="keyword">true</span>);</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <a class="code" href="_utils_8hpp.xhtml#abbf421eb1186af0d505648ed2ea54a00">ARMNN_FALLTHROUGH</a>;</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordflow">case</span> LogSeverity::Error:</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; SimpleLogger&lt;LogSeverity::Error&gt;::Get().Enable(<span class="keyword">true</span>);</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <a class="code" href="_utils_8hpp.xhtml#abbf421eb1186af0d505648ed2ea54a00">ARMNN_FALLTHROUGH</a>;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordflow">case</span> LogSeverity::Fatal:</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; SimpleLogger&lt;LogSeverity::Fatal&gt;::Get().Enable(<span class="keyword">true</span>);</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(<span class="keyword">false</span>);</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; }</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a5aae369ef847a00062925cea8e9be9c4"><div class="ttname"><a href="namespacearmnn.xhtml#a5aae369ef847a00062925cea8e9be9c4">armnn::Debug</a></div><div class="ttdeci">void Debug(const TensorInfo &amp;inputInfo, const T *inputData, LayerGuid guid, const std::string &amp;layerName, unsigned int slotIndex)</div><div class="ttdef"><b>Definition:</b> <a href="_debug_8cpp_source.xhtml#l00019">Debug.cpp:19</a></div></div>
+<div class="ttc" id="_utils_8hpp_xhtml_abbf421eb1186af0d505648ed2ea54a00"><div class="ttname"><a href="_utils_8hpp.xhtml#abbf421eb1186af0d505648ed2ea54a00">ARMNN_FALLTHROUGH</a></div><div class="ttdeci">#define ARMNN_FALLTHROUGH</div><div class="ttdef"><b>Definition:</b> <a href="_utils_8hpp_source.xhtml#l00037">Utils.hpp:37</a></div></div>
+<div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a5f523aee1752323aeaf899085649320b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5f523aee1752323aeaf899085649320b">&#9670;&nbsp;</a></span>SetLoggingSinks()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void armnn::SetLoggingSinks </td>
+ <td>(</td>
+ <td class="paramtype">bool&#160;</td>
+ <td class="paramname"><em>standardOut</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">bool&#160;</td>
+ <td class="paramname"><em>debugOut</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">bool&#160;</td>
+ <td class="paramname"><em>coloured</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_logging_8cpp_source.xhtml#l00167">167</a> of file <a class="el" href="_logging_8cpp_source.xhtml">Logging.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_logging_8hpp_source.xhtml#l00176">SimpleLogger&lt; Level &gt;::AddSink()</a>, <a class="el" href="_logging_8cpp_source.xhtml#l00025">SimpleLogger&lt; Level &gt;::Get()</a>, and <a class="el" href="_logging_8hpp_source.xhtml#l00171">SimpleLogger&lt; Level &gt;::RemoveAllSinks()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;{</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; SimpleLogger&lt;Level&gt;::Get().RemoveAllSinks();</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keywordflow">if</span> (standardOut)</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; {</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">if</span> (coloured)</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; {</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; SimpleLogger&lt;Level&gt;::Get().AddSink(</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; std::make_shared&lt;StandardOutputColourSink&gt;(Level));</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; } <span class="keywordflow">else</span></div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; {</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; SimpleLogger&lt;Level&gt;::Get().AddSink(</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; std::make_shared&lt;StandardOutputSink&gt;());</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; }</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; }</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="keywordflow">if</span> (debugOut)</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; {</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; SimpleLogger&lt;Level&gt;::Get().AddSink(</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; std::make_shared&lt;DebugOutputSink&gt;());</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; }</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="ab40e30cea5a328a3c35aa32f9b7db1c1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab40e30cea5a328a3c35aa32f9b7db1c1">&#9670;&nbsp;</a></span>SetNeonSliceData()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">auto armnn::SetNeonSliceData </td>
+ <td>(</td>
+ <td class="paramtype">const std::vector&lt; unsigned int &gt; &amp;&#160;</td>
+ <td class="paramname"><em>m_begin</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::vector&lt; unsigned int &gt; &amp;&#160;</td>
+ <td class="paramname"><em>m_size</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_workload_utils_8hpp_source.xhtml#l00113">113</a> of file <a class="el" href="_neon_workload_utils_8hpp_source.xhtml">NeonWorkloadUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_cl_workload_utils_8hpp_source.xhtml#l00168">GetOutputTensorData()</a>, and <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml#a9afbc055a017adf1bc38ee137bca6e90">ITensorHandle::Map()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_slice_workload_8cpp_source.xhtml#l00036">NeonSliceWorkload::NeonSliceWorkload()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;{</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="comment">// This function must translate the size vector given to an end vector</span></div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="comment">// expected by the ACL NESlice workload</span></div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <a class="code" href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> starts;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <a class="code" href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> ends;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_dims = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(m_begin.size());</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="comment">// For strided slices, we have the relationship size = (end - begin) / stride</span></div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="comment">// For slice, we assume stride to be a vector of all ones, yielding the formula</span></div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="comment">// size = (end - begin) therefore we know end = size + begin</span></div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; num_dims; i++)</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; {</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> revertedIndex = num_dims - i - 1;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; starts.set(i, static_cast&lt;int&gt;(m_begin[revertedIndex]));</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; ends.set(i, static_cast&lt;int&gt;(m_begin[revertedIndex] + m_size[revertedIndex]));</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; }</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordflow">return</span> std::make_tuple(starts, ends);</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ac6e86c1def7f674d3c4cb7f577874aa6"><div class="ttname"><a href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">armnn::Coordinates</a></div><div class="ttdeci">std::array&lt; unsigned int, MaxNumOfTensorDimensions &gt; Coordinates</div><div class="ttdef"><b>Definition:</b> <a href="_internal_types_8hpp_source.xhtml#l00015">InternalTypes.hpp:15</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a01d1e745f360ccd0b655214645bcef32"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a01d1e745f360ccd0b655214645bcef32">&#9670;&nbsp;</a></span>SetNeonStridedSliceData()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">auto armnn::SetNeonStridedSliceData </td>
+ <td>(</td>
+ <td class="paramtype">const std::vector&lt; int &gt; &amp;&#160;</td>
+ <td class="paramname"><em>m_begin</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::vector&lt; int &gt; &amp;&#160;</td>
+ <td class="paramname"><em>m_end</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::vector&lt; int &gt; &amp;&#160;</td>
+ <td class="paramname"><em>m_stride</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_neon_workload_utils_8hpp_source.xhtml#l00091">91</a> of file <a class="el" href="_neon_workload_utils_8hpp_source.xhtml">NeonWorkloadUtils.hpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_strided_slice_workload_8cpp_source.xhtml#l00049">NeonStridedSliceWorkload::NeonStridedSliceWorkload()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;{</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <a class="code" href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> starts;</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <a class="code" href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> ends;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <a class="code" href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> strides;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_dims = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(m_begin.size());</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; num_dims; i++)</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; {</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> revertedIndex = num_dims - i - 1;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; starts.set(i, static_cast&lt;int&gt;(m_begin[revertedIndex]));</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; ends.set(i, static_cast&lt;int&gt;(m_end[revertedIndex]));</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; strides.set(i, static_cast&lt;int&gt;(m_stride[revertedIndex]));</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; }</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordflow">return</span> std::make_tuple(starts, ends, strides);</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ac6e86c1def7f674d3c4cb7f577874aa6"><div class="ttname"><a href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">armnn::Coordinates</a></div><div class="ttdeci">std::array&lt; unsigned int, MaxNumOfTensorDimensions &gt; Coordinates</div><div class="ttdef"><b>Definition:</b> <a href="_internal_types_8hpp_source.xhtml#l00015">InternalTypes.hpp:15</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a13c7d751e4d37f65a6d40c3c6e50d2b8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a13c7d751e4d37f65a6d40c3c6e50d2b8">&#9670;&nbsp;</a></span>SetValueChecked()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void armnn::SetValueChecked </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; T &amp;&gt;&#160;</td>
+ <td class="paramname"><em>optionalRef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">V &amp;&amp;&#160;</td>
+ <td class="paramname"><em>val</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layer_support_common_8hpp_source.xhtml#l00017">17</a> of file <a class="el" href="_layer_support_common_8hpp_source.xhtml">LayerSupportCommon.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_optional_8hpp_source.xhtml#l00146">OptionalReferenceSwitch&lt; std::is_reference&lt; T &gt;::value, T &gt;::value()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_layer_support_common_8hpp_source.xhtml#l00070">FalseFuncF16()</a>, <a class="el" href="_layer_support_common_8hpp_source.xhtml#l00078">FalseFuncF32()</a>, <a class="el" href="_layer_support_common_8hpp_source.xhtml#l00094">FalseFuncI32()</a>, <a class="el" href="_layer_support_common_8hpp_source.xhtml#l00086">FalseFuncU8()</a>, <a class="el" href="_layer_support_common_8hpp_source.xhtml#l00110">FalseInputFuncF16()</a>, <a class="el" href="_layer_support_common_8hpp_source.xhtml#l00102">FalseInputFuncF32()</a>, <a class="el" href="_layer_support_common_8hpp_source.xhtml#l00126">FalseOutputFuncF16()</a>, <a class="el" href="_layer_support_common_8hpp_source.xhtml#l00118">FalseOutputFuncF32()</a>, <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00695">ClLayerSupport::IsConcatSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00674">NeonLayerSupport::IsConcatSupported()</a>, <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01324">ClLayerSupport::IsSplitterSupported()</a>, and <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01330">NeonLayerSupport::IsSplitterSupported()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;{</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keywordflow">if</span> (optionalRef)</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; {</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; optionalRef.value() = val;</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; }</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a044ea0cc993d4d1fbe4ec877b17b8d39"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a044ea0cc993d4d1fbe4ec877b17b8d39">&#9670;&nbsp;</a></span>Slice()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Slice </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>inputInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_slice_descriptor.xhtml">SliceDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const void *&#160;</td>
+ <td class="paramname"><em>inputData</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void *&#160;</td>
+ <td class="paramname"><em>outputData</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>dataTypeSize</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="backends_2reference_2workloads_2_slice_8cpp_source.xhtml#l00014">14</a> of file <a class="el" href="backends_2reference_2workloads_2_slice_8cpp_source.xhtml">Slice.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00174">TensorShape::GetNumDimensions()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</a>, <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused()</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01196">SliceDescriptor::m_Begin</a>, and <a class="el" href="_descriptors_8hpp_source.xhtml#l01199">SliceDescriptor::m_Size</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_test_name_and_descriptor_layer_visitor_8cpp_source.xhtml#l00274">TEST_SUITE()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;{</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> TensorShape&amp; inputShape = inputInfo.GetShape();</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numDims = inputShape.GetNumDimensions();</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(descriptor.m_Begin.size() == numDims);</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(descriptor.m_Size.size() == numDims);</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; constexpr <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> maxNumDims = 4;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(numDims &lt;= maxNumDims);</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; std::vector&lt;unsigned int&gt; paddedInput(4);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; std::vector&lt;unsigned int&gt; paddedBegin(4);</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; std::vector&lt;unsigned int&gt; paddedSize (4);</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numPaddingDims = maxNumDims - numDims;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0u; i &lt; maxNumDims; ++i)</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; {</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">if</span> (i &lt; numPaddingDims)</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; {</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; paddedInput[i] = 1u;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; paddedBegin[i] = 0u;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; paddedSize[i] = 1u;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; }</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; {</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j = i - numPaddingDims;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; paddedInput[i] = inputShape[j];</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; paddedBegin[i] = descriptor.m_Begin[j];</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; paddedSize[i] = descriptor.m_Size[j];</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; }</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; }</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dim0 = paddedInput[0];</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dim1 = paddedInput[1];</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dim2 = paddedInput[2];</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dim3 = paddedInput[3];</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> begin0 = paddedBegin[0];</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> begin1 = paddedBegin[1];</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> begin2 = paddedBegin[2];</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> begin3 = paddedBegin[3];</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> size0 = paddedSize[0];</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> size1 = paddedSize[1];</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> size2 = paddedSize[2];</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> size3 = paddedSize[3];</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(begin0 + size0 &lt;= dim0);</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(begin1 + size1 &lt;= dim1);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(begin2 + size2 &lt;= dim2);</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(begin3 + size3 &lt;= dim3);</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* input = <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*<span class="keyword">&gt;</span>(inputData);</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* output = <span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*<span class="keyword">&gt;</span>(outputData);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(dim0);</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx0 = begin0; idx0 &lt; begin0 + size0; ++idx0)</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; {</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx1 = begin1; idx1 &lt; begin1 + size1; ++idx1)</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; {</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx2 = begin2; idx2 &lt; begin2 + size2; ++idx2)</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; {</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx3 = begin3; idx3 &lt; begin3 + size3; ++idx3)</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; {</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputOffset =</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; (((idx0 * dim1 + idx1) * dim2 + idx2) * dim3 + idx3) * dataTypeSize;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; ::memcpy(output, input + inputOffset, dataTypeSize);</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; output += dataTypeSize;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; }</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; }</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; }</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; }</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="aa999ff2585ad75b95954a9323f63c32b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa999ff2585ad75b95954a9323f63c32b">&#9670;&nbsp;</a></span>Softmax()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Softmax </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>in</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>out</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>inputTensorInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float&#160;</td>
+ <td class="paramname"><em>beta</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>axis</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Computes the softmax function on some inputs, into outputs, with a shape given by tensorInfo. </p>
+
+<p class="definition">Definition at line <a class="el" href="backends_2reference_2workloads_2_softmax_8cpp_source.xhtml#l00017">17</a> of file <a class="el" href="backends_2reference_2workloads_2_softmax_8cpp_source.xhtml">Softmax.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00015">ARMNN_ASSERT_MSG</a>, <a class="el" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Decoder&lt; IType &gt;::Get()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00174">TensorShape::GetNumDimensions()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00195">TensorInfo::GetNumDimensions()</a>, <a class="el" href="_tensor_utils_8cpp_source.xhtml#l00134">armnnUtils::GetNumElementsBetween()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</a>, and <a class="el" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_test_name_and_descriptor_layer_visitor_8cpp_source.xhtml#l00274">TEST_SUITE()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;{</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(axis &lt; static_cast&lt;int&gt;(inputTensorInfo.GetNumDimensions()),</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="stringliteral">&quot;Required axis index greater than number of dimensions.&quot;</span>);</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(axis &gt;= -static_cast&lt;int&gt;(inputTensorInfo.GetNumDimensions()),</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="stringliteral">&quot;Required axis index lower than negative of the number of dimensions&quot;</span>);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> uAxis = axis &lt; 0 ?</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; inputTensorInfo.GetNumDimensions() - <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(abs(axis))</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; : static_cast&lt;unsigned int&gt;(axis);</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keyword">const</span> TensorShape&amp; inputShape = inputTensorInfo.GetShape();</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outerSize = <a class="code" href="namespacearmnn_utils.xhtml#af57864f5e03358d14c2988edae912b8b">armnnUtils::GetNumElementsBetween</a>(inputShape, 0, uAxis);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> axisSize = inputShape[uAxis];</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> innerSize = <a class="code" href="namespacearmnn_utils.xhtml#af57864f5e03358d14c2988edae912b8b">armnnUtils::GetNumElementsBetween</a>(inputShape,</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; uAxis + 1,</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; inputShape.GetNumDimensions());</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outer = 0; outer &lt; outerSize; ++outer)</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; {</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputBeginIdx = outer * axisSize * innerSize;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputEndIdx = inputBeginIdx + axisSize * innerSize;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputBeginIdx = outer * axisSize * innerSize;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inner = 0; inner &lt; innerSize; ++inner, ++inputBeginIdx, ++inputEndIdx, ++outputBeginIdx)</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; {</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="comment">// Find max</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordtype">float</span> maxValue = std::numeric_limits&lt;float&gt;::lowest();</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iter = inputBeginIdx; iter &lt; inputEndIdx; iter += innerSize)</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; {</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; in[iter];</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; maxValue = std::max(maxValue, in.<a class="code" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Get</a>());</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; }</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="comment">// Compute sum</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordtype">float</span> sum = 0.0f;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iter = inputBeginIdx; iter &lt; inputEndIdx; iter += innerSize)</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; {</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; in[iter];</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; sum += std::exp((in.<a class="code" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Get</a>() - maxValue) * beta);</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; }</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="comment">// Compute result</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputIter = outputBeginIdx;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; out[outputIter];</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iter = inputBeginIdx; iter &lt; inputEndIdx; iter += innerSize, outputIter += innerSize)</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; {</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; out[outputIter];</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; in[iter];</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; out.<a class="code" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Set</a>(std::exp((in.<a class="code" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Get</a>() - maxValue) * beta) / sum);</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; }</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; }</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; }</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;}</div><div class="ttc" id="namespacearmnn_utils_xhtml_af57864f5e03358d14c2988edae912b8b"><div class="ttname"><a href="namespacearmnn_utils.xhtml#af57864f5e03358d14c2988edae912b8b">armnnUtils::GetNumElementsBetween</a></div><div class="ttdeci">unsigned int GetNumElementsBetween(const armnn::TensorShape &amp;shape, unsigned int firstAxisInclusive, unsigned int lastAxisExclusive)</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_utils_8cpp_source.xhtml#l00134">TensorUtils.cpp:134</a></div></div>
+<div class="ttc" id="classarmnn_1_1_encoder_xhtml_ae3b62b846a9c239f332830b9e36030eb"><div class="ttname"><a href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">armnn::Encoder::Set</a></div><div class="ttdeci">virtual void Set(IType right)=0</div></div>
+<div class="ttc" id="classarmnn_1_1_decoder_xhtml_ac729108381e2340bea12877971713ecb"><div class="ttname"><a href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">armnn::Decoder::Get</a></div><div class="ttdeci">virtual IType Get() const =0</div></div>
+<div class="ttc" id="_assert_8hpp_xhtml_a91c4dfde57907d7698c7531785690a7f"><div class="ttname"><a href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a></div><div class="ttdeci">#define ARMNN_ASSERT_MSG(COND, MSG)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00015">Assert.hpp:15</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a4a180e425d4c19b2cdea4ce5760180e1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4a180e425d4c19b2cdea4ce5760180e1">&#9670;&nbsp;</a></span>SpaceToBatchNd()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void SpaceToBatchNd </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>inputInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>outputInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_space_to_batch_nd_descriptor.xhtml">SpaceToBatchNdDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>params</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>inputData</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>outputData</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="backends_2reference_2workloads_2_space_to_batch_n_d_8cpp_source.xhtml#l00034">34</a> of file <a class="el" href="backends_2reference_2workloads_2_space_to_batch_n_d_8cpp_source.xhtml">SpaceToBatchNd.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Decoder&lt; IType &gt;::Get()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00023">DataLayoutIndexed::GetChannelsIndex()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00024">DataLayoutIndexed::GetHeightIndex()</a>, <a class="el" href="backends_2reference_2workloads_2_space_to_batch_n_d_8cpp_source.xhtml#l00015">GetOffset()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00025">DataLayoutIndexed::GetWidthIndex()</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01042">SpaceToBatchNdDescriptor::m_BlockShape</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01047">SpaceToBatchNdDescriptor::m_DataLayout</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01045">SpaceToBatchNdDescriptor::m_PadList</a>, <a class="el" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>, and <a class="el" href="backends_2reference_2workloads_2_space_to_batch_n_d_8cpp_source.xhtml#l00034">SpaceToBatchNd()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="backends_2reference_2workloads_2_space_to_batch_n_d_8cpp_source.xhtml#l00034">SpaceToBatchNd()</a>, <a class="el" href="_space_to_batch_nd_layer_8cpp_source.xhtml#l00023">SpaceToBatchNdLayer::SpaceToBatchNdLayer()</a>, and <a class="el" href="_test_name_and_descriptor_layer_visitor_8cpp_source.xhtml#l00274">TEST_SUITE()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;{</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml">DataLayoutIndexed</a> dataLayout = params.<a class="code" href="structarmnn_1_1_space_to_batch_nd_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a>;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>&amp; inputShape = inputInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>();</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>&amp; outputShape = outputInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>();</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channels = inputShape[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a861b2621ee46e4b63379988b360b8cd9">GetChannelsIndex</a>()];</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputBatchSize = inputShape[0];</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputHeight = inputShape[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a61c00316c443adc233c24e85c6c5b740">GetHeightIndex</a>()];</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputWidth = inputShape[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a414e6f95548e6f7a01d5028b55ad3941">GetWidthIndex</a>()];</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputBatchSize = outputShape[0];</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputHeight = outputShape[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a61c00316c443adc233c24e85c6c5b740">GetHeightIndex</a>()];</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputWidth = outputShape[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a414e6f95548e6f7a01d5028b55ad3941">GetWidthIndex</a>()];</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> blockHeight = params.<a class="code" href="structarmnn_1_1_space_to_batch_nd_descriptor.xhtml#a02e143524aefddd40b485fcf7dea6696">m_BlockShape</a>[0];</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> blockWidth = params.<a class="code" href="structarmnn_1_1_space_to_batch_nd_descriptor.xhtml#a02e143524aefddd40b485fcf7dea6696">m_BlockShape</a>[1];</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> paddingTop = params.<a class="code" href="structarmnn_1_1_space_to_batch_nd_descriptor.xhtml#a85f98c94e11f65a6b73f831735c040f3">m_PadList</a>[0].first;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> paddingLeft = params.<a class="code" href="structarmnn_1_1_space_to_batch_nd_descriptor.xhtml#a85f98c94e11f65a6b73f831735c040f3">m_PadList</a>[1].first;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outB = 0; outB &lt; outputBatchSize; outB++)</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; {</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inB = outB % inputBatchSize;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> shiftW = (outB / inputBatchSize) % blockWidth;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> shiftH = (outB / inputBatchSize) / blockWidth;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outH = 0; outH &lt; outputHeight; outH++)</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; {</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outW = 0; outW &lt; outputWidth; outW++)</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; {</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordflow">if</span> (outH * blockHeight + shiftH &lt; paddingTop ||</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; outH * blockHeight + shiftH &gt;= paddingTop + inputHeight ||</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; outW * blockWidth + shiftW &lt; paddingLeft ||</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; outW * blockWidth + shiftW &gt;= paddingLeft + inputWidth)</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; {</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> c = 0; c &lt; channels; c++)</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; {</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outOffset = <a class="code" href="namespacearmnn.xhtml#adafb0fd0a3f6435c2bdf41f971761ecf">GetOffset</a>(outputShape,</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; outB,</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; outH,</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; outW,</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; c,</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; dataLayout);</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; outputData += outOffset;</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; outputData.<a class="code" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Set</a>(0);</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; outputData -= outOffset;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; }</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; }</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; {</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> c = 0; c &lt; channels; c++)</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; {</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inOffset = <a class="code" href="namespacearmnn.xhtml#adafb0fd0a3f6435c2bdf41f971761ecf">GetOffset</a>(inputShape,</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; inB,</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; (outH * blockHeight + shiftH) - paddingTop,</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; (outW * blockWidth + shiftW) - paddingLeft,</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; c,</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; dataLayout);</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outOffset = <a class="code" href="namespacearmnn.xhtml#adafb0fd0a3f6435c2bdf41f971761ecf">GetOffset</a>(outputShape,</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; outB,</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; outH,</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; outW,</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; c,</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; dataLayout);</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; outputData += outOffset;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; inputData += inOffset;</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; outputData.<a class="code" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Set</a>(inputData.<a class="code" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Get</a>());</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; inputData -= inOffset;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; outputData -= outOffset;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; }</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; }</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; }</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; }</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; }</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;}</div><div class="ttc" id="classarmnn_utils_1_1_data_layout_indexed_xhtml_a414e6f95548e6f7a01d5028b55ad3941"><div class="ttname"><a href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a414e6f95548e6f7a01d5028b55ad3941">armnnUtils::DataLayoutIndexed::GetWidthIndex</a></div><div class="ttdeci">unsigned int GetWidthIndex() const</div><div class="ttdef"><b>Definition:</b> <a href="_data_layout_indexed_8hpp_source.xhtml#l00025">DataLayoutIndexed.hpp:25</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a8b5d0f8a24e9d9238f412260a552acf8"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">armnn::TensorInfo::GetShape</a></div><div class="ttdeci">const TensorShape &amp; GetShape() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00191">Tensor.hpp:191</a></div></div>
+<div class="ttc" id="classarmnn_1_1_encoder_xhtml_ae3b62b846a9c239f332830b9e36030eb"><div class="ttname"><a href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">armnn::Encoder::Set</a></div><div class="ttdeci">virtual void Set(IType right)=0</div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_shape_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00020">Tensor.hpp:20</a></div></div>
+<div class="ttc" id="structarmnn_1_1_space_to_batch_nd_descriptor_xhtml_a85f98c94e11f65a6b73f831735c040f3"><div class="ttname"><a href="structarmnn_1_1_space_to_batch_nd_descriptor.xhtml#a85f98c94e11f65a6b73f831735c040f3">armnn::SpaceToBatchNdDescriptor::m_PadList</a></div><div class="ttdeci">std::vector&lt; std::pair&lt; unsigned int, unsigned int &gt; &gt; m_PadList</div><div class="ttdoc">Specifies the padding values for the input dimension: heightPad{top, bottom} widthPad{left, right}. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01045">Descriptors.hpp:1045</a></div></div>
+<div class="ttc" id="classarmnn_utils_1_1_data_layout_indexed_xhtml_a61c00316c443adc233c24e85c6c5b740"><div class="ttname"><a href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a61c00316c443adc233c24e85c6c5b740">armnnUtils::DataLayoutIndexed::GetHeightIndex</a></div><div class="ttdeci">unsigned int GetHeightIndex() const</div><div class="ttdef"><b>Definition:</b> <a href="_data_layout_indexed_8hpp_source.xhtml#l00024">DataLayoutIndexed.hpp:24</a></div></div>
+<div class="ttc" id="structarmnn_1_1_space_to_batch_nd_descriptor_xhtml_a6089e1ca91914015777ea780a513131a"><div class="ttname"><a href="structarmnn_1_1_space_to_batch_nd_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">armnn::SpaceToBatchNdDescriptor::m_DataLayout</a></div><div class="ttdeci">DataLayout m_DataLayout</div><div class="ttdoc">The data layout to be used (NCHW, NHWC). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01047">Descriptors.hpp:1047</a></div></div>
+<div class="ttc" id="classarmnn_1_1_decoder_xhtml_ac729108381e2340bea12877971713ecb"><div class="ttname"><a href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">armnn::Decoder::Get</a></div><div class="ttdeci">virtual IType Get() const =0</div></div>
+<div class="ttc" id="namespacearmnn_xhtml_adafb0fd0a3f6435c2bdf41f971761ecf"><div class="ttname"><a href="namespacearmnn.xhtml#adafb0fd0a3f6435c2bdf41f971761ecf">armnn::GetOffset</a></div><div class="ttdeci">unsigned int GetOffset(const TensorShape &amp;shape, unsigned int b, unsigned int h, unsigned int w, unsigned int c, const DataLayoutIndexed &amp;dataLayout)</div><div class="ttdef"><b>Definition:</b> <a href="backends_2reference_2workloads_2_space_to_batch_n_d_8cpp_source.xhtml#l00015">SpaceToBatchNd.cpp:15</a></div></div>
+<div class="ttc" id="classarmnn_utils_1_1_data_layout_indexed_xhtml"><div class="ttname"><a href="classarmnn_utils_1_1_data_layout_indexed.xhtml">armnnUtils::DataLayoutIndexed</a></div><div class="ttdoc">Provides access to the appropriate indexes for Channels, Height and Width based on DataLayout...</div><div class="ttdef"><b>Definition:</b> <a href="_data_layout_indexed_8hpp_source.xhtml#l00017">DataLayoutIndexed.hpp:17</a></div></div>
+<div class="ttc" id="structarmnn_1_1_space_to_batch_nd_descriptor_xhtml_a02e143524aefddd40b485fcf7dea6696"><div class="ttname"><a href="structarmnn_1_1_space_to_batch_nd_descriptor.xhtml#a02e143524aefddd40b485fcf7dea6696">armnn::SpaceToBatchNdDescriptor::m_BlockShape</a></div><div class="ttdeci">std::vector&lt; unsigned int &gt; m_BlockShape</div><div class="ttdoc">Block shape value. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01042">Descriptors.hpp:1042</a></div></div>
+<div class="ttc" id="classarmnn_utils_1_1_data_layout_indexed_xhtml_a861b2621ee46e4b63379988b360b8cd9"><div class="ttname"><a href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a861b2621ee46e4b63379988b360b8cd9">armnnUtils::DataLayoutIndexed::GetChannelsIndex</a></div><div class="ttdeci">unsigned int GetChannelsIndex() const</div><div class="ttdef"><b>Definition:</b> <a href="_data_layout_indexed_8hpp_source.xhtml#l00023">DataLayoutIndexed.hpp:23</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a5e1dc69443b64ad16b669388a6023f7a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5e1dc69443b64ad16b669388a6023f7a">&#9670;&nbsp;</a></span>SpaceToDepth()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void SpaceToDepth </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>inputInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>outputInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_space_to_depth_descriptor.xhtml">SpaceToDepthDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>params</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>inputData</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>outputData</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_space_to_depth_8cpp_source.xhtml#l00036">36</a> of file <a class="el" href="_space_to_depth_8cpp_source.xhtml">SpaceToDepth.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Decoder&lt; IType &gt;::Get()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00023">DataLayoutIndexed::GetChannelsIndex()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00024">DataLayoutIndexed::GetHeightIndex()</a>, <a class="el" href="backends_2reference_2workloads_2_space_to_batch_n_d_8cpp_source.xhtml#l00015">GetOffset()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00025">DataLayoutIndexed::GetWidthIndex()</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01068">SpaceToDepthDescriptor::m_BlockSize</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01071">SpaceToDepthDescriptor::m_DataLayout</a>, <a class="el" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>, and <a class="el" href="_space_to_depth_8cpp_source.xhtml#l00036">SpaceToDepth()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_space_to_depth_8cpp_source.xhtml#l00036">SpaceToDepth()</a>, <a class="el" href="_space_to_depth_layer_8cpp_source.xhtml#l00023">SpaceToDepthLayer::SpaceToDepthLayer()</a>, and <a class="el" href="_test_name_and_descriptor_layer_visitor_8cpp_source.xhtml#l00274">TEST_SUITE()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;{</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml">DataLayoutIndexed</a> dataLayout = params.<a class="code" href="structarmnn_1_1_space_to_depth_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a>;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>&amp; inputShape = inputInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>();</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>&amp; outputShape = outputInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>();</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputBatchSize = inputShape[0];</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputChannels = inputShape[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a861b2621ee46e4b63379988b360b8cd9">GetChannelsIndex</a>()];</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputHeight = outputShape[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a61c00316c443adc233c24e85c6c5b740">GetHeightIndex</a>()];</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputWidth = outputShape[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a414e6f95548e6f7a01d5028b55ad3941">GetWidthIndex</a>()];</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputChannels = outputShape[dataLayout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a861b2621ee46e4b63379988b360b8cd9">GetChannelsIndex</a>()];</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> blockSize = params.<a class="code" href="structarmnn_1_1_space_to_depth_descriptor.xhtml#a6c6b8957f1e176867e5fb05b1a1a1486">m_BlockSize</a>;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordflow">if</span> (blockSize == 0)</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; {</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="stringliteral">&quot;Input shape must be divisible by block size in all spatial dimensions: Block size is&quot;</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="stringliteral">&quot; equal to zero&quot;</span>);</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; }</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outChannelIndex = 0; outChannelIndex &lt; outputChannels; outChannelIndex++)</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; {</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inChannelIndex = outChannelIndex % inputChannels;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> shiftW = (outChannelIndex / inputChannels) % blockSize;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> shiftH = (outChannelIndex / inputChannels) / blockSize;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outH = 0; outH &lt; outputHeight; outH++)</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; {</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outW = 0; outW &lt; outputWidth; outW++)</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; {</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inBatchIndex = 0; inBatchIndex &lt; inputBatchSize; inBatchIndex++)</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; {</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inOffset = <a class="code" href="namespacearmnn.xhtml#adafb0fd0a3f6435c2bdf41f971761ecf">GetOffset</a>(inputShape,</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; inChannelIndex,</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; (outH * blockSize + shiftH),</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; (outW * blockSize + shiftW),</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; inBatchIndex,</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; dataLayout);</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outOffset = <a class="code" href="namespacearmnn.xhtml#adafb0fd0a3f6435c2bdf41f971761ecf">GetOffset</a>(outputShape,</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; outChannelIndex,</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; outH,</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; outW,</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; inBatchIndex,</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; dataLayout);</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; outputData += outOffset;</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; inputData += inOffset;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; outputData.<a class="code" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Set</a>(inputData.<a class="code" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Get</a>());</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; inputData -= inOffset;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; outputData -= outOffset;</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; }</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; }</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; }</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; }</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;}</div><div class="ttc" id="classarmnn_utils_1_1_data_layout_indexed_xhtml_a414e6f95548e6f7a01d5028b55ad3941"><div class="ttname"><a href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a414e6f95548e6f7a01d5028b55ad3941">armnnUtils::DataLayoutIndexed::GetWidthIndex</a></div><div class="ttdeci">unsigned int GetWidthIndex() const</div><div class="ttdef"><b>Definition:</b> <a href="_data_layout_indexed_8hpp_source.xhtml#l00025">DataLayoutIndexed.hpp:25</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a8b5d0f8a24e9d9238f412260a552acf8"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">armnn::TensorInfo::GetShape</a></div><div class="ttdeci">const TensorShape &amp; GetShape() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00191">Tensor.hpp:191</a></div></div>
+<div class="ttc" id="classarmnn_1_1_encoder_xhtml_ae3b62b846a9c239f332830b9e36030eb"><div class="ttname"><a href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">armnn::Encoder::Set</a></div><div class="ttdeci">virtual void Set(IType right)=0</div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_shape_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00020">Tensor.hpp:20</a></div></div>
+<div class="ttc" id="classarmnn_utils_1_1_data_layout_indexed_xhtml_a61c00316c443adc233c24e85c6c5b740"><div class="ttname"><a href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a61c00316c443adc233c24e85c6c5b740">armnnUtils::DataLayoutIndexed::GetHeightIndex</a></div><div class="ttdeci">unsigned int GetHeightIndex() const</div><div class="ttdef"><b>Definition:</b> <a href="_data_layout_indexed_8hpp_source.xhtml#l00024">DataLayoutIndexed.hpp:24</a></div></div>
+<div class="ttc" id="classarmnn_1_1_decoder_xhtml_ac729108381e2340bea12877971713ecb"><div class="ttname"><a href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">armnn::Decoder::Get</a></div><div class="ttdeci">virtual IType Get() const =0</div></div>
+<div class="ttc" id="namespacearmnn_xhtml_adafb0fd0a3f6435c2bdf41f971761ecf"><div class="ttname"><a href="namespacearmnn.xhtml#adafb0fd0a3f6435c2bdf41f971761ecf">armnn::GetOffset</a></div><div class="ttdeci">unsigned int GetOffset(const TensorShape &amp;shape, unsigned int b, unsigned int h, unsigned int w, unsigned int c, const DataLayoutIndexed &amp;dataLayout)</div><div class="ttdef"><b>Definition:</b> <a href="backends_2reference_2workloads_2_space_to_batch_n_d_8cpp_source.xhtml#l00015">SpaceToBatchNd.cpp:15</a></div></div>
+<div class="ttc" id="classarmnn_utils_1_1_data_layout_indexed_xhtml"><div class="ttname"><a href="classarmnn_utils_1_1_data_layout_indexed.xhtml">armnnUtils::DataLayoutIndexed</a></div><div class="ttdoc">Provides access to the appropriate indexes for Channels, Height and Width based on DataLayout...</div><div class="ttdef"><b>Definition:</b> <a href="_data_layout_indexed_8hpp_source.xhtml#l00017">DataLayoutIndexed.hpp:17</a></div></div>
+<div class="ttc" id="classarmnn_1_1_invalid_argument_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00080">Exceptions.hpp:80</a></div></div>
+<div class="ttc" id="structarmnn_1_1_space_to_depth_descriptor_xhtml_a6c6b8957f1e176867e5fb05b1a1a1486"><div class="ttname"><a href="structarmnn_1_1_space_to_depth_descriptor.xhtml#a6c6b8957f1e176867e5fb05b1a1a1486">armnn::SpaceToDepthDescriptor::m_BlockSize</a></div><div class="ttdeci">unsigned int m_BlockSize</div><div class="ttdoc">Scalar specifying the input block size. It must be &gt;= 1. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01068">Descriptors.hpp:1068</a></div></div>
+<div class="ttc" id="structarmnn_1_1_space_to_depth_descriptor_xhtml_a6089e1ca91914015777ea780a513131a"><div class="ttname"><a href="structarmnn_1_1_space_to_depth_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">armnn::SpaceToDepthDescriptor::m_DataLayout</a></div><div class="ttdeci">DataLayout m_DataLayout</div><div class="ttdoc">The data layout to be used (NCHW, NHWC). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01071">Descriptors.hpp:1071</a></div></div>
+<div class="ttc" id="classarmnn_utils_1_1_data_layout_indexed_xhtml_a861b2621ee46e4b63379988b360b8cd9"><div class="ttname"><a href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a861b2621ee46e4b63379988b360b8cd9">armnnUtils::DataLayoutIndexed::GetChannelsIndex</a></div><div class="ttdeci">unsigned int GetChannelsIndex() const</div><div class="ttdef"><b>Definition:</b> <a href="_data_layout_indexed_8hpp_source.xhtml#l00023">DataLayoutIndexed.hpp:23</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a7cc1fc0ee4d88d16e9684a9c964718ce"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7cc1fc0ee4d88d16e9684a9c964718ce">&#9670;&nbsp;</a></span>Split()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Split </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_splitter_queue_descriptor.xhtml">SplitterQueueDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>data</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::vector&lt; <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> *&gt;&#160;</td>
+ <td class="paramname"><em>inputs</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::vector&lt; <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> *&gt;&#160;</td>
+ <td class="paramname"><em>outputs</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_splitter_8cpp_source.xhtml#l00021">21</a> of file <a class="el" href="_splitter_8cpp_source.xhtml">Splitter.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>, <a class="el" href="classarmnn_1_1_encoder.xhtml#ac729108381e2340bea12877971713ecb">Encoder&lt; IType &gt;::Get()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00195">TensorInfo::GetNumDimensions()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</a>, <a class="el" href="_ref_workload_utils_8hpp_source.xhtml#l00026">GetTensorInfo()</a>, <a class="el" href="include_2armnn_2backends_2_workload_data_8hpp_source.xhtml#l00107">SplitterQueueDescriptor::ViewOrigin::m_Origin</a>, <a class="el" href="include_2armnn_2backends_2_workload_data_8hpp_source.xhtml#l00112">SplitterQueueDescriptor::m_ViewOrigins</a>, and <a class="el" href="_types_8hpp_source.xhtml#l00018">MaxNumOfTensorDimensions</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_ref_splitter_workload_8cpp_source.xhtml#l00019">RefSplitterWorkload::ExecuteAsync()</a>, and <a class="el" href="_splitter_8hpp_source.xhtml#l00017">Splitter()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;{</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> TensorInfo&amp; inputInfo = <a class="code" href="namespacearmnn_utils.xhtml#acee63cd08da47910fc166a1990988fa8">GetTensorInfo</a>(inputs[0]);</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; std::unique_ptr&lt;Decoder&lt;float&gt;&gt; decoderPtr =</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; MakeDecoder&lt;float&gt;(inputInfo, inputs[0]-&gt;Map());</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; Decoder&lt;float&gt;&amp; decoder = *decoderPtr;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index = 0; index &lt; inputInfo.GetNumElements(); ++index)</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; {</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> indices[<a class="code" href="namespacearmnn.xhtml#abdcd184ed3bd648bb31d385040cafd5d">MaxNumOfTensorDimensions</a>] = { 0 };</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> indexRemainder = index;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dimensionStride = inputInfo.GetNumElements();</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i&lt;inputInfo.GetNumDimensions(); i++)</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; {</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; dimensionStride /= inputInfo.GetShape()[i];</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; indices[i] = indexRemainder / dimensionStride; <span class="comment">// Use integer division to round down.</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; indexRemainder -= indices[i] * dimensionStride;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; }</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> viewIdx = 0; viewIdx &lt; data.m_ViewOrigins.size(); ++viewIdx)</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; {</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; SplitterQueueDescriptor::ViewOrigin <span class="keyword">const</span>&amp; view = data.m_ViewOrigins[viewIdx];</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="comment">//Split view extents are defined by the size of (the corresponding) input tensor.</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keyword">const</span> TensorInfo&amp; outputInfo = <a class="code" href="namespacearmnn_utils.xhtml#acee63cd08da47910fc166a1990988fa8">GetTensorInfo</a>(outputs[viewIdx]);</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(outputInfo.GetNumDimensions() == inputInfo.GetNumDimensions());</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="comment">// Check all dimensions to see if this element is inside the given input view.</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordtype">bool</span> insideView = <span class="keyword">true</span>;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i&lt;outputInfo.GetNumDimensions(); i++)</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; {</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">if</span> (indices[i] &lt; view.m_Origin[i])</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; {</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; insideView = <span class="keyword">false</span>;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; }</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordflow">if</span> (indices[i] &gt;= view.m_Origin[i] + outputInfo.GetShape()[i])</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; {</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; insideView = <span class="keyword">false</span>;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; }</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; }</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">if</span> (insideView)</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; {</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; std::unique_ptr&lt;Encoder&lt;float&gt;&gt; encoderPtr =</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; MakeEncoder&lt;float&gt;(outputInfo, outputs[viewIdx]-&gt;Map());</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; Encoder&lt;float&gt;&amp; encoder = *encoderPtr;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outIndex = 0;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dimensionStride = 1;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordtype">float</span> inputValue = 0.f;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = outputInfo.GetNumDimensions(); i-- &gt; 0;)</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; {</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; outIndex += dimensionStride * (indices[i] - view.m_Origin[i]);</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; dimensionStride *= outputInfo.GetShape()[i];</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; }</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; decoder += index;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; inputValue = decoder.Get();</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; decoder -= index;</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; encoder += outIndex;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; encoder.Set(inputValue);</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; }</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; }</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; }</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;}</div><div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
+<div class="ttc" id="namespacearmnn_utils_xhtml_acee63cd08da47910fc166a1990988fa8"><div class="ttname"><a href="namespacearmnn_utils.xhtml#acee63cd08da47910fc166a1990988fa8">armnnUtils::GetTensorInfo</a></div><div class="ttdeci">armnn::TensorInfo GetTensorInfo(unsigned int numberOfBatches, unsigned int numberOfChannels, unsigned int height, unsigned int width, const armnn::DataLayout dataLayout, const armnn::DataType dataType)</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_utils_8cpp_source.xhtml#l00038">TensorUtils.cpp:38</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_abdcd184ed3bd648bb31d385040cafd5d"><div class="ttname"><a href="namespacearmnn.xhtml#abdcd184ed3bd648bb31d385040cafd5d">armnn::MaxNumOfTensorDimensions</a></div><div class="ttdeci">constexpr unsigned int MaxNumOfTensorDimensions</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00018">Types.hpp:18</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ac90715a0439d1e77922996a27ef3a534"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac90715a0439d1e77922996a27ef3a534">&#9670;&nbsp;</a></span>Splitter()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void armnn::Splitter </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_splitter_queue_descriptor.xhtml">SplitterQueueDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>data</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::vector&lt; <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> *&gt;&#160;</td>
+ <td class="paramname"><em>inputs</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::vector&lt; <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> *&gt;&#160;</td>
+ <td class="paramname"><em>outputs</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_splitter_8hpp_source.xhtml#l00017">17</a> of file <a class="el" href="_splitter_8hpp_source.xhtml">Splitter.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00195">TensorInfo::GetNumDimensions()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00196">TensorInfo::GetNumElements()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</a>, <a class="el" href="_ref_workload_utils_8hpp_source.xhtml#l00026">GetTensorInfo()</a>, <a class="el" href="include_2armnn_2backends_2_workload_data_8hpp_source.xhtml#l00107">SplitterQueueDescriptor::ViewOrigin::m_Origin</a>, <a class="el" href="include_2armnn_2backends_2_workload_data_8hpp_source.xhtml#l00112">SplitterQueueDescriptor::m_ViewOrigins</a>, <a class="el" href="_types_8hpp_source.xhtml#l00018">MaxNumOfTensorDimensions</a>, and <a class="el" href="_splitter_8cpp_source.xhtml#l00021">Split()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_test_name_and_descriptor_layer_visitor_8cpp_source.xhtml#l00274">TEST_SUITE()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;{</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> TensorInfo&amp; inputInfo0 = <a class="code" href="namespacearmnn_utils.xhtml#acee63cd08da47910fc166a1990988fa8">GetTensorInfo</a>(inputs[0]);</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index = 0; index &lt; inputInfo0.GetNumElements(); ++index)</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; {</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> indices[<a class="code" href="namespacearmnn.xhtml#abdcd184ed3bd648bb31d385040cafd5d">MaxNumOfTensorDimensions</a>] = { 0 };</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> indexRemainder = index;</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dimensionStride = inputInfo0.GetNumElements();</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i&lt;inputInfo0.GetNumDimensions(); i++)</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; {</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; dimensionStride /= inputInfo0.GetShape()[i];</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; indices[i] = indexRemainder / dimensionStride; <span class="comment">// Use integer division to round down.</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; indexRemainder -= indices[i] * dimensionStride;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; }</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> viewIdx = 0; viewIdx &lt; data.m_ViewOrigins.size(); ++viewIdx)</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; {</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; SplitterQueueDescriptor::ViewOrigin <span class="keyword">const</span>&amp; view = data.m_ViewOrigins[viewIdx];</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="comment">//Split view extents are defined by the size of (the corresponding) input tensor.</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keyword">const</span> TensorInfo&amp; outputInfo = <a class="code" href="namespacearmnn_utils.xhtml#acee63cd08da47910fc166a1990988fa8">GetTensorInfo</a>(outputs[viewIdx]);</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(outputInfo.GetNumDimensions() == inputInfo0.GetNumDimensions());</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="comment">// Check all dimensions to see if this element is inside the given input view.</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordtype">bool</span> insideView = <span class="keyword">true</span>;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i&lt;outputInfo.GetNumDimensions(); i++)</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; {</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">if</span> (indices[i] &lt; view.m_Origin[i])</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; {</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; insideView = <span class="keyword">false</span>;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; }</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordflow">if</span> (indices[i] &gt;= view.m_Origin[i] + outputInfo.GetShape()[i])</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; {</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; insideView = <span class="keyword">false</span>;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; }</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; }</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">if</span> (insideView)</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; {</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outIndex = 0;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dimensionStride = 1;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = outputInfo.GetNumDimensions(); i-- &gt; 0;)</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; {</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; outIndex += dimensionStride * (indices[i] - view.m_Origin[i]);</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; dimensionStride *= outputInfo.GetShape()[i];</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; }</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="comment">//We are within the view, to copy input data to the output corresponding to this view.</span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>* outputData = GetOutputTensorData&lt;DataType&gt;(viewIdx, data);</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(outputData);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>* inputData = GetInputTensorData&lt;DataType&gt;(0, data);</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(inputData);</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; outputData[outIndex] = inputData[index];</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; }</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; }</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; }</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a></div><div class="ttdeci">DataType</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00035">Types.hpp:35</a></div></div>
+<div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
+<div class="ttc" id="namespacearmnn_utils_xhtml_acee63cd08da47910fc166a1990988fa8"><div class="ttname"><a href="namespacearmnn_utils.xhtml#acee63cd08da47910fc166a1990988fa8">armnnUtils::GetTensorInfo</a></div><div class="ttdeci">armnn::TensorInfo GetTensorInfo(unsigned int numberOfBatches, unsigned int numberOfChannels, unsigned int height, unsigned int width, const armnn::DataLayout dataLayout, const armnn::DataType dataType)</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_utils_8cpp_source.xhtml#l00038">TensorUtils.cpp:38</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_abdcd184ed3bd648bb31d385040cafd5d"><div class="ttname"><a href="namespacearmnn.xhtml#abdcd184ed3bd648bb31d385040cafd5d">armnn::MaxNumOfTensorDimensions</a></div><div class="ttdeci">constexpr unsigned int MaxNumOfTensorDimensions</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00018">Types.hpp:18</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ac245fda400649db10eed0dc96c1b5c37"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac245fda400649db10eed0dc96c1b5c37">&#9670;&nbsp;</a></span>Stack()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Stack </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_stack_queue_descriptor.xhtml">StackQueueDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>data</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::vector&lt; std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt;&gt;&gt; &amp;&#160;</td>
+ <td class="paramname"><em>inputs</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>inputInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>outputInfo</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_stack_8cpp_source.xhtml#l00012">12</a> of file <a class="el" href="_stack_8cpp_source.xhtml">Stack.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_tensor_8hpp_source.xhtml#l00195">TensorInfo::GetNumDimensions()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00196">TensorInfo::GetNumElements()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01225">StackDescriptor::m_Axis</a>, <a class="el" href="include_2armnn_2backends_2_workload_data_8hpp_source.xhtml#l00026">QueueDescriptor::m_Inputs</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01227">StackDescriptor::m_NumInputs</a>, <a class="el" href="include_2armnn_2backends_2_workload_data_8hpp_source.xhtml#l00054">QueueDescriptorWithParameters&lt; LayerDescriptor &gt;::m_Parameters</a>, and <a class="el" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_test_name_and_descriptor_layer_visitor_8cpp_source.xhtml#l00274">TEST_SUITE()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;{</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputNumDims = outputInfo.GetNumDimensions();</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputNumDims = inputInfo.GetNumDimensions();</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a>&amp; outputDims = outputInfo.GetShape();</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a>&amp; inputDims = inputInfo.GetShape();</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> axis = data.m_Parameters.m_Axis;</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="comment">// Can perform a simple concatenation when axis == 0</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keywordflow">if</span> (!axis)</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; {</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numInputs = data.m_Parameters.m_NumInputs;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputLength = inputInfo.<a class="code" href="classarmnn_1_1_tensor_shape.xhtml#a8846406ac37fbd2204f0be16ee05d5b7">GetNumElements</a>();</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputIdx=0; inputIdx&lt;numInputs; ++inputIdx)</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; {</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> elmt=0; elmt&lt;inputLength; ++elmt)</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; {</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; (*inputs[inputIdx])[elmt];</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; output[(inputIdx * inputLength) + elmt];</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; output.<a class="code" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Set</a>(inputs[inputIdx]-&gt;Get());</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; }</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; }</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; }</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="comment">// Initialise output data</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numOutputElements = 1;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;outputNumDims; ++i)</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; {</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; numOutputElements *= outputDims[i];</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; }</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iNumTensors = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(data.m_Inputs.size());</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iBatchSize = inputDims[0];</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iChannels = (inputNumDims &gt; 1) ? inputDims[1] : 1;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iHeight = (inputNumDims &gt; 2) ? inputDims[2] : 1;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iWidth = (inputNumDims &gt; 3) ? inputDims[3] : 1;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oBatchSize = outputDims[1];</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oChannels = (outputNumDims &gt; 2) ? outputDims[2] : 1;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oHeight = (outputNumDims &gt; 3) ? outputDims[3] : 1;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oWidth = (outputNumDims &gt; 4) ? outputDims[4] : 1;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="comment">// Array to store the input coordinates</span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="comment">// iCoordinates[0] = i, iCoordinates[1] = bi, iCoordinates[2] = ci</span></div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="comment">// iCoordinates[3] = hi, iCoordinates[4] = wi, iCoordinates[5] = 0</span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="comment">// iCoordinates[5] will be always zero and used for not incrementing</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="comment">// the output when the input has less than 4 dimensions</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; std::array&lt;unsigned int, 6&gt; iCoordinates{ 0 };</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="comment">// Array of pointers used to map the output coordinates to the input ones, in accordance with the axis</span></div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="comment">// This array is initialized with &amp;iCoordinates[5] since this will be always zero</span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; std::array&lt;unsigned int *, 5&gt; oCoordinates = { &amp;iCoordinates[5],</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; &amp;iCoordinates[5],</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; &amp;iCoordinates[5],</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; &amp;iCoordinates[5],</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; &amp;iCoordinates[5] };</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="comment">// Set the axis coordinate</span></div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; oCoordinates[axis] = &amp;iCoordinates[0];</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="comment">// Map the output coordinates, accounting for the axis</span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dim_shift = 0;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dim = 0; dim &lt; inputNumDims; ++dim)</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; {</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">if</span>(dim == axis)</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; {</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; dim_shift++;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; }</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; oCoordinates[dim + dim_shift] = &amp;iCoordinates[dim + 1];</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; }</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="comment">// Alias for the input coordinates</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;i = iCoordinates[0];</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;bi = iCoordinates[1];</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;ci = iCoordinates[2];</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;hi = iCoordinates[3];</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;wi = iCoordinates[4];</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="comment">// Alias for the output coordinates</span></div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;o = *(oCoordinates[0]);</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;bo = *(oCoordinates[1]);</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;co = *(oCoordinates[2]);</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;ho = *(oCoordinates[3]);</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;wo = *(oCoordinates[4]);</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="comment">// Stack tensors</span></div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordflow">for</span>(; i &lt; iNumTensors; ++(i))</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; {</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">for</span>(bi = 0; bi &lt; iBatchSize; ++(bi))</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; {</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordflow">for</span>(ci = 0; ci &lt; iChannels; ++(ci))</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; {</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordflow">for</span>(hi = 0; hi &lt; iHeight; ++(hi))</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; {</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keywordflow">for</span>(wi = 0; wi &lt; iWidth; ++(wi))</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; {</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; output[o * oWidth * oHeight * oChannels * oBatchSize +</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; bo * oWidth * oHeight * oChannels +</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; co * oWidth * oHeight +</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; ho * oWidth +</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; wo];</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; output.<a class="code" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Set</a>(inputs[i]-&gt;Get());</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; ++(*(inputs[i]));</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; }</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; }</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; }</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; }</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; }</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_tensor_shape_xhtml_a8846406ac37fbd2204f0be16ee05d5b7"><div class="ttname"><a href="classarmnn_1_1_tensor_shape.xhtml#a8846406ac37fbd2204f0be16ee05d5b7">armnn::TensorShape::GetNumElements</a></div><div class="ttdeci">unsigned int GetNumElements() const</div><div class="ttdoc">Function that calculates the tensor elements by multiplying all dimension size which are Specified...</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8cpp_source.xhtml#l00181">Tensor.cpp:181</a></div></div>
+<div class="ttc" id="classarmnn_1_1_encoder_xhtml_ae3b62b846a9c239f332830b9e36030eb"><div class="ttname"><a href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">armnn::Encoder::Set</a></div><div class="ttdeci">virtual void Set(IType right)=0</div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_shape_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00020">Tensor.hpp:20</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a637fea04314a9870c1dc4355c1bed429"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a637fea04314a9870c1dc4355c1bed429">&#9670;&nbsp;</a></span>StrEqual()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr bool armnn::StrEqual </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>strA</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char(&amp;)&#160;</td>
+ <td class="paramname"><em>strB</em>[N]&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00170">170</a> of file <a class="el" href="_types_utils_8hpp_source.xhtml">TypesUtils.hpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_types_utils_8hpp_source.xhtml#l00182">ParseComputeDevice()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;{</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="keywordtype">bool</span> isEqual = <span class="keyword">true</span>;</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; isEqual &amp;&amp; (i &lt; N); ++i)</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; {</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; isEqual = (strA[i] == strB[i]);</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; }</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keywordflow">return</span> isEqual;</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a86d7a7168ac00b75b4971f9aad623698"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a86d7a7168ac00b75b4971f9aad623698">&#9670;&nbsp;</a></span>StridedSlice()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void StridedSlice </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>inputInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_strided_slice_descriptor.xhtml">StridedSliceDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>params</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const void *&#160;</td>
+ <td class="paramname"><em>inputData</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void *&#160;</td>
+ <td class="paramname"><em>outputData</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>dataTypeSize</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="backends_2reference_2workloads_2_strided_slice_8cpp_source.xhtml#l00090">90</a> of file <a class="el" href="backends_2reference_2workloads_2_strided_slice_8cpp_source.xhtml">StridedSlice.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</a>, and <a class="el" href="_numeric_cast_8hpp_source.xhtml#l00035">numeric_cast()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_test_name_and_descriptor_layer_visitor_8cpp_source.xhtml#l00274">TEST_SUITE()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;{</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* input = <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*<span class="keyword">&gt;</span>(inputData);</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* output = <span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*<span class="keyword">&gt;</span>(outputData);</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keyword">const</span> TensorShape inputShape = ExtendShape(inputInfo.GetShape(), 4);</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; StridedSliceDescriptor paddedParams = params;</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="comment">// Pad parameters to 4 dimensions</span></div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; PadParams(paddedParams, 4);</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> start0 = paddedParams.GetStartForAxis(inputShape, 0);</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> stop0 = paddedParams.GetStopForAxis (inputShape, 0, start0);</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> start1 = paddedParams.GetStartForAxis(inputShape, 1);</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> stop1 = paddedParams.GetStopForAxis (inputShape, 1, start1);</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> start2 = paddedParams.GetStartForAxis(inputShape, 2);</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> stop2 = paddedParams.GetStopForAxis (inputShape, 2, start2);</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> start3 = paddedParams.GetStartForAxis(inputShape, 3);</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> stop3 = paddedParams.GetStopForAxis (inputShape, 3, start3);</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> step = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">int</span>&gt;(dataTypeSize);</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> in0 = start0;</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; !LoopCondition(in0, stop0, paddedParams.m_Stride[0]);</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; in0 += paddedParams.m_Stride[0])</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; {</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> in1 = start1;</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; !LoopCondition(in1, stop1, paddedParams.m_Stride[1]);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; in1 += paddedParams.m_Stride[1])</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; {</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> in2 = start2;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; !LoopCondition(in2, stop2, paddedParams.m_Stride[2]);</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; in2 += paddedParams.m_Stride[2])</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; {</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> in3 = start3;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; !LoopCondition(in3, stop3, paddedParams.m_Stride[3]);</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; in3 += paddedParams.m_Stride[3])</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; {</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordtype">int</span> dim1 = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">int</span>&gt;(inputShape[1]);</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordtype">int</span> dim2 = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">int</span>&gt;(inputShape[2]);</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordtype">int</span> dim3 = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">int</span>&gt;(inputShape[3]);</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keywordtype">int</span> inputOffset = (((in0 * dim1 + in1) * dim2 + in2) * dim3 + in3) * step;</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; ::memcpy(output, input + inputOffset, dataTypeSize);</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; output += step;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; }</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; }</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; }</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; }</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a375ca3cff9f1b005d1412dc5f3cf5b6e"><div class="ttname"><a href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a></div><div class="ttdeci">std::enable_if_t&lt; std::is_unsigned&lt; Source &gt;::value &amp;&amp;std::is_unsigned&lt; Dest &gt;::value, Dest &gt; numeric_cast(Source source)</div><div class="ttdef"><b>Definition:</b> <a href="_numeric_cast_8hpp_source.xhtml#l00035">NumericCast.hpp:35</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="aaaddf7d8f68eae6c1bf90e4ec3cb5490"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aaaddf7d8f68eae6c1bf90e4ec3cb5490">&#9670;&nbsp;</a></span>StringToLogLevel()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3d">LogSeverity</a> armnn::StringToLogLevel </td>
+ <td>(</td>
+ <td class="paramtype">std::string&#160;</td>
+ <td class="paramname"><em>level</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_logging_8hpp_source.xhtml#l00036">36</a> of file <a class="el" href="_logging_8hpp_source.xhtml">Logging.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4aa603905470e2a5b8c13e96b579ef0dba">Debug</a>, <a class="el" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da902b0d55fddef6f8d651fe1035b7d4bd">Error</a>, <a class="el" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da882384ec38ce8d9582b57e70861730e4">Fatal</a>, <a class="el" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da4059b0251f66a18cb56f544728796875">Info</a>, <a class="el" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3dadd4ec0ac4e58f7c32a01244ae91150b1">Trace</a>, and <a class="el" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da0eaadb4fcb48a0a0ed7bc9868be9fbaa">Warning</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_delegate_options_8hpp_source.xhtml#l00210">DelegateOptions::SetLoggingSeverity()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;{</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="comment">// Transfer to lower case</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; std::transform(level.begin(), level.end(), level.begin(),</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; [](<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> c){ <span class="keywordflow">return</span> std::tolower(c); }</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; );</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordflow">if</span> (level == <span class="stringliteral">&quot;trace&quot;</span>)</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; {</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">return</span> LogSeverity::Trace;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; }</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (level == <span class="stringliteral">&quot;debug&quot;</span>)</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; {</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a5aae369ef847a00062925cea8e9be9c4">LogSeverity::Debug</a>;</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; }</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (level == <span class="stringliteral">&quot;info&quot;</span>)</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; {</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordflow">return</span> LogSeverity::Info;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; }</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (level == <span class="stringliteral">&quot;warning&quot;</span>)</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; {</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">return</span> LogSeverity::Warning;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; }</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (level == <span class="stringliteral">&quot;error&quot;</span>)</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; {</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordflow">return</span> LogSeverity::Error;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; }</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (level == <span class="stringliteral">&quot;fatal&quot;</span>)</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; {</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordflow">return</span> LogSeverity::Fatal;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; }</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; {</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_exception.xhtml">armnn::Exception</a>(<span class="stringliteral">&quot;Unknown severity level for logging: &#39;&quot;</span> + level +</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="stringliteral">&quot;&#39;. Valid options: trace, debug, info, warning, error, fatal&quot;</span>);</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; }</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a5aae369ef847a00062925cea8e9be9c4"><div class="ttname"><a href="namespacearmnn.xhtml#a5aae369ef847a00062925cea8e9be9c4">armnn::Debug</a></div><div class="ttdeci">void Debug(const TensorInfo &amp;inputInfo, const T *inputData, LayerGuid guid, const std::string &amp;layerName, unsigned int slotIndex)</div><div class="ttdef"><b>Definition:</b> <a href="_debug_8cpp_source.xhtml#l00019">Debug.cpp:19</a></div></div>
+<div class="ttc" id="classarmnn_1_1_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_exception.xhtml">armnn::Exception</a></div><div class="ttdoc">Base class for all ArmNN exceptions so that users can filter to just those. </div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00046">Exceptions.hpp:46</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a14d7f180bf51e86850305965c3707e07"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a14d7f180bf51e86850305965c3707e07">&#9670;&nbsp;</a></span>swap() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void armnn::swap </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structarmnn_1_1_origins_descriptor.xhtml">OriginsDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>first</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structarmnn_1_1_origins_descriptor.xhtml">OriginsDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>second</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_descriptors_8cpp_source.xhtml#l00350">350</a> of file <a class="el" href="_descriptors_8cpp_source.xhtml">Descriptors.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_descriptors_8cpp_source.xhtml#l00359">ViewsDescriptor::swap</a>, and <a class="el" href="_descriptors_8cpp_source.xhtml#l00359">swap()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_fully_connected_test_impl_8cpp_source.xhtml#l00280">FullyConnectedFloat32Test()</a>, <a class="el" href="_fully_connected_test_impl_8cpp_source.xhtml#l00179">FullyConnectedLargeTestCommon()</a>, <a class="el" href="_backend_id_8hpp_source.xhtml#l00102">BackendId::operator=()</a>, <a class="el" href="_buffer_manager_8cpp_source.xhtml#l00104">BufferManager::Reset()</a>, <a class="el" href="_squash_equal_siblings_8hpp_source.xhtml#l00025">SquashEqualSiblingsImpl&lt; Comparable &gt;::Run()</a>, <a class="el" href="_backend_registry_8cpp_source.xhtml#l00100">BackendRegistry::Swap()</a>, and <a class="el" href="_subgraph_view_tests_8cpp_source.xhtml#l01620">TEST_SUITE()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160;{</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="keyword">using</span> <a class="code" href="namespacearmnn.xhtml#a686b8288a04b3ffff67d560eea53f6be">std::swap</a>;</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <a class="code" href="namespacearmnn.xhtml#a686b8288a04b3ffff67d560eea53f6be">swap</a>(first.m_NumViews, second.m_NumViews);</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <a class="code" href="namespacearmnn.xhtml#a686b8288a04b3ffff67d560eea53f6be">swap</a>(first.m_NumDimensions, second.m_NumDimensions);</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <a class="code" href="namespacearmnn.xhtml#a686b8288a04b3ffff67d560eea53f6be">swap</a>(first.m_ViewOrigins, second.m_ViewOrigins);</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <a class="code" href="namespacearmnn.xhtml#a686b8288a04b3ffff67d560eea53f6be">swap</a>(first.m_ConcatAxis, second.m_ConcatAxis);</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a686b8288a04b3ffff67d560eea53f6be"><div class="ttname"><a href="namespacearmnn.xhtml#a686b8288a04b3ffff67d560eea53f6be">armnn::swap</a></div><div class="ttdeci">void swap(ViewsDescriptor &amp;first, ViewsDescriptor &amp;second)</div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8cpp_source.xhtml#l00359">Descriptors.cpp:359</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a686b8288a04b3ffff67d560eea53f6be"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a686b8288a04b3ffff67d560eea53f6be">&#9670;&nbsp;</a></span>swap() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void armnn::swap </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structarmnn_1_1_views_descriptor.xhtml">ViewsDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>first</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structarmnn_1_1_views_descriptor.xhtml">ViewsDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>second</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_descriptors_8cpp_source.xhtml#l00359">359</a> of file <a class="el" href="_descriptors_8cpp_source.xhtml">Descriptors.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_descriptors_8cpp_source.xhtml#l00359">ViewsDescriptor::swap</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_descriptors_8cpp_source.xhtml#l00350">swap()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160;{</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keyword">using</span> <a class="code" href="namespacearmnn.xhtml#a686b8288a04b3ffff67d560eea53f6be">std::swap</a>;</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <a class="code" href="namespacearmnn.xhtml#a686b8288a04b3ffff67d560eea53f6be">swap</a>(first.m_Origins, second.m_Origins);</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <a class="code" href="namespacearmnn.xhtml#a686b8288a04b3ffff67d560eea53f6be">swap</a>(first.m_ViewSizes, second.m_ViewSizes);</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a686b8288a04b3ffff67d560eea53f6be"><div class="ttname"><a href="namespacearmnn.xhtml#a686b8288a04b3ffff67d560eea53f6be">armnn::swap</a></div><div class="ttdeci">void swap(ViewsDescriptor &amp;first, ViewsDescriptor &amp;second)</div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8cpp_source.xhtml#l00359">Descriptors.cpp:359</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ae53a21a04e8a81ae67e25aa9a4f8605d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae53a21a04e8a81ae67e25aa9a4f8605d">&#9670;&nbsp;</a></span>TEST_SUITE() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">armnn::TEST_SUITE </td>
+ <td>(</td>
+ <td class="paramtype">&quot;TestInputOutputLayerVisitor&quot;&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_test_input_output_layer_visitor_8cpp_source.xhtml#l00013">13</a> of file <a class="el" href="_test_input_output_layer_visitor_8cpp_source.xhtml">TestInputOutputLayerVisitor.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_network_8cpp_source.xhtml#l01873">NetworkImpl::AddInputLayer()</a>, <a class="el" href="_network_8cpp_source.xhtml#l02175">NetworkImpl::AddOutputLayer()</a>, and <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#ac391db82733633b64fd53688d6e7c17a">IConnectableLayer::ExecuteStrategy()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;{</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;TEST_CASE(<span class="stringliteral">&quot;CheckInputLayerVisitorBindingIdAndName&quot;</span>)</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;{</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* layerName = <span class="stringliteral">&quot;InputLayer&quot;</span>;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; TestInputLayerVisitor visitor(1, layerName);</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; NetworkImpl net;</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; IConnectableLayer *<span class="keyword">const</span> layer = net.AddInputLayer(1, layerName);</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; layer-&gt;ExecuteStrategy(visitor);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;}</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;TEST_CASE(<span class="stringliteral">&quot;CheckInputLayerVisitorBindingIdAndNameNull&quot;</span>)</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;{</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; TestInputLayerVisitor visitor(1);</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; NetworkImpl net;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; IConnectableLayer *<span class="keyword">const</span> layer = net.AddInputLayer(1);</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; layer-&gt;ExecuteStrategy(visitor);</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;}</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;TEST_CASE(<span class="stringliteral">&quot;CheckOutputLayerVisitorBindingIdAndName&quot;</span>)</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;{</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* layerName = <span class="stringliteral">&quot;OutputLayer&quot;</span>;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; TestOutputLayerVisitor visitor(1, layerName);</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; NetworkImpl net;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; IConnectableLayer *<span class="keyword">const</span> layer = net.AddOutputLayer(1, layerName);</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; layer-&gt;ExecuteStrategy(visitor);</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;}</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;TEST_CASE(<span class="stringliteral">&quot;CheckOutputLayerVisitorBindingIdAndNameNull&quot;</span>)</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;{</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; TestOutputLayerVisitor visitor(1);</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; NetworkImpl net;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; IConnectableLayer *<span class="keyword">const</span> layer = net.AddOutputLayer(1);</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; layer-&gt;ExecuteStrategy(visitor);</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;}</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="adcc09cc21e8c43acd9f4f74d78b67e3e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adcc09cc21e8c43acd9f4f74d78b67e3e">&#9670;&nbsp;</a></span>TEST_SUITE() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">armnn::TEST_SUITE </td>
+ <td>(</td>
+ <td class="paramtype">&quot;MemoryManagerTests&quot;&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>Unit test Storing, Allocating and Deallocating with a custom allocator. </p>
+
+<p class="definition">Definition at line <a class="el" href="_memory_manager_tests_8cpp_source.xhtml#l00053">53</a> of file <a class="el" href="_memory_manager_tests_8cpp_source.xhtml">MemoryManagerTests.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_memory_manager_8cpp_source.xhtml#l00023">MemoryManager::Allocate()</a>, <a class="el" href="_memory_manager_8cpp_source.xhtml#l00041">MemoryManager::Deallocate()</a>, and <a class="el" href="_memory_manager_8cpp_source.xhtml#l00013">MemoryManager::StoreMemToAllocate()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;{<span class="comment"></span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="comment">/// Unit test Storing, Allocating and Deallocating with a custom allocator.</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="comment"></span>TEST_CASE(<span class="stringliteral">&quot;MemoryManagerTest&quot;</span>)</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;{</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keyword">using namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a>;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="comment">// Create mock up bufferStorageVector with 2 BufferStorage with the same TensorMemory</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordtype">size_t</span> numTensors = 5;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; std::vector&lt;std::shared_ptr&lt;TensorMemory&gt;&gt; tensorMemoryPointerVector(numTensors);</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; std::vector&lt;std::shared_ptr&lt;TensorMemory&gt;&gt; tensorMemoryVector;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; tensorMemoryVector.reserve(numTensors);</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; std::vector&lt;size_t&gt; offsets(numTensors);</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; std::iota(std::begin(offsets), std::end(offsets), 0);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">for</span> (uint32_t idx = 0; idx &lt; tensorMemoryPointerVector.size(); ++idx)</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; {</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; tensorMemoryVector.emplace_back(std::make_shared&lt;TensorMemory&gt;(<a class="code" href="structarmnn_1_1_tensor_memory.xhtml">TensorMemory</a>{offsets[idx], 0, <span class="keyword">nullptr</span>}));</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; tensorMemoryPointerVector[idx] = tensorMemoryVector[idx];</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; }</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; std::vector&lt;BufferStorage&gt; bufferStorageVector;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; bufferStorageVector.emplace_back(<a class="code" href="structarmnn_1_1_buffer_storage.xhtml">BufferStorage</a>{tensorMemoryPointerVector, numTensors});</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; bufferStorageVector.emplace_back(<a class="code" href="structarmnn_1_1_buffer_storage.xhtml">BufferStorage</a>{tensorMemoryPointerVector, numTensors});</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="comment">// Create an instance of the SampleCustomAllocator</span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; std::shared_ptr&lt;SampleCustomAllocator&gt; customAllocator =</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; std::make_unique&lt;SampleCustomAllocator&gt;(SampleCustomAllocator());</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; customAllocator-&gt;m_Values = {10, 11, 12, 13, 14};</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="comment">// Check that the test was set up correctly</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; CHECK(customAllocator-&gt;m_Values.size() == numTensors);</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordtype">size_t</span> bufferVecSize = bufferStorageVector.size();</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="comment">// Utilise 3 functions in the MemoryManager. Check the counters and the pointer to the values are correct.</span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <a class="code" href="classarmnn_1_1_memory_manager.xhtml">MemoryManager</a> memoryManager;</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; memoryManager.<a class="code" href="classarmnn_1_1_memory_manager.xhtml#a07bc28679b487cc58281a168c3a1c18b">StoreMemToAllocate</a>(bufferStorageVector, customAllocator);</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; memoryManager.<a class="code" href="classarmnn_1_1_memory_manager.xhtml#a36571ba095c5f84e8dbaee44d9068af8">Allocate</a>();</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; CHECK(customAllocator-&gt;m_CounterAllocate == bufferVecSize);</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; uint32_t idx = 0;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> tensorMemory : tensorMemoryVector)</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; {</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keyword">auto</span> value = <span class="keyword">reinterpret_cast&lt;</span>uint8_t *<span class="keyword">&gt;</span>(tensorMemory-&gt;m_Data);</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; CHECK(customAllocator-&gt;m_Values[idx] == *value);</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; idx += 1;</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; }</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; memoryManager.<a class="code" href="classarmnn_1_1_memory_manager.xhtml#afaf63777ab6c7323a7b4eceecdfee3df">Deallocate</a>();</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; CHECK(customAllocator-&gt;m_CounterFree == bufferStorageVector.size());</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;}</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_memory_manager_xhtml_a36571ba095c5f84e8dbaee44d9068af8"><div class="ttname"><a href="classarmnn_1_1_memory_manager.xhtml#a36571ba095c5f84e8dbaee44d9068af8">armnn::MemoryManager::Allocate</a></div><div class="ttdeci">void Allocate()</div><div class="ttdoc">Allocate the amount of memory indicated by , and point each to each correspondent Tensor so that the...</div><div class="ttdef"><b>Definition:</b> <a href="_memory_manager_8cpp_source.xhtml#l00023">MemoryManager.cpp:23</a></div></div>
+<div class="ttc" id="classarmnn_1_1_memory_manager_xhtml_afaf63777ab6c7323a7b4eceecdfee3df"><div class="ttname"><a href="classarmnn_1_1_memory_manager.xhtml#afaf63777ab6c7323a7b4eceecdfee3df">armnn::MemoryManager::Deallocate</a></div><div class="ttdeci">void Deallocate()</div><div class="ttdoc">Deallocate memory. </div><div class="ttdef"><b>Definition:</b> <a href="_memory_manager_8cpp_source.xhtml#l00041">MemoryManager.cpp:41</a></div></div>
+<div class="ttc" id="classarmnn_1_1_memory_manager_xhtml"><div class="ttname"><a href="classarmnn_1_1_memory_manager.xhtml">armnn::MemoryManager</a></div><div class="ttdef"><b>Definition:</b> <a href="_memory_manager_8hpp_source.xhtml#l00039">MemoryManager.hpp:39</a></div></div>
+<div class="ttc" id="structarmnn_1_1_tensor_memory_xhtml"><div class="ttname"><a href="structarmnn_1_1_tensor_memory.xhtml">armnn::TensorMemory</a></div><div class="ttdef"><b>Definition:</b> <a href="_memory_manager_8hpp_source.xhtml#l00019">MemoryManager.hpp:19</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml"><div class="ttname"><a href="namespacearmnn.xhtml">armnn</a></div><div class="ttdoc">Copyright (c) 2021 ARM Limited and Contributors. </div><div class="ttdef"><b>Definition:</b> <a href="01__00__quick__start_8dox_source.xhtml#l00006">01_00_quick_start.dox:6</a></div></div>
+<div class="ttc" id="structarmnn_1_1_buffer_storage_xhtml"><div class="ttname"><a href="structarmnn_1_1_buffer_storage.xhtml">armnn::BufferStorage</a></div><div class="ttdef"><b>Definition:</b> <a href="_memory_manager_8hpp_source.xhtml#l00029">MemoryManager.hpp:29</a></div></div>
+<div class="ttc" id="classarmnn_1_1_memory_manager_xhtml_a07bc28679b487cc58281a168c3a1c18b"><div class="ttname"><a href="classarmnn_1_1_memory_manager.xhtml#a07bc28679b487cc58281a168c3a1c18b">armnn::MemoryManager::StoreMemToAllocate</a></div><div class="ttdeci">void StoreMemToAllocate(std::vector&lt; BufferStorage &gt; bufferStorageVector, std::shared_ptr&lt; ICustomAllocator &gt; customAllocator, size_t typeAlignment=0)</div><div class="ttdoc">Initialization method to store in all information needed. </div><div class="ttdef"><b>Definition:</b> <a href="_memory_manager_8cpp_source.xhtml#l00013">MemoryManager.cpp:13</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a1621fb2f10314c394c9023d3e090d394"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1621fb2f10314c394c9023d3e090d394">&#9670;&nbsp;</a></span>TEST_SUITE() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">armnn::TEST_SUITE </td>
+ <td>(</td>
+ <td class="paramtype">&quot;TestConstTensorLayerVisitor&quot;&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_const_tensor_layer_visitor_8cpp_source.xhtml#l00110">110</a> of file <a class="el" href="_const_tensor_layer_visitor_8cpp_source.xhtml">ConstTensorLayerVisitor.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_network_8cpp_source.xhtml#l02180">NetworkImpl::AddBatchNormalizationLayer()</a>, <a class="el" href="_network_8cpp_source.xhtml#l02236">NetworkImpl::AddConstantLayer()</a>, <a class="el" href="_network_8cpp_source.xhtml#l02022">NetworkImpl::AddConvolution2dLayer()</a>, <a class="el" href="_network_8cpp_source.xhtml#l02082">NetworkImpl::AddDepthwiseConvolution2dLayer()</a>, <a class="el" href="_network_8cpp_source.xhtml#l01912">NetworkImpl::AddFullyConnectedLayer()</a>, <a class="el" href="_network_8cpp_source.xhtml#l02268">NetworkImpl::AddLstmLayer()</a>, <a class="el" href="_network_8cpp_source.xhtml#l02545">NetworkImpl::AddQLstmLayer()</a>, <a class="el" href="_network_8cpp_source.xhtml#l02507">NetworkImpl::AddQuantizedLstmLayer()</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">IOutputSlot::Connect()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#ac391db82733633b64fd53688d6e7c17a">IConnectableLayer::ExecuteStrategy()</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">Float32</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">IConnectableLayer::GetInputSlot()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">IConnectableLayer::GetOutputSlot()</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01104">LstmDescriptor::m_ActivationFunc</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00491">FullyConnectedDescriptor::m_BiasEnabled</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00545">Convolution2dDescriptor::m_BiasEnabled</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00668">DepthwiseConvolution2dDescriptor::m_BiasEnabled</a>, <a class="el" href="_quantized_lstm_params_8hpp_source.xhtml#l00045">QuantizedLstmInputParams::m_CellBias</a>, <a class="el" href="_lstm_params_8hpp_source.xhtml#l00053">LstmInputParams::m_CellBias</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01366">QLstmDescriptor::m_CellClip</a>, <a class="el" href="_lstm_params_8hpp_source.xhtml#l00059">LstmInputParams::m_CellLayerNormWeights</a>, <a class="el" href="_lstm_params_8hpp_source.xhtml#l00049">LstmInputParams::m_CellToForgetWeights</a>, <a class="el" href="_lstm_params_8hpp_source.xhtml#l00048">LstmInputParams::m_CellToInputWeights</a>, <a class="el" href="_lstm_params_8hpp_source.xhtml#l00050">LstmInputParams::m_CellToOutputWeights</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01110">LstmDescriptor::m_CifgEnabled</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01370">QLstmDescriptor::m_CifgEnabled</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01106">LstmDescriptor::m_ClippingThresCell</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01108">LstmDescriptor::m_ClippingThresProj</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00495">FullyConnectedDescriptor::m_ConstantWeights</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00547">Convolution2dDescriptor::m_DataLayout</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00670">DepthwiseConvolution2dDescriptor::m_DataLayout</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00803">BatchNormalizationDescriptor::m_DataLayout</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00801">BatchNormalizationDescriptor::m_Eps</a>, <a class="el" href="_quantized_lstm_params_8hpp_source.xhtml#l00044">QuantizedLstmInputParams::m_ForgetGateBias</a>, <a class="el" href="_lstm_params_8hpp_source.xhtml#l00052">LstmInputParams::m_ForgetGateBias</a>, <a class="el" href="_lstm_params_8hpp_source.xhtml#l00058">LstmInputParams::m_ForgetLayerNormWeights</a>, <a class="el" href="_quantized_lstm_params_8hpp_source.xhtml#l00043">QuantizedLstmInputParams::m_InputGateBias</a>, <a class="el" href="_lstm_params_8hpp_source.xhtml#l00051">LstmInputParams::m_InputGateBias</a>, <a class="el" href="_lstm_params_8hpp_source.xhtml#l00057">LstmInputParams::m_InputLayerNormWeights</a>, <a class="el" href="_quantized_lstm_params_8hpp_source.xhtml#l00035">QuantizedLstmInputParams::m_InputToCellWeights</a>, <a class="el" href="_lstm_params_8hpp_source.xhtml#l00042">LstmInputParams::m_InputToCellWeights</a>, <a class="el" href="_quantized_lstm_params_8hpp_source.xhtml#l00034">QuantizedLstmInputParams::m_InputToForgetWeights</a>, <a class="el" href="_lstm_params_8hpp_source.xhtml#l00041">LstmInputParams::m_InputToForgetWeights</a>, <a class="el" href="_quantized_lstm_params_8hpp_source.xhtml#l00033">QuantizedLstmInputParams::m_InputToInputWeights</a>, <a class="el" href="_lstm_params_8hpp_source.xhtml#l00040">LstmInputParams::m_InputToInputWeights</a>, <a class="el" href="_quantized_lstm_params_8hpp_source.xhtml#l00036">QuantizedLstmInputParams::m_InputToOutputWeights</a>, <a class="el" href="_lstm_params_8hpp_source.xhtml#l00043">LstmInputParams::m_InputToOutputWeights</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01376">QLstmDescriptor::m_LayerNormEnabled</a>, <a class="el" href="_quantized_lstm_params_8hpp_source.xhtml#l00046">QuantizedLstmInputParams::m_OutputGateBias</a>, <a class="el" href="_lstm_params_8hpp_source.xhtml#l00054">LstmInputParams::m_OutputGateBias</a>, <a class="el" href="_lstm_params_8hpp_source.xhtml#l00060">LstmInputParams::m_OutputLayerNormWeights</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00535">Convolution2dDescriptor::m_PadBottom</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00658">DepthwiseConvolution2dDescriptor::m_PadBottom</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00529">Convolution2dDescriptor::m_PadLeft</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00652">DepthwiseConvolution2dDescriptor::m_PadLeft</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00531">Convolution2dDescriptor::m_PadRight</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00654">DepthwiseConvolution2dDescriptor::m_PadRight</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00533">Convolution2dDescriptor::m_PadTop</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00656">DepthwiseConvolution2dDescriptor::m_PadTop</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01112">LstmDescriptor::m_PeepholeEnabled</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01372">QLstmDescriptor::m_PeepholeEnabled</a>, <a class="el" href="_lstm_params_8hpp_source.xhtml#l00056">LstmInputParams::m_ProjectionBias</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01368">QLstmDescriptor::m_ProjectionClip</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01114">LstmDescriptor::m_ProjectionEnabled</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01374">QLstmDescriptor::m_ProjectionEnabled</a>, <a class="el" href="_lstm_params_8hpp_source.xhtml#l00055">LstmInputParams::m_ProjectionWeights</a>, <a class="el" href="_quantized_lstm_params_8hpp_source.xhtml#l00040">QuantizedLstmInputParams::m_RecurrentToCellWeights</a>, <a class="el" href="_lstm_params_8hpp_source.xhtml#l00046">LstmInputParams::m_RecurrentToCellWeights</a>, <a class="el" href="_quantized_lstm_params_8hpp_source.xhtml#l00039">QuantizedLstmInputParams::m_RecurrentToForgetWeights</a>, <a class="el" href="_lstm_params_8hpp_source.xhtml#l00045">LstmInputParams::m_RecurrentToForgetWeights</a>, <a class="el" href="_quantized_lstm_params_8hpp_source.xhtml#l00038">QuantizedLstmInputParams::m_RecurrentToInputWeights</a>, <a class="el" href="_lstm_params_8hpp_source.xhtml#l00044">LstmInputParams::m_RecurrentToInputWeights</a>, <a class="el" href="_quantized_lstm_params_8hpp_source.xhtml#l00041">QuantizedLstmInputParams::m_RecurrentToOutputWeights</a>, <a class="el" href="_lstm_params_8hpp_source.xhtml#l00047">LstmInputParams::m_RecurrentToOutputWeights</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00537">Convolution2dDescriptor::m_StrideX</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00660">DepthwiseConvolution2dDescriptor::m_StrideX</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00539">Convolution2dDescriptor::m_StrideY</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00662">DepthwiseConvolution2dDescriptor::m_StrideY</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00493">FullyConnectedDescriptor::m_TransposeWeightMatrix</a>, <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">NHWC</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">QAsymmU8</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">QSymmS16</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">QSymmS8</a>, and <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">Signed32</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_fuse_activation_tests_8cpp_source.xhtml#l00625">TEST_SUITE()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;{</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;TEST_CASE(<span class="stringliteral">&quot;CheckConvolution2dLayer&quot;</span>)</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;{</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; Convolution2dDescriptor descriptor;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; descriptor.m_PadLeft = 2;</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; descriptor.m_PadRight = 3;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; descriptor.m_PadBottom = 1;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; descriptor.m_PadTop = 5;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; descriptor.m_StrideX = 2;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; descriptor.m_StrideY = 3;</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; descriptor.m_DataLayout = DataLayout::NHWC;</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; std::vector&lt;float&gt; data = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; std::vector&lt;unsigned int&gt; dimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; ConstTensor weights(TensorInfo(4, dimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>), data);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; TestConvolution2dLayerVisitor visitor(descriptor, weights, EmptyOptional());</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; NetworkImpl net;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; IConnectableLayer* <span class="keyword">const</span> layer = net.AddConvolution2dLayer(descriptor, weights, EmptyOptional());</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; layer-&gt;ExecuteStrategy(visitor);</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;}</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;TEST_CASE(<span class="stringliteral">&quot;CheckNamedConvolution2dLayer&quot;</span>)</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;{</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* layerName = <span class="stringliteral">&quot;Convolution2dLayer&quot;</span>;</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; Convolution2dDescriptor descriptor;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; descriptor.m_PadLeft = 2;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; descriptor.m_PadRight = 3;</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; descriptor.m_PadBottom = 1;</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; descriptor.m_PadTop = 5;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; descriptor.m_StrideX = 2;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; descriptor.m_StrideY = 3;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; descriptor.m_DataLayout = DataLayout::NHWC;</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; std::vector&lt;float&gt; data = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; std::vector&lt;unsigned int&gt; dimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; ConstTensor weights(TensorInfo(4, dimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>), data);</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; TestConvolution2dLayerVisitor visitor(descriptor, weights, EmptyOptional(), layerName);</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; NetworkImpl net;</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; IConnectableLayer* <span class="keyword">const</span> layer = net.AddConvolution2dLayer(descriptor, weights, EmptyOptional(), layerName);</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; layer-&gt;ExecuteStrategy(visitor);</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;}</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;TEST_CASE(<span class="stringliteral">&quot;CheckConvolution2dLayerWithBiases&quot;</span>)</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;{</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; Convolution2dDescriptor descriptor;</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; descriptor.m_PadLeft = 2;</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; descriptor.m_PadRight = 3;</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; descriptor.m_PadBottom = 1;</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; descriptor.m_PadTop = 5;</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; descriptor.m_StrideX = 2;</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; descriptor.m_StrideY = 3;</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; descriptor.m_DataLayout = DataLayout::NHWC;</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; descriptor.m_BiasEnabled = <span class="keyword">true</span>;</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; std::vector&lt;float&gt; data = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; std::vector&lt;unsigned int&gt; dimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; ConstTensor weights(TensorInfo(4, dimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>), data);</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; std::vector&lt;float&gt; biasData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; std::vector&lt;unsigned int&gt; biasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; ConstTensor biases(TensorInfo(4, biasDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>), biasData);</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; Optional&lt;ConstTensor&gt; optionalBiases(biases);</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; TestConvolution2dLayerVisitor visitor(descriptor, weights, optionalBiases);</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; NetworkImpl net;</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; IConnectableLayer* <span class="keyword">const</span> layer = net.AddConvolution2dLayer(descriptor, weights, optionalBiases);</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; layer-&gt;ExecuteStrategy(visitor);</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;}</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160;</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;TEST_CASE(<span class="stringliteral">&quot;CheckNamedConvolution2dLayerWithBiases&quot;</span>)</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160;{</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* layerName = <span class="stringliteral">&quot;Convolution2dLayer&quot;</span>;</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; Convolution2dDescriptor descriptor;</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; descriptor.m_PadLeft = 2;</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; descriptor.m_PadRight = 3;</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; descriptor.m_PadBottom = 1;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; descriptor.m_PadTop = 5;</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; descriptor.m_StrideX = 2;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; descriptor.m_StrideY = 3;</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; descriptor.m_DataLayout = DataLayout::NHWC;</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; descriptor.m_BiasEnabled = <span class="keyword">true</span>;</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; std::vector&lt;float&gt; data = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; std::vector&lt;unsigned int&gt; dimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; ConstTensor weights(TensorInfo(4, dimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>), data);</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; std::vector&lt;float&gt; biasData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; std::vector&lt;unsigned int&gt; biasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; ConstTensor biases(TensorInfo(4, biasDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>), biasData);</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; Optional&lt;ConstTensor&gt; optionalBiases(biases);</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160;</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; TestConvolution2dLayerVisitor visitor(descriptor, weights, optionalBiases, layerName);</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160;</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; NetworkImpl net;</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160;</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; IConnectableLayer* <span class="keyword">const</span> layer = net.AddConvolution2dLayer(descriptor, weights, optionalBiases, layerName);</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; layer-&gt;ExecuteStrategy(visitor);</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160;}</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160;</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;TEST_CASE(<span class="stringliteral">&quot;CheckDepthwiseConvolution2dLayer&quot;</span>)</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160;{</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; DepthwiseConvolution2dDescriptor descriptor;</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; descriptor.m_PadLeft = 2;</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; descriptor.m_PadRight = 3;</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; descriptor.m_PadBottom = 1;</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; descriptor.m_PadTop = 5;</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; descriptor.m_StrideX = 2;</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; descriptor.m_StrideY = 3;</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; descriptor.m_DataLayout = DataLayout::NHWC;</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; std::vector&lt;float&gt; data = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; std::vector&lt;unsigned int&gt; dimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; ConstTensor weights(TensorInfo(4, dimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>), data);</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; TestDepthwiseConvolution2dLayerVisitor visitor(descriptor, weights, EmptyOptional());</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; NetworkImpl net;</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160;</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; IConnectableLayer* <span class="keyword">const</span> layer = net.AddDepthwiseConvolution2dLayer(descriptor, weights, EmptyOptional());</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; layer-&gt;ExecuteStrategy(visitor);</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160;}</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160;</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;TEST_CASE(<span class="stringliteral">&quot;CheckNamedDepthwiseConvolution2dLayer&quot;</span>)</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;{</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* layerName = <span class="stringliteral">&quot;DepthwiseConvolution2dLayer&quot;</span>;</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; DepthwiseConvolution2dDescriptor descriptor;</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; descriptor.m_PadLeft = 2;</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; descriptor.m_PadRight = 3;</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; descriptor.m_PadBottom = 1;</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; descriptor.m_PadTop = 5;</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; descriptor.m_StrideX = 2;</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; descriptor.m_StrideY = 3;</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; descriptor.m_DataLayout = DataLayout::NHWC;</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160;</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; std::vector&lt;float&gt; data = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; std::vector&lt;unsigned int&gt; dimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; ConstTensor weights(TensorInfo(4, dimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>), data);</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; TestDepthwiseConvolution2dLayerVisitor visitor(descriptor, weights, EmptyOptional(), layerName);</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; NetworkImpl net;</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160;</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; IConnectableLayer* <span class="keyword">const</span> layer = net.AddDepthwiseConvolution2dLayer(descriptor,</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; weights,</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; EmptyOptional(),</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; layerName);</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; layer-&gt;ExecuteStrategy(visitor);</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;}</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160;TEST_CASE(<span class="stringliteral">&quot;CheckDepthwiseConvolution2dLayerWithBiases&quot;</span>)</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;{</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; DepthwiseConvolution2dDescriptor descriptor;</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; descriptor.m_PadLeft = 2;</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; descriptor.m_PadRight = 3;</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; descriptor.m_PadBottom = 1;</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; descriptor.m_PadTop = 5;</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; descriptor.m_StrideX = 2;</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; descriptor.m_StrideY = 3;</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; descriptor.m_DataLayout = DataLayout::NHWC;</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; descriptor.m_BiasEnabled = <span class="keyword">true</span>;</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160;</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; std::vector&lt;float&gt; data = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; std::vector&lt;unsigned int&gt; dimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; ConstTensor weights(TensorInfo(4, dimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>), data);</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160;</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; std::vector&lt;float&gt; biasData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; std::vector&lt;unsigned int&gt; biasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; ConstTensor biases(TensorInfo(4, biasDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>), biasData);</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; Optional&lt;ConstTensor&gt; optionalBiases(biases);</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160;</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; TestDepthwiseConvolution2dLayerVisitor visitor(descriptor, weights, optionalBiases);</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160;</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; NetworkImpl net;</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160;</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; IConnectableLayer* <span class="keyword">const</span> layer = net.AddDepthwiseConvolution2dLayer(descriptor, weights, optionalBiases);</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; layer-&gt;ExecuteStrategy(visitor);</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160;}</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160;</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160;TEST_CASE(<span class="stringliteral">&quot;CheckNamedDepthwiseConvolution2dLayerWithBiases&quot;</span>)</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160;{</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* layerName = <span class="stringliteral">&quot;DepthwiseConvolution2dLayer&quot;</span>;</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; DepthwiseConvolution2dDescriptor descriptor;</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; descriptor.m_PadLeft = 2;</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; descriptor.m_PadRight = 3;</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; descriptor.m_PadBottom = 1;</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; descriptor.m_PadTop = 5;</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; descriptor.m_StrideX = 2;</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; descriptor.m_StrideY = 3;</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; descriptor.m_DataLayout = DataLayout::NHWC;</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; descriptor.m_BiasEnabled = <span class="keyword">true</span>;</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; std::vector&lt;float&gt; data = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; std::vector&lt;unsigned int&gt; dimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; ConstTensor weights(TensorInfo(4, dimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>), data);</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160;</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; std::vector&lt;float&gt; biasData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; std::vector&lt;unsigned int&gt; biasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; ConstTensor biases(TensorInfo(4, biasDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>), biasData);</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; Optional&lt;ConstTensor&gt; optionalBiases(biases);</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160;</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; TestDepthwiseConvolution2dLayerVisitor visitor(descriptor, weights, optionalBiases, layerName);</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160;</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; NetworkImpl net;</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160;</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; IConnectableLayer* <span class="keyword">const</span> layer = net.AddDepthwiseConvolution2dLayer(descriptor, weights, optionalBiases, layerName);</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; layer-&gt;ExecuteStrategy(visitor);</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160;}</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160;</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160;TEST_CASE(<span class="stringliteral">&quot;CheckFullyConnectedLayer&quot;</span>)</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160;{</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; FullyConnectedDescriptor descriptor;</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; descriptor.m_TransposeWeightMatrix = <span class="keyword">true</span>;</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; descriptor.m_ConstantWeights = <span class="keyword">true</span>;</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; descriptor.m_BiasEnabled = <span class="keyword">false</span>;</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160;</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; std::vector&lt;float&gt; data = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; std::vector&lt;unsigned int&gt; dimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; ConstTensor weights(TensorInfo(4, dimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>), data);</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160;</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; TestConstantLayerVisitor weightsVisitor(weights);</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; TestFullyConnectedLayerVistor visitor(descriptor);</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160;</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; NetworkImpl net;</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160;</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; IConnectableLayer* <span class="keyword">const</span> weightsLayer = net.AddConstantLayer(weights);</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; IConnectableLayer* <span class="keyword">const</span> layer = net.AddFullyConnectedLayer(descriptor);</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; weightsLayer-&gt;GetOutputSlot(0).Connect(layer-&gt;GetInputSlot(1));</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160;</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; weightsLayer-&gt;ExecuteStrategy(weightsVisitor);</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; layer-&gt;ExecuteStrategy(visitor);</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160;}</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160;</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160;TEST_CASE(<span class="stringliteral">&quot;CheckNamedFullyConnectedLayer&quot;</span>)</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160;{</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* layerName = <span class="stringliteral">&quot;FullyConnectedLayer&quot;</span>;</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; FullyConnectedDescriptor descriptor;</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; descriptor.m_TransposeWeightMatrix = <span class="keyword">true</span>;</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; descriptor.m_ConstantWeights = <span class="keyword">true</span>;</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; descriptor.m_BiasEnabled = <span class="keyword">false</span>;</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160;</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; std::vector&lt;float&gt; data = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; std::vector&lt;unsigned int&gt; dimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; ConstTensor weights(TensorInfo(4, dimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>), data);</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160;</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; TestConstantLayerVisitor weightsVisitor(weights);</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; TestFullyConnectedLayerVistor visitor(descriptor, layerName);</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160;</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; NetworkImpl net;</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160;</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; IConnectableLayer* <span class="keyword">const</span> weightsLayer = net.AddConstantLayer(weights);</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; IConnectableLayer* <span class="keyword">const</span> layer = net.AddFullyConnectedLayer(descriptor, layerName);</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; weightsLayer-&gt;GetOutputSlot(0).Connect(layer-&gt;GetInputSlot(1));</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160;</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; weightsLayer-&gt;ExecuteStrategy(weightsVisitor);</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; layer-&gt;ExecuteStrategy(visitor);</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160;}</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160;</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160;TEST_CASE(<span class="stringliteral">&quot;CheckFullyConnectedLayerWithBiases&quot;</span>)</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160;{</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; FullyConnectedDescriptor descriptor;</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; descriptor.m_TransposeWeightMatrix = <span class="keyword">true</span>;</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; descriptor.m_ConstantWeights = <span class="keyword">true</span>;</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; descriptor.m_BiasEnabled = <span class="keyword">true</span>;</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160;</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; std::vector&lt;float&gt; data = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; std::vector&lt;unsigned int&gt; dimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; ConstTensor weights(TensorInfo(4, dimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>), data);</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160;</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; std::vector&lt;float&gt; biasData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; std::vector&lt;unsigned int&gt; biasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; ConstTensor biases(TensorInfo(4, biasDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>), biasData);</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160;</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; TestConstantLayerVisitor weightsVisitor(weights);</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; TestConstantLayerVisitor biasesVisitor(biases);</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; TestFullyConnectedLayerVistor visitor(descriptor);</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160;</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; NetworkImpl net;</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160;</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; IConnectableLayer* <span class="keyword">const</span> weightsLayer = net.AddConstantLayer(weights);</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; IConnectableLayer* <span class="keyword">const</span> biasesLayer = net.AddConstantLayer(biases);</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; IConnectableLayer* <span class="keyword">const</span> layer = net.AddFullyConnectedLayer(descriptor);</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; weightsLayer-&gt;GetOutputSlot(0).Connect(layer-&gt;GetInputSlot(1));</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; biasesLayer-&gt;GetOutputSlot(0).Connect(layer-&gt;GetInputSlot(2));</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160;</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; weightsLayer-&gt;ExecuteStrategy(weightsVisitor);</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; biasesLayer-&gt;ExecuteStrategy(biasesVisitor);</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; layer-&gt;ExecuteStrategy(visitor);</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160;}</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160;</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160;TEST_CASE(<span class="stringliteral">&quot;CheckNamedFullyConnectedLayerWithBiases&quot;</span>)</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160;{</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* layerName = <span class="stringliteral">&quot;FullyConnectedLayer&quot;</span>;</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; FullyConnectedDescriptor descriptor;</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; descriptor.m_TransposeWeightMatrix = <span class="keyword">true</span>;</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; descriptor.m_ConstantWeights = <span class="keyword">true</span>;</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; descriptor.m_BiasEnabled = <span class="keyword">true</span>;</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160;</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; std::vector&lt;float&gt; data = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; std::vector&lt;unsigned int&gt; dimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; ConstTensor weights(TensorInfo(4, dimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>), data);</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160;</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; std::vector&lt;float&gt; biasData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; std::vector&lt;unsigned int&gt; biasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; ConstTensor biases(TensorInfo(4, biasDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>), biasData);</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160;</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; TestConstantLayerVisitor weightsVisitor(weights);</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; TestConstantLayerVisitor biasesVisitor(biases);</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; TestFullyConnectedLayerVistor visitor(descriptor, layerName);</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160;</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; NetworkImpl net;</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160;</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; IConnectableLayer* <span class="keyword">const</span> weightsLayer = net.AddConstantLayer(weights);</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; IConnectableLayer* <span class="keyword">const</span> biasesLayer = net.AddConstantLayer(biases);</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; IConnectableLayer* <span class="keyword">const</span> layer = net.AddFullyConnectedLayer(descriptor, layerName);</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; weightsLayer-&gt;GetOutputSlot(0).Connect(layer-&gt;GetInputSlot(1));</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; biasesLayer-&gt;GetOutputSlot(0).Connect(layer-&gt;GetInputSlot(2));</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160;</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; weightsLayer-&gt;ExecuteStrategy(weightsVisitor);</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; biasesLayer-&gt;ExecuteStrategy(biasesVisitor);</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; layer-&gt;ExecuteStrategy(visitor);</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160;}</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160;</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160;TEST_CASE(<span class="stringliteral">&quot;CheckBatchNormalizationLayer&quot;</span>)</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160;{</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; BatchNormalizationDescriptor descriptor;</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; descriptor.m_Eps = 0.0002f;</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; descriptor.m_DataLayout = DataLayout::NHWC;</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160;</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; std::vector&lt;float&gt; data = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; std::vector&lt;unsigned int&gt; dimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; ConstTensor mean(TensorInfo(4, dimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>), data);</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160;</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; std::vector&lt;float&gt; varianceData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; std::vector&lt;unsigned int&gt; varianceDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; ConstTensor variance(TensorInfo(4, varianceDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>), varianceData);</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160;</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; std::vector&lt;float&gt; betaData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; std::vector&lt;unsigned int&gt; betaDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; ConstTensor beta(TensorInfo(4, betaDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>), betaData);</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160;</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; std::vector&lt;float&gt; gammaData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; std::vector&lt;unsigned int&gt; gammaDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; ConstTensor gamma(TensorInfo(4, gammaDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>), gammaData);</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160;</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; TestBatchNormalizationLayerVisitor visitor(descriptor, mean, variance, beta, gamma);</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160;</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; NetworkImpl net;</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160;</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; IConnectableLayer* <span class="keyword">const</span> layer = net.AddBatchNormalizationLayer(descriptor, mean, variance, beta, gamma);</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; layer-&gt;ExecuteStrategy(visitor);</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160;}</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160;</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160;TEST_CASE(<span class="stringliteral">&quot;CheckNamedBatchNormalizationLayer&quot;</span>)</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160;{</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* layerName = <span class="stringliteral">&quot;BatchNormalizationLayer&quot;</span>;</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; BatchNormalizationDescriptor descriptor;</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; descriptor.m_Eps = 0.0002f;</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; descriptor.m_DataLayout = DataLayout::NHWC;</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160;</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; std::vector&lt;float&gt; data = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; std::vector&lt;unsigned int&gt; dimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; ConstTensor mean(TensorInfo(4, dimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>), data);</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160;</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; std::vector&lt;float&gt; varianceData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; std::vector&lt;unsigned int&gt; varianceDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; ConstTensor variance(TensorInfo(4, varianceDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>), varianceData);</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160;</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; std::vector&lt;float&gt; betaData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; std::vector&lt;unsigned int&gt; betaDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; ConstTensor beta(TensorInfo(4, betaDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>), betaData);</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160;</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; std::vector&lt;float&gt; gammaData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; std::vector&lt;unsigned int&gt; gammaDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; ConstTensor gamma(TensorInfo(4, gammaDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>), gammaData);</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160;</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; TestBatchNormalizationLayerVisitor visitor(descriptor, mean, variance, beta, gamma, layerName);</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160;</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; NetworkImpl net;</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160;</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; IConnectableLayer* <span class="keyword">const</span> layer = net.AddBatchNormalizationLayer(</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; descriptor, mean, variance, beta, gamma, layerName);</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; layer-&gt;ExecuteStrategy(visitor);</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160;}</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160;</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160;TEST_CASE(<span class="stringliteral">&quot;CheckConstLayer&quot;</span>)</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160;{</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; std::vector&lt;float&gt; data = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; std::vector&lt;unsigned int&gt; dimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; ConstTensor input(TensorInfo(4, dimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>), data);</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160;</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; TestConstantLayerVisitor visitor(input);</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160;</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; NetworkImpl net;</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160;</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; IConnectableLayer* <span class="keyword">const</span> layer = net.AddConstantLayer(input);</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; layer-&gt;ExecuteStrategy(visitor);</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160;}</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160;</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160;TEST_CASE(<span class="stringliteral">&quot;CheckNamedConstLayer&quot;</span>)</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160;{</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* layerName = <span class="stringliteral">&quot;ConstantLayer&quot;</span>;</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; std::vector&lt;float&gt; data = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; std::vector&lt;unsigned int&gt; dimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; ConstTensor input(TensorInfo(4, dimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>), data);</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160;</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; TestConstantLayerVisitor visitor(input, layerName);</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160;</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; NetworkImpl net;</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160;</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; IConnectableLayer* <span class="keyword">const</span> layer = net.AddConstantLayer(input, layerName);</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; layer-&gt;ExecuteStrategy(visitor);</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160;}</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160;</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160;TEST_CASE(<span class="stringliteral">&quot;CheckLstmLayerBasic&quot;</span>)</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160;{</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; LstmDescriptor descriptor;</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; descriptor.m_ActivationFunc = 3;</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; descriptor.m_ClippingThresProj = 0.5f;</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; descriptor.m_ClippingThresCell = 0.3f;</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; descriptor.m_CifgEnabled = <span class="keyword">true</span>; <span class="comment">// if this is true then we DON&#39;T need to set the OptCifgParams</span></div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160;</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; std::vector&lt;float&gt; inputToForgetWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; std::vector&lt;unsigned int&gt; inputToForgetWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; ConstTensor inputToForgetWeights(</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; TensorInfo(4, inputToForgetWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; inputToForgetWeightsData);</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160;</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; std::vector&lt;float&gt; inputToCellWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; std::vector&lt;unsigned int&gt; inputToCellWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; ConstTensor inputToCellWeights(</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; TensorInfo(4, inputToCellWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; inputToCellWeightsData);</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160;</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; std::vector&lt;float&gt; inputToOutputWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; std::vector&lt;unsigned int&gt; inputToOutputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; ConstTensor inputToOutputWeights(</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; TensorInfo(4, inputToOutputWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; inputToOutputWeightsData);</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160;</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; std::vector&lt;float&gt; recurrentToForgetWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; std::vector&lt;unsigned int&gt; recurrentToForgetWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; ConstTensor recurrentToForgetWeights(</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; TensorInfo(4, recurrentToForgetWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; recurrentToForgetWeightsData);</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160;</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; std::vector&lt;float&gt; recurrentToCellWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; std::vector&lt;unsigned int&gt; recurrentToCellWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; ConstTensor recurrentToCellWeights(</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; TensorInfo(4, recurrentToCellWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; recurrentToCellWeightsData);</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160;</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; std::vector&lt;float&gt; recurrentToOutputWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; std::vector&lt;unsigned int&gt; recurrentToOutputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; ConstTensor recurrentToOutputWeights(</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; TensorInfo(4, recurrentToOutputWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; recurrentToOutputWeightsData);</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160;</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; std::vector&lt;float&gt; forgetGateBiasData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; std::vector&lt;unsigned int&gt; forgetGateBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; ConstTensor forgetGateBias(</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; TensorInfo(4, forgetGateBiasDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; forgetGateBiasData);</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160;</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; std::vector&lt;float&gt; cellBiasData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; std::vector&lt;unsigned int&gt; cellBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; ConstTensor cellBias(</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; TensorInfo(4, cellBiasDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; cellBiasData);</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160;</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; std::vector&lt;float&gt; outputGateBiasData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; std::vector&lt;unsigned int&gt; outputGateBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; ConstTensor outputGateBias(</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; TensorInfo(4, outputGateBiasDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; outputGateBiasData);</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160;</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; LstmInputParams params;</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; params.m_InputToForgetWeights = &amp;inputToForgetWeights;</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; params.m_InputToCellWeights = &amp;inputToCellWeights;</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; params.m_InputToOutputWeights = &amp;inputToOutputWeights;</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; params.m_RecurrentToForgetWeights = &amp;recurrentToForgetWeights;</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; params.m_RecurrentToCellWeights = &amp;recurrentToCellWeights;</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; params.m_RecurrentToOutputWeights = &amp;recurrentToOutputWeights;</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; params.m_ForgetGateBias = &amp;forgetGateBias;</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; params.m_CellBias = &amp;cellBias;</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; params.m_OutputGateBias = &amp;outputGateBias;</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160;</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; TestLstmLayerVisitor visitor(descriptor, params);</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160;</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; NetworkImpl net;</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160;</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; IConnectableLayer* <span class="keyword">const</span> layer = net.AddLstmLayer(descriptor, params);</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; layer-&gt;ExecuteStrategy(visitor);</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160;}</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160;</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160;TEST_CASE(<span class="stringliteral">&quot;CheckNamedLstmLayerBasic&quot;</span>)</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160;{</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* layerName = <span class="stringliteral">&quot;LstmLayer&quot;</span>;</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; LstmDescriptor descriptor;</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; descriptor.m_ActivationFunc = 3;</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; descriptor.m_ClippingThresProj = 0.5f;</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; descriptor.m_ClippingThresCell = 0.3f;</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; descriptor.m_CifgEnabled = <span class="keyword">true</span>; <span class="comment">// if this is true then we DON&#39;T need to set the OptCifgParams</span></div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160;</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; std::vector&lt;float&gt; inputToForgetWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; std::vector&lt;unsigned int&gt; inputToForgetWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; ConstTensor inputToForgetWeights(</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; TensorInfo(4, inputToForgetWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; inputToForgetWeightsData);</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160;</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; std::vector&lt;float&gt; inputToCellWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; std::vector&lt;unsigned int&gt; inputToCellWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; ConstTensor inputToCellWeights(</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; TensorInfo(4, inputToCellWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; inputToCellWeightsData);</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160;</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; std::vector&lt;float&gt; inputToOutputWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; std::vector&lt;unsigned int&gt; inputToOutputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; ConstTensor inputToOutputWeights(</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; TensorInfo(4, inputToOutputWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; inputToOutputWeightsData);</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160;</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; std::vector&lt;float&gt; recurrentToForgetWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; std::vector&lt;unsigned int&gt; recurrentToForgetWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; ConstTensor recurrentToForgetWeights(</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; TensorInfo(4, recurrentToForgetWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; recurrentToForgetWeightsData);</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160;</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; std::vector&lt;float&gt; recurrentToCellWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; std::vector&lt;unsigned int&gt; recurrentToCellWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; ConstTensor recurrentToCellWeights(</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; TensorInfo(4, recurrentToCellWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; recurrentToCellWeightsData);</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160;</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; std::vector&lt;float&gt; recurrentToOutputWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; std::vector&lt;unsigned int&gt; recurrentToOutputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; ConstTensor recurrentToOutputWeights(</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; TensorInfo(4, recurrentToOutputWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; recurrentToOutputWeightsData);</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160;</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; std::vector&lt;float&gt; forgetGateBiasData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; std::vector&lt;unsigned int&gt; forgetGateBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; ConstTensor forgetGateBias(</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; TensorInfo(4, forgetGateBiasDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; forgetGateBiasData);</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160;</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; std::vector&lt;float&gt; cellBiasData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; std::vector&lt;unsigned int&gt; cellBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; ConstTensor cellBias(</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; TensorInfo(4, cellBiasDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; cellBiasData);</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160;</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; std::vector&lt;float&gt; outputGateBiasData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; std::vector&lt;unsigned int&gt; outputGateBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; ConstTensor outputGateBias(</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; TensorInfo(4, outputGateBiasDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; outputGateBiasData);</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160;</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; LstmInputParams params;</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; params.m_InputToForgetWeights = &amp;inputToForgetWeights;</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; params.m_InputToCellWeights = &amp;inputToCellWeights;</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; params.m_InputToOutputWeights = &amp;inputToOutputWeights;</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; params.m_RecurrentToForgetWeights = &amp;recurrentToForgetWeights;</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; params.m_RecurrentToCellWeights = &amp;recurrentToCellWeights;</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; params.m_RecurrentToOutputWeights = &amp;recurrentToOutputWeights;</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; params.m_ForgetGateBias = &amp;forgetGateBias;</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; params.m_CellBias = &amp;cellBias;</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; params.m_OutputGateBias = &amp;outputGateBias;</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160;</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; TestLstmLayerVisitor visitor(descriptor, params, layerName);</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160;</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; NetworkImpl net;</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160;</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; IConnectableLayer* <span class="keyword">const</span> layer = net.AddLstmLayer(descriptor, params, layerName);</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; layer-&gt;ExecuteStrategy(visitor);</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160;}</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160;</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160;TEST_CASE(<span class="stringliteral">&quot;CheckLstmLayerCifgDisabled&quot;</span>)</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160;{</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; LstmDescriptor descriptor;</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; descriptor.m_ActivationFunc = 3;</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; descriptor.m_ClippingThresProj = 0.5f;</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; descriptor.m_ClippingThresCell = 0.3f;</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; descriptor.m_CifgEnabled = <span class="keyword">false</span>; <span class="comment">// if this is true then we DON&#39;T need to set the OptCifgParams</span></div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160;</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; std::vector&lt;float&gt; inputToForgetWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; std::vector&lt;unsigned int&gt; inputToForgetWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; ConstTensor inputToForgetWeights(</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; TensorInfo(4, inputToForgetWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; inputToForgetWeightsData);</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160;</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; std::vector&lt;float&gt; inputToCellWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; std::vector&lt;unsigned int&gt; inputToCellWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; ConstTensor inputToCellWeights(</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; TensorInfo(4, inputToCellWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; inputToCellWeightsData);</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160;</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; std::vector&lt;float&gt; inputToOutputWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; std::vector&lt;unsigned int&gt; inputToOutputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; ConstTensor inputToOutputWeights(</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; TensorInfo(4, inputToOutputWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; inputToOutputWeightsData);</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160;</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; std::vector&lt;float&gt; recurrentToForgetWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; std::vector&lt;unsigned int&gt; recurrentToForgetWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; ConstTensor recurrentToForgetWeights(</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; TensorInfo(4, recurrentToForgetWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; recurrentToForgetWeightsData);</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160;</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; std::vector&lt;float&gt; recurrentToCellWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; std::vector&lt;unsigned int&gt; recurrentToCellWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; ConstTensor recurrentToCellWeights(</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; TensorInfo(4, recurrentToCellWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; recurrentToCellWeightsData);</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160;</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; std::vector&lt;float&gt; recurrentToOutputWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; std::vector&lt;unsigned int&gt; recurrentToOutputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; ConstTensor recurrentToOutputWeights(</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; TensorInfo(4, recurrentToOutputWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; recurrentToOutputWeightsData);</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160;</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; std::vector&lt;float&gt; forgetGateBiasData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; std::vector&lt;unsigned int&gt; forgetGateBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; ConstTensor forgetGateBias(</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; TensorInfo(4, forgetGateBiasDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; forgetGateBiasData);</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160;</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; std::vector&lt;float&gt; cellBiasData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; std::vector&lt;unsigned int&gt; cellBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; ConstTensor cellBias(</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; TensorInfo(4, cellBiasDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; cellBiasData);</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160;</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; std::vector&lt;float&gt; outputGateBiasData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; std::vector&lt;unsigned int&gt; outputGateBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; ConstTensor outputGateBias(</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; TensorInfo(4, outputGateBiasDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; outputGateBiasData);</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160;</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; std::vector&lt;float&gt; inputToInputWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; std::vector&lt;unsigned int&gt; inputToInputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; ConstTensor inputToInputWeights(</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; TensorInfo(4, inputToInputWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; inputToInputWeightsData);</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160;</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; std::vector&lt;float&gt; recurrentToInputWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; std::vector&lt;unsigned int&gt; recurrentToInputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; ConstTensor recurrentToInputWeights(</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; TensorInfo(4, recurrentToInputWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; recurrentToInputWeightsData);</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160;</div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; std::vector&lt;float&gt; inputGateBiasData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; std::vector&lt;unsigned int&gt; inputGateBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; ConstTensor inputGateBias(</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; TensorInfo(4, inputGateBiasDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; inputGateBiasData);</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160;</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; LstmInputParams params;</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; params.m_InputToForgetWeights = &amp;inputToForgetWeights;</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; params.m_InputToCellWeights = &amp;inputToCellWeights;</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; params.m_InputToOutputWeights = &amp;inputToOutputWeights;</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; params.m_RecurrentToForgetWeights = &amp;recurrentToForgetWeights;</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; params.m_RecurrentToCellWeights = &amp;recurrentToCellWeights;</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; params.m_RecurrentToOutputWeights = &amp;recurrentToOutputWeights;</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; params.m_ForgetGateBias = &amp;forgetGateBias;</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; params.m_CellBias = &amp;cellBias;</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; params.m_OutputGateBias = &amp;outputGateBias;</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160;</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; params.m_InputToInputWeights = &amp;inputToInputWeights;</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; params.m_RecurrentToInputWeights = &amp;recurrentToInputWeights;</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; params.m_InputGateBias = &amp;inputGateBias;</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160;</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; TestLstmLayerVisitor visitor(descriptor, params);</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160;</div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; NetworkImpl net;</div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160;</div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; IConnectableLayer* <span class="keyword">const</span> layer = net.AddLstmLayer(descriptor, params);</div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; layer-&gt;ExecuteStrategy(visitor);</div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160;}</div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160;</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160;TEST_CASE(<span class="stringliteral">&quot;CheckNamedLstmLayerCifgDisabled&quot;</span>)</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160;{</div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* layerName = <span class="stringliteral">&quot;LstmLayer&quot;</span>;</div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; LstmDescriptor descriptor;</div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; descriptor.m_ActivationFunc = 3;</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; descriptor.m_ClippingThresProj = 0.5f;</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; descriptor.m_ClippingThresCell = 0.3f;</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; descriptor.m_CifgEnabled = <span class="keyword">false</span>; <span class="comment">// if this is true then we DON&#39;T need to set the OptCifgParams</span></div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160;</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; std::vector&lt;float&gt; inputToForgetWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; std::vector&lt;unsigned int&gt; inputToForgetWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; ConstTensor inputToForgetWeights(</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; TensorInfo(4, inputToForgetWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; inputToForgetWeightsData);</div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160;</div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; std::vector&lt;float&gt; inputToCellWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160; std::vector&lt;unsigned int&gt; inputToCellWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; ConstTensor inputToCellWeights(</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; TensorInfo(4, inputToCellWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; inputToCellWeightsData);</div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160;</div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; std::vector&lt;float&gt; inputToOutputWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; std::vector&lt;unsigned int&gt; inputToOutputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; ConstTensor inputToOutputWeights(</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; TensorInfo(4, inputToOutputWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; inputToOutputWeightsData);</div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160;</div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; std::vector&lt;float&gt; recurrentToForgetWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; std::vector&lt;unsigned int&gt; recurrentToForgetWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; ConstTensor recurrentToForgetWeights(</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; TensorInfo(4, recurrentToForgetWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; recurrentToForgetWeightsData);</div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160;</div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; std::vector&lt;float&gt; recurrentToCellWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; std::vector&lt;unsigned int&gt; recurrentToCellWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; ConstTensor recurrentToCellWeights(</div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160; TensorInfo(4, recurrentToCellWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; recurrentToCellWeightsData);</div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160;</div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; std::vector&lt;float&gt; recurrentToOutputWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; std::vector&lt;unsigned int&gt; recurrentToOutputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; ConstTensor recurrentToOutputWeights(</div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; TensorInfo(4, recurrentToOutputWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; recurrentToOutputWeightsData);</div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160;</div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; std::vector&lt;float&gt; forgetGateBiasData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; std::vector&lt;unsigned int&gt; forgetGateBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; ConstTensor forgetGateBias(</div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; TensorInfo(4, forgetGateBiasDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; forgetGateBiasData);</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160;</div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; std::vector&lt;float&gt; cellBiasData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; std::vector&lt;unsigned int&gt; cellBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; ConstTensor cellBias(</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160; TensorInfo(4, cellBiasDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160; cellBiasData);</div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160;</div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160; std::vector&lt;float&gt; outputGateBiasData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160; std::vector&lt;unsigned int&gt; outputGateBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160; ConstTensor outputGateBias(</div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160; TensorInfo(4, outputGateBiasDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160; outputGateBiasData);</div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160;</div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160; std::vector&lt;float&gt; inputToInputWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160; std::vector&lt;unsigned int&gt; inputToInputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160; ConstTensor inputToInputWeights(</div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160; TensorInfo(4, inputToInputWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160; inputToInputWeightsData);</div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160;</div><div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160; std::vector&lt;float&gt; recurrentToInputWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160; std::vector&lt;unsigned int&gt; recurrentToInputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160; ConstTensor recurrentToInputWeights(</div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160; TensorInfo(4, recurrentToInputWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160; recurrentToInputWeightsData);</div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160;</div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160; std::vector&lt;float&gt; inputGateBiasData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160; std::vector&lt;unsigned int&gt; inputGateBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160; ConstTensor inputGateBias(</div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160; TensorInfo(4, inputGateBiasDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160; inputGateBiasData);</div><div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160;</div><div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160; LstmInputParams params;</div><div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160; params.m_InputToForgetWeights = &amp;inputToForgetWeights;</div><div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160; params.m_InputToCellWeights = &amp;inputToCellWeights;</div><div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160; params.m_InputToOutputWeights = &amp;inputToOutputWeights;</div><div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160; params.m_RecurrentToForgetWeights = &amp;recurrentToForgetWeights;</div><div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; params.m_RecurrentToCellWeights = &amp;recurrentToCellWeights;</div><div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160; params.m_RecurrentToOutputWeights = &amp;recurrentToOutputWeights;</div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160; params.m_ForgetGateBias = &amp;forgetGateBias;</div><div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160; params.m_CellBias = &amp;cellBias;</div><div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160; params.m_OutputGateBias = &amp;outputGateBias;</div><div class="line"><a name="l00889"></a><span class="lineno"> 889</span>&#160;</div><div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160; params.m_InputToInputWeights = &amp;inputToInputWeights;</div><div class="line"><a name="l00891"></a><span class="lineno"> 891</span>&#160; params.m_RecurrentToInputWeights = &amp;recurrentToInputWeights;</div><div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160; params.m_InputGateBias = &amp;inputGateBias;</div><div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160;</div><div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160; TestLstmLayerVisitor visitor(descriptor, params, layerName);</div><div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160;</div><div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160; NetworkImpl net;</div><div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160;</div><div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160; IConnectableLayer* <span class="keyword">const</span> layer = net.AddLstmLayer(descriptor, params, layerName);</div><div class="line"><a name="l00899"></a><span class="lineno"> 899</span>&#160; layer-&gt;ExecuteStrategy(visitor);</div><div class="line"><a name="l00900"></a><span class="lineno"> 900</span>&#160;}</div><div class="line"><a name="l00901"></a><span class="lineno"> 901</span>&#160;</div><div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160;<span class="comment">// TODO add one with peephole</span></div><div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160;TEST_CASE(<span class="stringliteral">&quot;CheckLstmLayerPeephole&quot;</span>)</div><div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160;{</div><div class="line"><a name="l00905"></a><span class="lineno"> 905</span>&#160; LstmDescriptor descriptor;</div><div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160; descriptor.m_ActivationFunc = 3;</div><div class="line"><a name="l00907"></a><span class="lineno"> 907</span>&#160; descriptor.m_ClippingThresProj = 0.5f;</div><div class="line"><a name="l00908"></a><span class="lineno"> 908</span>&#160; descriptor.m_ClippingThresCell = 0.3f;</div><div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160; descriptor.m_CifgEnabled = <span class="keyword">true</span>; <span class="comment">// if this is true then we DON&#39;T need to set the OptCifgParams</span></div><div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160; descriptor.m_PeepholeEnabled = <span class="keyword">true</span>;</div><div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160;</div><div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160; std::vector&lt;float&gt; inputToForgetWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160; std::vector&lt;unsigned int&gt; inputToForgetWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160; ConstTensor inputToForgetWeights(</div><div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160; TensorInfo(4, inputToForgetWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00916"></a><span class="lineno"> 916</span>&#160; inputToForgetWeightsData);</div><div class="line"><a name="l00917"></a><span class="lineno"> 917</span>&#160;</div><div class="line"><a name="l00918"></a><span class="lineno"> 918</span>&#160; std::vector&lt;float&gt; inputToCellWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00919"></a><span class="lineno"> 919</span>&#160; std::vector&lt;unsigned int&gt; inputToCellWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00920"></a><span class="lineno"> 920</span>&#160; ConstTensor inputToCellWeights(</div><div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160; TensorInfo(4, inputToCellWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00922"></a><span class="lineno"> 922</span>&#160; inputToCellWeightsData);</div><div class="line"><a name="l00923"></a><span class="lineno"> 923</span>&#160;</div><div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160; std::vector&lt;float&gt; inputToOutputWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00925"></a><span class="lineno"> 925</span>&#160; std::vector&lt;unsigned int&gt; inputToOutputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160; ConstTensor inputToOutputWeights(</div><div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160; TensorInfo(4, inputToOutputWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160; inputToOutputWeightsData);</div><div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160;</div><div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160; std::vector&lt;float&gt; recurrentToForgetWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160; std::vector&lt;unsigned int&gt; recurrentToForgetWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00932"></a><span class="lineno"> 932</span>&#160; ConstTensor recurrentToForgetWeights(</div><div class="line"><a name="l00933"></a><span class="lineno"> 933</span>&#160; TensorInfo(4, recurrentToForgetWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00934"></a><span class="lineno"> 934</span>&#160; recurrentToForgetWeightsData);</div><div class="line"><a name="l00935"></a><span class="lineno"> 935</span>&#160;</div><div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160; std::vector&lt;float&gt; recurrentToCellWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160; std::vector&lt;unsigned int&gt; recurrentToCellWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160; ConstTensor recurrentToCellWeights(</div><div class="line"><a name="l00939"></a><span class="lineno"> 939</span>&#160; TensorInfo(4, recurrentToCellWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160; recurrentToCellWeightsData);</div><div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160;</div><div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160; std::vector&lt;float&gt; recurrentToOutputWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00943"></a><span class="lineno"> 943</span>&#160; std::vector&lt;unsigned int&gt; recurrentToOutputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160; ConstTensor recurrentToOutputWeights(</div><div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160; TensorInfo(4, recurrentToOutputWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160; recurrentToOutputWeightsData);</div><div class="line"><a name="l00947"></a><span class="lineno"> 947</span>&#160;</div><div class="line"><a name="l00948"></a><span class="lineno"> 948</span>&#160; std::vector&lt;float&gt; forgetGateBiasData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00949"></a><span class="lineno"> 949</span>&#160; std::vector&lt;unsigned int&gt; forgetGateBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00950"></a><span class="lineno"> 950</span>&#160; ConstTensor forgetGateBias(</div><div class="line"><a name="l00951"></a><span class="lineno"> 951</span>&#160; TensorInfo(4, forgetGateBiasDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00952"></a><span class="lineno"> 952</span>&#160; forgetGateBiasData);</div><div class="line"><a name="l00953"></a><span class="lineno"> 953</span>&#160;</div><div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160; std::vector&lt;float&gt; cellBiasData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160; std::vector&lt;unsigned int&gt; cellBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160; ConstTensor cellBias(</div><div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160; TensorInfo(4, cellBiasDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160; cellBiasData);</div><div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160;</div><div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; std::vector&lt;float&gt; outputGateBiasData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160; std::vector&lt;unsigned int&gt; outputGateBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160; ConstTensor outputGateBias(</div><div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160; TensorInfo(4, outputGateBiasDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160; outputGateBiasData);</div><div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160;</div><div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160; std::vector&lt;float&gt; cellToForgetWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00967"></a><span class="lineno"> 967</span>&#160; std::vector&lt;unsigned int&gt; cellToForgetWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00968"></a><span class="lineno"> 968</span>&#160; ConstTensor cellToForgetWeights(</div><div class="line"><a name="l00969"></a><span class="lineno"> 969</span>&#160; TensorInfo(4, cellToForgetWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00970"></a><span class="lineno"> 970</span>&#160; cellToForgetWeightsData);</div><div class="line"><a name="l00971"></a><span class="lineno"> 971</span>&#160;</div><div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160; std::vector&lt;float&gt; cellToOutputWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l00973"></a><span class="lineno"> 973</span>&#160; std::vector&lt;unsigned int&gt; cellToOutputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l00974"></a><span class="lineno"> 974</span>&#160; ConstTensor cellToOutputWeights(</div><div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160; TensorInfo(4, cellToOutputWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160; cellToOutputWeightsData);</div><div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160;</div><div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160; LstmInputParams params;</div><div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160; params.m_InputToForgetWeights = &amp;inputToForgetWeights;</div><div class="line"><a name="l00980"></a><span class="lineno"> 980</span>&#160; params.m_InputToCellWeights = &amp;inputToCellWeights;</div><div class="line"><a name="l00981"></a><span class="lineno"> 981</span>&#160; params.m_InputToOutputWeights = &amp;inputToOutputWeights;</div><div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160; params.m_RecurrentToForgetWeights = &amp;recurrentToForgetWeights;</div><div class="line"><a name="l00983"></a><span class="lineno"> 983</span>&#160; params.m_RecurrentToCellWeights = &amp;recurrentToCellWeights;</div><div class="line"><a name="l00984"></a><span class="lineno"> 984</span>&#160; params.m_RecurrentToOutputWeights = &amp;recurrentToOutputWeights;</div><div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160; params.m_ForgetGateBias = &amp;forgetGateBias;</div><div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160; params.m_CellBias = &amp;cellBias;</div><div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160; params.m_OutputGateBias = &amp;outputGateBias;</div><div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160;</div><div class="line"><a name="l00989"></a><span class="lineno"> 989</span>&#160; params.m_CellToForgetWeights = &amp;cellToForgetWeights;</div><div class="line"><a name="l00990"></a><span class="lineno"> 990</span>&#160; params.m_CellToOutputWeights = &amp;cellToOutputWeights;</div><div class="line"><a name="l00991"></a><span class="lineno"> 991</span>&#160;</div><div class="line"><a name="l00992"></a><span class="lineno"> 992</span>&#160; TestLstmLayerVisitor visitor(descriptor, params);</div><div class="line"><a name="l00993"></a><span class="lineno"> 993</span>&#160;</div><div class="line"><a name="l00994"></a><span class="lineno"> 994</span>&#160; NetworkImpl net;</div><div class="line"><a name="l00995"></a><span class="lineno"> 995</span>&#160;</div><div class="line"><a name="l00996"></a><span class="lineno"> 996</span>&#160; IConnectableLayer* <span class="keyword">const</span> layer = net.AddLstmLayer(descriptor, params);</div><div class="line"><a name="l00997"></a><span class="lineno"> 997</span>&#160; layer-&gt;ExecuteStrategy(visitor);</div><div class="line"><a name="l00998"></a><span class="lineno"> 998</span>&#160;}</div><div class="line"><a name="l00999"></a><span class="lineno"> 999</span>&#160;</div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160;TEST_CASE(<span class="stringliteral">&quot;CheckLstmLayerPeepholeCifgDisabled&quot;</span>)</div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160;{</div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160; LstmDescriptor descriptor;</div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160; descriptor.m_ActivationFunc = 3;</div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160; descriptor.m_ClippingThresProj = 0.5f;</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160; descriptor.m_ClippingThresCell = 0.3f;</div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160; descriptor.m_CifgEnabled = <span class="keyword">false</span>;</div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160; descriptor.m_PeepholeEnabled = <span class="keyword">true</span>;</div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160;</div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160; std::vector&lt;float&gt; inputToForgetWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160; std::vector&lt;unsigned int&gt; inputToForgetWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160; ConstTensor inputToForgetWeights(</div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160; TensorInfo(4, inputToForgetWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160; inputToForgetWeightsData);</div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160;</div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160; std::vector&lt;float&gt; inputToCellWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160; std::vector&lt;unsigned int&gt; inputToCellWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160; ConstTensor inputToCellWeights(</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160; TensorInfo(4, inputToCellWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160; inputToCellWeightsData);</div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160;</div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160; std::vector&lt;float&gt; inputToOutputWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160; std::vector&lt;unsigned int&gt; inputToOutputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160; ConstTensor inputToOutputWeights(</div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160; TensorInfo(4, inputToOutputWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160; inputToOutputWeightsData);</div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160;</div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160; std::vector&lt;float&gt; recurrentToForgetWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160; std::vector&lt;unsigned int&gt; recurrentToForgetWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160; ConstTensor recurrentToForgetWeights(</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160; TensorInfo(4, recurrentToForgetWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160; recurrentToForgetWeightsData);</div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160;</div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160; std::vector&lt;float&gt; recurrentToCellWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160; std::vector&lt;unsigned int&gt; recurrentToCellWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160; ConstTensor recurrentToCellWeights(</div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160; TensorInfo(4, recurrentToCellWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160; recurrentToCellWeightsData);</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160;</div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160; std::vector&lt;float&gt; recurrentToOutputWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160; std::vector&lt;unsigned int&gt; recurrentToOutputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160; ConstTensor recurrentToOutputWeights(</div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160; TensorInfo(4, recurrentToOutputWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160; recurrentToOutputWeightsData);</div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160;</div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160; std::vector&lt;float&gt; forgetGateBiasData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160; std::vector&lt;unsigned int&gt; forgetGateBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160; ConstTensor forgetGateBias(</div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160; TensorInfo(4, forgetGateBiasDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160; forgetGateBiasData);</div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160;</div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160; std::vector&lt;float&gt; cellBiasData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160; std::vector&lt;unsigned int&gt; cellBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160; ConstTensor cellBias(</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160; TensorInfo(4, cellBiasDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160; cellBiasData);</div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160;</div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160; std::vector&lt;float&gt; outputGateBiasData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160; std::vector&lt;unsigned int&gt; outputGateBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160; ConstTensor outputGateBias(</div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160; TensorInfo(4, outputGateBiasDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160; outputGateBiasData);</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160;</div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160; std::vector&lt;float&gt; cellToInputWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160; std::vector&lt;unsigned int&gt; cellToInputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160; ConstTensor cellToInputWeights(</div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160; TensorInfo(4, cellToInputWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160; cellToInputWeightsData);</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160;</div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160; std::vector&lt;float&gt; cellToForgetWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160; std::vector&lt;unsigned int&gt; cellToForgetWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160; ConstTensor cellToForgetWeights(</div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160; TensorInfo(4, cellToForgetWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160; cellToForgetWeightsData);</div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160;</div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160; std::vector&lt;float&gt; cellToOutputWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160; std::vector&lt;unsigned int&gt; cellToOutputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160; ConstTensor cellToOutputWeights(</div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160; TensorInfo(4, cellToOutputWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160; cellToOutputWeightsData);</div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160;</div><div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160; std::vector&lt;float&gt; inputToInputWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160; std::vector&lt;unsigned int&gt; inputToInputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160; ConstTensor inputToInputWeights(</div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160; TensorInfo(4, inputToInputWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160; inputToInputWeightsData);</div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160;</div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160; std::vector&lt;float&gt; recurrentToInputWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160; std::vector&lt;unsigned int&gt; recurrentToInputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160; ConstTensor recurrentToInputWeights(</div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160; TensorInfo(4, recurrentToInputWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160; recurrentToInputWeightsData);</div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160;</div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160; std::vector&lt;float&gt; inputGateBiasData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160; std::vector&lt;unsigned int&gt; inputGateBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160; ConstTensor inputGateBias(</div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160; TensorInfo(4, inputGateBiasDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160; inputGateBiasData);</div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160;</div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160; LstmInputParams params;</div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160; <span class="comment">// Basic params</span></div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160; params.m_InputToForgetWeights = &amp;inputToForgetWeights;</div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160; params.m_InputToCellWeights = &amp;inputToCellWeights;</div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160; params.m_InputToOutputWeights = &amp;inputToOutputWeights;</div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160; params.m_RecurrentToForgetWeights = &amp;recurrentToForgetWeights;</div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160; params.m_RecurrentToCellWeights = &amp;recurrentToCellWeights;</div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160; params.m_RecurrentToOutputWeights = &amp;recurrentToOutputWeights;</div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160; params.m_ForgetGateBias = &amp;forgetGateBias;</div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160; params.m_CellBias = &amp;cellBias;</div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160; params.m_OutputGateBias = &amp;outputGateBias;</div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160;</div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160; <span class="comment">// Peephole params</span></div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160; params.m_CellToInputWeights = &amp;cellToInputWeights;</div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160; params.m_CellToForgetWeights = &amp;cellToForgetWeights;</div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160; params.m_CellToOutputWeights = &amp;cellToOutputWeights;</div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160;</div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160; <span class="comment">// Cifg params</span></div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160; params.m_InputToInputWeights = &amp;inputToInputWeights;</div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160; params.m_RecurrentToInputWeights = &amp;recurrentToInputWeights;</div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160; params.m_InputGateBias = &amp;inputGateBias;</div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160;</div><div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160; TestLstmLayerVisitor visitor(descriptor, params);</div><div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160;</div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160; NetworkImpl net;</div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160;</div><div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160; IConnectableLayer* <span class="keyword">const</span> layer = net.AddLstmLayer(descriptor, params);</div><div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160; layer-&gt;ExecuteStrategy(visitor);</div><div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160;}</div><div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160;</div><div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160;TEST_CASE(<span class="stringliteral">&quot;CheckNamedLstmLayerPeephole&quot;</span>)</div><div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160;{</div><div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* layerName = <span class="stringliteral">&quot;LstmLayer&quot;</span>;</div><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160; LstmDescriptor descriptor;</div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160; descriptor.m_ActivationFunc = 3;</div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160; descriptor.m_ClippingThresProj = 0.5f;</div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160; descriptor.m_ClippingThresCell = 0.3f;</div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160; descriptor.m_CifgEnabled = <span class="keyword">true</span>; <span class="comment">// if this is true then we DON&#39;T need to set the OptCifgParams</span></div><div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160; descriptor.m_PeepholeEnabled = <span class="keyword">true</span>;</div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160;</div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160; std::vector&lt;float&gt; inputToForgetWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160; std::vector&lt;unsigned int&gt; inputToForgetWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160; ConstTensor inputToForgetWeights(</div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160; TensorInfo(4, inputToForgetWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160; inputToForgetWeightsData);</div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160;</div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160; std::vector&lt;float&gt; inputToCellWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160; std::vector&lt;unsigned int&gt; inputToCellWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160; ConstTensor inputToCellWeights(</div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160; TensorInfo(4, inputToCellWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160; inputToCellWeightsData);</div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160;</div><div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160; std::vector&lt;float&gt; inputToOutputWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160; std::vector&lt;unsigned int&gt; inputToOutputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160; ConstTensor inputToOutputWeights(</div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160; TensorInfo(4, inputToOutputWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160; inputToOutputWeightsData);</div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160;</div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160; std::vector&lt;float&gt; recurrentToForgetWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160; std::vector&lt;unsigned int&gt; recurrentToForgetWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160; ConstTensor recurrentToForgetWeights(</div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160; TensorInfo(4, recurrentToForgetWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160; recurrentToForgetWeightsData);</div><div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160;</div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160; std::vector&lt;float&gt; recurrentToCellWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160; std::vector&lt;unsigned int&gt; recurrentToCellWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160; ConstTensor recurrentToCellWeights(</div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160; TensorInfo(4, recurrentToCellWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160; recurrentToCellWeightsData);</div><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160;</div><div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160; std::vector&lt;float&gt; recurrentToOutputWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160; std::vector&lt;unsigned int&gt; recurrentToOutputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160; ConstTensor recurrentToOutputWeights(</div><div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160; TensorInfo(4, recurrentToOutputWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160; recurrentToOutputWeightsData);</div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160;</div><div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160; std::vector&lt;float&gt; forgetGateBiasData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160; std::vector&lt;unsigned int&gt; forgetGateBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160; ConstTensor forgetGateBias(</div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160; TensorInfo(4, forgetGateBiasDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160; forgetGateBiasData);</div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160;</div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160; std::vector&lt;float&gt; cellBiasData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160; std::vector&lt;unsigned int&gt; cellBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160; ConstTensor cellBias(</div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160; TensorInfo(4, cellBiasDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160; cellBiasData);</div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160;</div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160; std::vector&lt;float&gt; outputGateBiasData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160; std::vector&lt;unsigned int&gt; outputGateBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160; ConstTensor outputGateBias(</div><div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160; TensorInfo(4, outputGateBiasDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160; outputGateBiasData);</div><div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160;</div><div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160; std::vector&lt;float&gt; cellToForgetWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160; std::vector&lt;unsigned int&gt; cellToForgetWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160; ConstTensor cellToForgetWeights(</div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160; TensorInfo(4, cellToForgetWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160; cellToForgetWeightsData);</div><div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160;</div><div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160; std::vector&lt;float&gt; cellToOutputWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160; std::vector&lt;unsigned int&gt; cellToOutputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160; ConstTensor cellToOutputWeights(</div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160; TensorInfo(4, cellToOutputWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160; cellToOutputWeightsData);</div><div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160;</div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160; LstmInputParams params;</div><div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160; params.m_InputToForgetWeights = &amp;inputToForgetWeights;</div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160; params.m_InputToCellWeights = &amp;inputToCellWeights;</div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160; params.m_InputToOutputWeights = &amp;inputToOutputWeights;</div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160; params.m_RecurrentToForgetWeights = &amp;recurrentToForgetWeights;</div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160; params.m_RecurrentToCellWeights = &amp;recurrentToCellWeights;</div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160; params.m_RecurrentToOutputWeights = &amp;recurrentToOutputWeights;</div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160; params.m_ForgetGateBias = &amp;forgetGateBias;</div><div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160; params.m_CellBias = &amp;cellBias;</div><div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160; params.m_OutputGateBias = &amp;outputGateBias;</div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160;</div><div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160; params.m_CellToForgetWeights = &amp;cellToForgetWeights;</div><div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160; params.m_CellToOutputWeights = &amp;cellToOutputWeights;</div><div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160;</div><div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160; TestLstmLayerVisitor visitor(descriptor, params, layerName);</div><div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160;</div><div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160; NetworkImpl net;</div><div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160;</div><div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160; IConnectableLayer* <span class="keyword">const</span> layer = net.AddLstmLayer(descriptor, params, layerName);</div><div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160; layer-&gt;ExecuteStrategy(visitor);</div><div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160;}</div><div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160;</div><div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160;<span class="comment">// TODO add one with projection</span></div><div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160;TEST_CASE(<span class="stringliteral">&quot;CheckLstmLayerProjection&quot;</span>)</div><div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160;{</div><div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160; LstmDescriptor descriptor;</div><div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160; descriptor.m_ActivationFunc = 3;</div><div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160; descriptor.m_ClippingThresProj = 0.5f;</div><div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160; descriptor.m_ClippingThresCell = 0.3f;</div><div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160; descriptor.m_CifgEnabled = <span class="keyword">true</span>; <span class="comment">// if this is true then we DON&#39;T need to set the OptCifgParams</span></div><div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160; descriptor.m_ProjectionEnabled = <span class="keyword">true</span>;</div><div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160;</div><div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160; std::vector&lt;float&gt; inputToForgetWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160; std::vector&lt;unsigned int&gt; inputToForgetWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160; ConstTensor inputToForgetWeights(</div><div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160; TensorInfo(4, inputToForgetWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160; inputToForgetWeightsData);</div><div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160;</div><div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160; std::vector&lt;float&gt; inputToCellWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160; std::vector&lt;unsigned int&gt; inputToCellWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160; ConstTensor inputToCellWeights(</div><div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160; TensorInfo(4, inputToCellWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160; inputToCellWeightsData);</div><div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160;</div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160; std::vector&lt;float&gt; inputToOutputWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160; std::vector&lt;unsigned int&gt; inputToOutputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160; ConstTensor inputToOutputWeights(</div><div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160; TensorInfo(4, inputToOutputWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160; inputToOutputWeightsData);</div><div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160;</div><div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160; std::vector&lt;float&gt; recurrentToForgetWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160; std::vector&lt;unsigned int&gt; recurrentToForgetWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160; ConstTensor recurrentToForgetWeights(</div><div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160; TensorInfo(4, recurrentToForgetWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160; recurrentToForgetWeightsData);</div><div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160;</div><div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160; std::vector&lt;float&gt; recurrentToCellWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160; std::vector&lt;unsigned int&gt; recurrentToCellWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160; ConstTensor recurrentToCellWeights(</div><div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160; TensorInfo(4, recurrentToCellWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160; recurrentToCellWeightsData);</div><div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160;</div><div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160; std::vector&lt;float&gt; recurrentToOutputWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160; std::vector&lt;unsigned int&gt; recurrentToOutputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160; ConstTensor recurrentToOutputWeights(</div><div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160; TensorInfo(4, recurrentToOutputWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160; recurrentToOutputWeightsData);</div><div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160;</div><div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160; std::vector&lt;float&gt; forgetGateBiasData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160; std::vector&lt;unsigned int&gt; forgetGateBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160; ConstTensor forgetGateBias(</div><div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160; TensorInfo(4, forgetGateBiasDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160; forgetGateBiasData);</div><div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160;</div><div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160; std::vector&lt;float&gt; cellBiasData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160; std::vector&lt;unsigned int&gt; cellBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160; ConstTensor cellBias(</div><div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160; TensorInfo(4, cellBiasDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160; cellBiasData);</div><div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160;</div><div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160; std::vector&lt;float&gt; outputGateBiasData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160; std::vector&lt;unsigned int&gt; outputGateBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160; ConstTensor outputGateBias(</div><div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160; TensorInfo(4, outputGateBiasDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160; outputGateBiasData);</div><div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160;</div><div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160; std::vector&lt;float&gt; projectionBiasData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160; std::vector&lt;unsigned int&gt; projectionBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160; ConstTensor projectionBias(</div><div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160; TensorInfo(4, projectionBiasDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160; projectionBiasData);</div><div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160;</div><div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160; std::vector&lt;float&gt; projectionWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160; std::vector&lt;unsigned int&gt; projectionWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160; ConstTensor projectionWeights(</div><div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160; TensorInfo(4, projectionWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160; projectionWeightsData);</div><div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160;</div><div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160; LstmInputParams params;</div><div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160; params.m_InputToForgetWeights = &amp;inputToForgetWeights;</div><div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160; params.m_InputToCellWeights = &amp;inputToCellWeights;</div><div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160; params.m_InputToOutputWeights = &amp;inputToOutputWeights;</div><div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160; params.m_RecurrentToForgetWeights = &amp;recurrentToForgetWeights;</div><div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160; params.m_RecurrentToCellWeights = &amp;recurrentToCellWeights;</div><div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160; params.m_RecurrentToOutputWeights = &amp;recurrentToOutputWeights;</div><div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160; params.m_ForgetGateBias = &amp;forgetGateBias;</div><div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160; params.m_CellBias = &amp;cellBias;</div><div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160; params.m_OutputGateBias = &amp;outputGateBias;</div><div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160;</div><div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160; params.m_ProjectionWeights = &amp;projectionWeights;</div><div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160; params.m_ProjectionBias = &amp;projectionBias;</div><div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160;</div><div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160; TestLstmLayerVisitor visitor(descriptor, params);</div><div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>&#160;</div><div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>&#160; NetworkImpl net;</div><div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>&#160;</div><div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>&#160; IConnectableLayer* <span class="keyword">const</span> layer = net.AddLstmLayer(descriptor, params);</div><div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>&#160; layer-&gt;ExecuteStrategy(visitor);</div><div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>&#160;}</div><div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>&#160;</div><div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160;TEST_CASE(<span class="stringliteral">&quot;CheckNamedLstmLayerProjection&quot;</span>)</div><div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160;{</div><div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* layerName = <span class="stringliteral">&quot;LstmLayer&quot;</span>;</div><div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160; LstmDescriptor descriptor;</div><div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160; descriptor.m_ActivationFunc = 3;</div><div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160; descriptor.m_ClippingThresProj = 0.5f;</div><div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160; descriptor.m_ClippingThresCell = 0.3f;</div><div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160; descriptor.m_CifgEnabled = <span class="keyword">true</span>; <span class="comment">// if this is true then we DON&#39;T need to set the OptCifgParams</span></div><div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160; descriptor.m_ProjectionEnabled = <span class="keyword">true</span>;</div><div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160;</div><div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160; std::vector&lt;float&gt; inputToForgetWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160; std::vector&lt;unsigned int&gt; inputToForgetWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160; ConstTensor inputToForgetWeights(</div><div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160; TensorInfo(4, inputToForgetWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160; inputToForgetWeightsData);</div><div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160;</div><div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>&#160; std::vector&lt;float&gt; inputToCellWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>&#160; std::vector&lt;unsigned int&gt; inputToCellWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160; ConstTensor inputToCellWeights(</div><div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>&#160; TensorInfo(4, inputToCellWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>&#160; inputToCellWeightsData);</div><div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>&#160;</div><div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>&#160; std::vector&lt;float&gt; inputToOutputWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>&#160; std::vector&lt;unsigned int&gt; inputToOutputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>&#160; ConstTensor inputToOutputWeights(</div><div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>&#160; TensorInfo(4, inputToOutputWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>&#160; inputToOutputWeightsData);</div><div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>&#160;</div><div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>&#160; std::vector&lt;float&gt; recurrentToForgetWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>&#160; std::vector&lt;unsigned int&gt; recurrentToForgetWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>&#160; ConstTensor recurrentToForgetWeights(</div><div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>&#160; TensorInfo(4, recurrentToForgetWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>&#160; recurrentToForgetWeightsData);</div><div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>&#160;</div><div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>&#160; std::vector&lt;float&gt; recurrentToCellWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>&#160; std::vector&lt;unsigned int&gt; recurrentToCellWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>&#160; ConstTensor recurrentToCellWeights(</div><div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>&#160; TensorInfo(4, recurrentToCellWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>&#160; recurrentToCellWeightsData);</div><div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>&#160;</div><div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>&#160; std::vector&lt;float&gt; recurrentToOutputWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>&#160; std::vector&lt;unsigned int&gt; recurrentToOutputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>&#160; ConstTensor recurrentToOutputWeights(</div><div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>&#160; TensorInfo(4, recurrentToOutputWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>&#160; recurrentToOutputWeightsData);</div><div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>&#160;</div><div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>&#160; std::vector&lt;float&gt; forgetGateBiasData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>&#160; std::vector&lt;unsigned int&gt; forgetGateBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>&#160; ConstTensor forgetGateBias(</div><div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>&#160; TensorInfo(4, forgetGateBiasDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>&#160; forgetGateBiasData);</div><div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>&#160;</div><div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>&#160; std::vector&lt;float&gt; cellBiasData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160; std::vector&lt;unsigned int&gt; cellBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>&#160; ConstTensor cellBias(</div><div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>&#160; TensorInfo(4, cellBiasDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160; cellBiasData);</div><div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160;</div><div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>&#160; std::vector&lt;float&gt; outputGateBiasData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>&#160; std::vector&lt;unsigned int&gt; outputGateBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>&#160; ConstTensor outputGateBias(</div><div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>&#160; TensorInfo(4, outputGateBiasDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>&#160; outputGateBiasData);</div><div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160;</div><div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>&#160; std::vector&lt;float&gt; projectionBiasData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>&#160; std::vector&lt;unsigned int&gt; projectionBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>&#160; ConstTensor projectionBias(</div><div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>&#160; TensorInfo(4, projectionBiasDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>&#160; projectionBiasData);</div><div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>&#160;</div><div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>&#160; std::vector&lt;float&gt; projectionWeightsData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};</div><div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>&#160; std::vector&lt;unsigned int&gt; projectionWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160; ConstTensor projectionWeights(</div><div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>&#160; TensorInfo(4, projectionWeightsDimensions.data(), DataType::Float32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>&#160; projectionWeightsData);</div><div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>&#160;</div><div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>&#160; LstmInputParams params;</div><div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>&#160; params.m_InputToForgetWeights = &amp;inputToForgetWeights;</div><div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>&#160; params.m_InputToCellWeights = &amp;inputToCellWeights;</div><div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>&#160; params.m_InputToOutputWeights = &amp;inputToOutputWeights;</div><div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>&#160; params.m_RecurrentToForgetWeights = &amp;recurrentToForgetWeights;</div><div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>&#160; params.m_RecurrentToCellWeights = &amp;recurrentToCellWeights;</div><div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>&#160; params.m_RecurrentToOutputWeights = &amp;recurrentToOutputWeights;</div><div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>&#160; params.m_ForgetGateBias = &amp;forgetGateBias;</div><div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>&#160; params.m_CellBias = &amp;cellBias;</div><div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>&#160; params.m_OutputGateBias = &amp;outputGateBias;</div><div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>&#160;</div><div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>&#160; params.m_ProjectionWeights = &amp;projectionWeights;</div><div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>&#160; params.m_ProjectionBias = &amp;projectionBias;</div><div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>&#160;</div><div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>&#160; TestLstmLayerVisitor visitor(descriptor, params, layerName);</div><div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>&#160;</div><div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>&#160; NetworkImpl net;</div><div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>&#160;</div><div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>&#160; IConnectableLayer* <span class="keyword">const</span> layer = net.AddLstmLayer(descriptor, params, layerName);</div><div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>&#160; layer-&gt;ExecuteStrategy(visitor);</div><div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>&#160;}</div><div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>&#160;</div><div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>&#160;TEST_CASE(<span class="stringliteral">&quot;CheckQLstmLayerBasic&quot;</span>)</div><div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>&#160;{</div><div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>&#160; QLstmDescriptor descriptor;</div><div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>&#160; descriptor.m_ProjectionClip = 0.5f;</div><div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>&#160; descriptor.m_CellClip = 0.3f;</div><div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>&#160; descriptor.m_CifgEnabled = <span class="keyword">true</span>;</div><div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>&#160;</div><div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>&#160; <span class="comment">// Basic params ONLY</span></div><div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>&#160; std::vector&lt;uint8_t&gt; inputToForgetWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>&#160; std::vector&lt;unsigned int&gt; inputToForgetWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>&#160; ConstTensor inputToForgetWeights(</div><div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>&#160; TensorInfo(4, inputToForgetWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>&#160; inputToForgetWeightsData);</div><div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>&#160;</div><div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>&#160; std::vector&lt;uint8_t&gt; inputToCellWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>&#160; std::vector&lt;unsigned int&gt; inputToCellWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>&#160; ConstTensor inputToCellWeights(</div><div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>&#160; TensorInfo(4, inputToCellWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>&#160; inputToCellWeightsData);</div><div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>&#160;</div><div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>&#160; std::vector&lt;uint8_t&gt; inputToOutputWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>&#160; std::vector&lt;unsigned int&gt; inputToOutputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>&#160; ConstTensor inputToOutputWeights(</div><div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>&#160; TensorInfo(4, inputToOutputWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>&#160; inputToOutputWeightsData);</div><div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>&#160;</div><div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>&#160; std::vector&lt;uint8_t&gt; recurrentToForgetWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>&#160; std::vector&lt;unsigned int&gt; recurrentToForgetWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>&#160; ConstTensor recurrentToForgetWeights(</div><div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>&#160; TensorInfo(4, recurrentToForgetWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>&#160; recurrentToForgetWeightsData);</div><div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>&#160;</div><div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>&#160; std::vector&lt;uint8_t&gt; recurrentToCellWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>&#160; std::vector&lt;unsigned int&gt; recurrentToCellWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>&#160; ConstTensor recurrentToCellWeights(</div><div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>&#160; TensorInfo(4, recurrentToCellWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>&#160; recurrentToCellWeightsData);</div><div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>&#160;</div><div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>&#160; std::vector&lt;uint8_t&gt; recurrentToOutputWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>&#160; std::vector&lt;unsigned int&gt; recurrentToOutputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>&#160; ConstTensor recurrentToOutputWeights(</div><div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>&#160; TensorInfo(4, recurrentToOutputWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>&#160; recurrentToOutputWeightsData);</div><div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>&#160;</div><div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>&#160; std::vector&lt;int32_t&gt; forgetGateBiasData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160; std::vector&lt;unsigned int&gt; forgetGateBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>&#160; ConstTensor forgetGateBias(</div><div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>&#160; TensorInfo(4, forgetGateBiasDimensions.data(), DataType::Signed32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>&#160; forgetGateBiasData);</div><div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>&#160;</div><div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>&#160; std::vector&lt;int32_t&gt; cellBiasData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>&#160; std::vector&lt;unsigned int&gt; cellBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>&#160; ConstTensor cellBias(</div><div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>&#160; TensorInfo(4, cellBiasDimensions.data(), DataType::Signed32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>&#160; cellBiasData);</div><div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>&#160;</div><div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>&#160; std::vector&lt;int32_t&gt; outputGateBiasData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>&#160; std::vector&lt;unsigned int&gt; outputGateBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>&#160; ConstTensor outputGateBias(</div><div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>&#160; TensorInfo(4, outputGateBiasDimensions.data(), DataType::Signed32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>&#160; outputGateBiasData);</div><div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>&#160;</div><div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>&#160; LstmInputParams params;</div><div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160; params.m_InputToForgetWeights = &amp;inputToForgetWeights;</div><div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>&#160; params.m_InputToCellWeights = &amp;inputToCellWeights;</div><div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>&#160; params.m_InputToOutputWeights = &amp;inputToOutputWeights;</div><div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>&#160; params.m_RecurrentToForgetWeights = &amp;recurrentToForgetWeights;</div><div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>&#160; params.m_RecurrentToCellWeights = &amp;recurrentToCellWeights;</div><div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>&#160; params.m_RecurrentToOutputWeights = &amp;recurrentToOutputWeights;</div><div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>&#160; params.m_ForgetGateBias = &amp;forgetGateBias;</div><div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>&#160; params.m_CellBias = &amp;cellBias;</div><div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>&#160; params.m_OutputGateBias = &amp;outputGateBias;</div><div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>&#160;</div><div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>&#160; TestQLstmLayerVisitor visitor(descriptor, params);</div><div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>&#160;</div><div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>&#160; NetworkImpl net;</div><div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>&#160;</div><div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>&#160; IConnectableLayer* <span class="keyword">const</span> layer = net.AddQLstmLayer(descriptor, params);</div><div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>&#160; layer-&gt;ExecuteStrategy(visitor);</div><div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>&#160;}</div><div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>&#160;</div><div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>&#160;TEST_CASE(<span class="stringliteral">&quot;CheckNamedQLstmLayerBasic&quot;</span>)</div><div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>&#160;{</div><div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* layerName = <span class="stringliteral">&quot;QLstmLayer&quot;</span>;</div><div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>&#160; QLstmDescriptor descriptor;</div><div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>&#160; descriptor.m_ProjectionClip = 0.5f;</div><div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>&#160; descriptor.m_CellClip = 0.3f;</div><div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>&#160; descriptor.m_CifgEnabled = <span class="keyword">true</span>;</div><div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>&#160;</div><div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>&#160; <span class="comment">// Basic params ONLY</span></div><div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>&#160; std::vector&lt;uint8_t&gt; inputToForgetWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>&#160; std::vector&lt;unsigned int&gt; inputToForgetWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>&#160; ConstTensor inputToForgetWeights(</div><div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>&#160; TensorInfo(4, inputToForgetWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>&#160; inputToForgetWeightsData);</div><div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>&#160;</div><div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>&#160; std::vector&lt;uint8_t&gt; inputToCellWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>&#160; std::vector&lt;unsigned int&gt; inputToCellWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>&#160; ConstTensor inputToCellWeights(</div><div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>&#160; TensorInfo(4, inputToCellWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>&#160; inputToCellWeightsData);</div><div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>&#160;</div><div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>&#160; std::vector&lt;uint8_t&gt; inputToOutputWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>&#160; std::vector&lt;unsigned int&gt; inputToOutputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>&#160; ConstTensor inputToOutputWeights(</div><div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>&#160; TensorInfo(4, inputToOutputWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>&#160; inputToOutputWeightsData);</div><div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>&#160;</div><div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>&#160; std::vector&lt;uint8_t&gt; recurrentToForgetWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>&#160; std::vector&lt;unsigned int&gt; recurrentToForgetWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>&#160; ConstTensor recurrentToForgetWeights(</div><div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>&#160; TensorInfo(4, recurrentToForgetWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>&#160; recurrentToForgetWeightsData);</div><div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>&#160;</div><div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>&#160; std::vector&lt;uint8_t&gt; recurrentToCellWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>&#160; std::vector&lt;unsigned int&gt; recurrentToCellWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>&#160; ConstTensor recurrentToCellWeights(</div><div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>&#160; TensorInfo(4, recurrentToCellWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>&#160; recurrentToCellWeightsData);</div><div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>&#160;</div><div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>&#160; std::vector&lt;uint8_t&gt; recurrentToOutputWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>&#160; std::vector&lt;unsigned int&gt; recurrentToOutputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>&#160; ConstTensor recurrentToOutputWeights(</div><div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>&#160; TensorInfo(4, recurrentToOutputWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>&#160; recurrentToOutputWeightsData);</div><div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>&#160;</div><div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>&#160; std::vector&lt;int32_t&gt; forgetGateBiasData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>&#160; std::vector&lt;unsigned int&gt; forgetGateBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>&#160; ConstTensor forgetGateBias(</div><div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>&#160; TensorInfo(4, forgetGateBiasDimensions.data(), DataType::Signed32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>&#160; forgetGateBiasData);</div><div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>&#160;</div><div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>&#160; std::vector&lt;int32_t&gt; cellBiasData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>&#160; std::vector&lt;unsigned int&gt; cellBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>&#160; ConstTensor cellBias(</div><div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>&#160; TensorInfo(4, cellBiasDimensions.data(), DataType::Signed32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>&#160; cellBiasData);</div><div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>&#160;</div><div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>&#160; std::vector&lt;int32_t&gt; outputGateBiasData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>&#160; std::vector&lt;unsigned int&gt; outputGateBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>&#160; ConstTensor outputGateBias(</div><div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>&#160; TensorInfo(4, outputGateBiasDimensions.data(), DataType::Signed32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>&#160; outputGateBiasData);</div><div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>&#160;</div><div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>&#160; LstmInputParams params;</div><div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>&#160; params.m_InputToForgetWeights = &amp;inputToForgetWeights;</div><div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>&#160; params.m_InputToCellWeights = &amp;inputToCellWeights;</div><div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>&#160; params.m_InputToOutputWeights = &amp;inputToOutputWeights;</div><div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>&#160; params.m_RecurrentToForgetWeights = &amp;recurrentToForgetWeights;</div><div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>&#160; params.m_RecurrentToCellWeights = &amp;recurrentToCellWeights;</div><div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>&#160; params.m_RecurrentToOutputWeights = &amp;recurrentToOutputWeights;</div><div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>&#160; params.m_ForgetGateBias = &amp;forgetGateBias;</div><div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>&#160; params.m_CellBias = &amp;cellBias;</div><div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>&#160; params.m_OutputGateBias = &amp;outputGateBias;</div><div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>&#160;</div><div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>&#160; TestQLstmLayerVisitor visitor(descriptor, params, layerName);</div><div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>&#160;</div><div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>&#160; NetworkImpl net;</div><div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>&#160;</div><div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>&#160; IConnectableLayer* <span class="keyword">const</span> layer = net.AddQLstmLayer(descriptor, params, layerName);</div><div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>&#160; layer-&gt;ExecuteStrategy(visitor);</div><div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>&#160;}</div><div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>&#160;</div><div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>&#160;TEST_CASE(<span class="stringliteral">&quot;CheckQLstmLayerCifgDisabled&quot;</span>)</div><div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>&#160;{</div><div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>&#160; QLstmDescriptor descriptor;</div><div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>&#160; descriptor.m_ProjectionClip = 0.5f;</div><div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>&#160; descriptor.m_CellClip = 0.3f;</div><div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>&#160; descriptor.m_CifgEnabled = <span class="keyword">false</span>;</div><div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>&#160;</div><div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>&#160; <span class="comment">// Basic params</span></div><div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>&#160; std::vector&lt;uint8_t&gt; inputToForgetWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>&#160; std::vector&lt;unsigned int&gt; inputToForgetWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>&#160; ConstTensor inputToForgetWeights(</div><div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>&#160; TensorInfo(4, inputToForgetWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>&#160; inputToForgetWeightsData);</div><div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>&#160;</div><div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>&#160; std::vector&lt;uint8_t&gt; inputToCellWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>&#160; std::vector&lt;unsigned int&gt; inputToCellWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>&#160; ConstTensor inputToCellWeights(</div><div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>&#160; TensorInfo(4, inputToCellWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>&#160; inputToCellWeightsData);</div><div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>&#160;</div><div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>&#160; std::vector&lt;uint8_t&gt; inputToOutputWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>&#160; std::vector&lt;unsigned int&gt; inputToOutputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>&#160; ConstTensor inputToOutputWeights(</div><div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>&#160; TensorInfo(4, inputToOutputWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>&#160; inputToOutputWeightsData);</div><div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>&#160;</div><div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>&#160; std::vector&lt;uint8_t&gt; recurrentToForgetWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>&#160; std::vector&lt;unsigned int&gt; recurrentToForgetWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>&#160; ConstTensor recurrentToForgetWeights(</div><div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>&#160; TensorInfo(4, recurrentToForgetWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>&#160; recurrentToForgetWeightsData);</div><div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>&#160;</div><div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>&#160; std::vector&lt;uint8_t&gt; recurrentToCellWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>&#160; std::vector&lt;unsigned int&gt; recurrentToCellWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>&#160; ConstTensor recurrentToCellWeights(</div><div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>&#160; TensorInfo(4, recurrentToCellWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>&#160; recurrentToCellWeightsData);</div><div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>&#160;</div><div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>&#160; std::vector&lt;uint8_t&gt; recurrentToOutputWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>&#160; std::vector&lt;unsigned int&gt; recurrentToOutputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>&#160; ConstTensor recurrentToOutputWeights(</div><div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>&#160; TensorInfo(4, recurrentToOutputWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>&#160; recurrentToOutputWeightsData);</div><div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>&#160;</div><div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>&#160; std::vector&lt;int32_t&gt; forgetGateBiasData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>&#160; std::vector&lt;unsigned int&gt; forgetGateBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>&#160; ConstTensor forgetGateBias(</div><div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>&#160; TensorInfo(4, forgetGateBiasDimensions.data(), DataType::Signed32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>&#160; forgetGateBiasData);</div><div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>&#160;</div><div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>&#160; std::vector&lt;int32_t&gt; cellBiasData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>&#160; std::vector&lt;unsigned int&gt; cellBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>&#160; ConstTensor cellBias(</div><div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>&#160; TensorInfo(4, cellBiasDimensions.data(), DataType::Signed32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>&#160; cellBiasData);</div><div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>&#160;</div><div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>&#160; std::vector&lt;int32_t&gt; outputGateBiasData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>&#160; std::vector&lt;unsigned int&gt; outputGateBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>&#160; ConstTensor outputGateBias(</div><div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>&#160; TensorInfo(4, outputGateBiasDimensions.data(), DataType::Signed32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>&#160; outputGateBiasData);</div><div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>&#160;</div><div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>&#160; <span class="comment">// CIFG disabled params</span></div><div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>&#160; std::vector&lt;uint8_t&gt; inputToInputWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>&#160; std::vector&lt;unsigned int&gt; inputToInputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>&#160; ConstTensor inputToInputWeights(</div><div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>&#160; TensorInfo(4, inputToInputWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>&#160; inputToInputWeightsData);</div><div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>&#160;</div><div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>&#160; std::vector&lt;uint8_t&gt; recurrentToInputWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>&#160; std::vector&lt;unsigned int&gt; recurrentToInputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01657"></a><span class="lineno"> 1657</span>&#160; ConstTensor recurrentToInputWeights(</div><div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>&#160; TensorInfo(4, recurrentToInputWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>&#160; recurrentToInputWeightsData);</div><div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>&#160;</div><div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>&#160; std::vector&lt;int32_t&gt; inputGateBiasData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>&#160; std::vector&lt;unsigned int&gt; inputGateBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>&#160; ConstTensor inputGateBias(</div><div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>&#160; TensorInfo(4, inputGateBiasDimensions.data(), DataType::Signed32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>&#160; inputGateBiasData);</div><div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>&#160;</div><div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>&#160; LstmInputParams params;</div><div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>&#160;</div><div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>&#160; <span class="comment">// Basic params</span></div><div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>&#160; params.m_InputToForgetWeights = &amp;inputToForgetWeights;</div><div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>&#160; params.m_InputToCellWeights = &amp;inputToCellWeights;</div><div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>&#160; params.m_InputToOutputWeights = &amp;inputToOutputWeights;</div><div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>&#160; params.m_RecurrentToForgetWeights = &amp;recurrentToForgetWeights;</div><div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>&#160; params.m_RecurrentToCellWeights = &amp;recurrentToCellWeights;</div><div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>&#160; params.m_RecurrentToOutputWeights = &amp;recurrentToOutputWeights;</div><div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>&#160; params.m_ForgetGateBias = &amp;forgetGateBias;</div><div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>&#160; params.m_CellBias = &amp;cellBias;</div><div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>&#160; params.m_OutputGateBias = &amp;outputGateBias;</div><div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>&#160;</div><div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>&#160; <span class="comment">// CIFG disabled params</span></div><div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>&#160; params.m_InputToInputWeights = &amp;inputToInputWeights;</div><div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>&#160; params.m_RecurrentToInputWeights = &amp;recurrentToInputWeights;</div><div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>&#160; params.m_InputGateBias = &amp;inputGateBias;</div><div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>&#160;</div><div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>&#160; TestQLstmLayerVisitor visitor(descriptor, params);</div><div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>&#160;</div><div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>&#160; NetworkImpl net;</div><div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>&#160;</div><div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>&#160; IConnectableLayer* <span class="keyword">const</span> layer = net.AddQLstmLayer(descriptor, params);</div><div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>&#160; layer-&gt;ExecuteStrategy(visitor);</div><div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>&#160;}</div><div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>&#160;</div><div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>&#160;TEST_CASE(<span class="stringliteral">&quot;CheckQLstmLayerCifgDisabledPeepholeEnabled&quot;</span>)</div><div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>&#160;{</div><div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>&#160; QLstmDescriptor descriptor;</div><div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>&#160; descriptor.m_ProjectionClip = 0.5f;</div><div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>&#160; descriptor.m_CellClip = 0.3f;</div><div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>&#160; descriptor.m_CifgEnabled = <span class="keyword">false</span>;</div><div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>&#160; descriptor.m_PeepholeEnabled = <span class="keyword">true</span>;</div><div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>&#160;</div><div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>&#160; <span class="comment">// Basic params</span></div><div class="line"><a name="l01702"></a><span class="lineno"> 1702</span>&#160; std::vector&lt;uint8_t&gt; inputToForgetWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>&#160; std::vector&lt;unsigned int&gt; inputToForgetWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>&#160; ConstTensor inputToForgetWeights(</div><div class="line"><a name="l01705"></a><span class="lineno"> 1705</span>&#160; TensorInfo(4, inputToForgetWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01706"></a><span class="lineno"> 1706</span>&#160; inputToForgetWeightsData);</div><div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>&#160;</div><div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>&#160; std::vector&lt;uint8_t&gt; inputToCellWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>&#160; std::vector&lt;unsigned int&gt; inputToCellWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>&#160; ConstTensor inputToCellWeights(</div><div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>&#160; TensorInfo(4, inputToCellWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>&#160; inputToCellWeightsData);</div><div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>&#160;</div><div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>&#160; std::vector&lt;uint8_t&gt; inputToOutputWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>&#160; std::vector&lt;unsigned int&gt; inputToOutputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01716"></a><span class="lineno"> 1716</span>&#160; ConstTensor inputToOutputWeights(</div><div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>&#160; TensorInfo(4, inputToOutputWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>&#160; inputToOutputWeightsData);</div><div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>&#160;</div><div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>&#160; std::vector&lt;uint8_t&gt; recurrentToForgetWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>&#160; std::vector&lt;unsigned int&gt; recurrentToForgetWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>&#160; ConstTensor recurrentToForgetWeights(</div><div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>&#160; TensorInfo(4, recurrentToForgetWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01724"></a><span class="lineno"> 1724</span>&#160; recurrentToForgetWeightsData);</div><div class="line"><a name="l01725"></a><span class="lineno"> 1725</span>&#160;</div><div class="line"><a name="l01726"></a><span class="lineno"> 1726</span>&#160; std::vector&lt;uint8_t&gt; recurrentToCellWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>&#160; std::vector&lt;unsigned int&gt; recurrentToCellWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>&#160; ConstTensor recurrentToCellWeights(</div><div class="line"><a name="l01729"></a><span class="lineno"> 1729</span>&#160; TensorInfo(4, recurrentToCellWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01730"></a><span class="lineno"> 1730</span>&#160; recurrentToCellWeightsData);</div><div class="line"><a name="l01731"></a><span class="lineno"> 1731</span>&#160;</div><div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>&#160; std::vector&lt;uint8_t&gt; recurrentToOutputWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01733"></a><span class="lineno"> 1733</span>&#160; std::vector&lt;unsigned int&gt; recurrentToOutputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>&#160; ConstTensor recurrentToOutputWeights(</div><div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>&#160; TensorInfo(4, recurrentToOutputWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>&#160; recurrentToOutputWeightsData);</div><div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>&#160;</div><div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>&#160; std::vector&lt;int32_t&gt; forgetGateBiasData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>&#160; std::vector&lt;unsigned int&gt; forgetGateBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>&#160; ConstTensor forgetGateBias(</div><div class="line"><a name="l01741"></a><span class="lineno"> 1741</span>&#160; TensorInfo(4, forgetGateBiasDimensions.data(), DataType::Signed32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01742"></a><span class="lineno"> 1742</span>&#160; forgetGateBiasData);</div><div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>&#160;</div><div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>&#160; std::vector&lt;int32_t&gt; cellBiasData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>&#160; std::vector&lt;unsigned int&gt; cellBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>&#160; ConstTensor cellBias(</div><div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>&#160; TensorInfo(4, cellBiasDimensions.data(), DataType::Signed32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>&#160; cellBiasData);</div><div class="line"><a name="l01749"></a><span class="lineno"> 1749</span>&#160;</div><div class="line"><a name="l01750"></a><span class="lineno"> 1750</span>&#160; std::vector&lt;int32_t&gt; outputGateBiasData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01751"></a><span class="lineno"> 1751</span>&#160; std::vector&lt;unsigned int&gt; outputGateBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>&#160; ConstTensor outputGateBias(</div><div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>&#160; TensorInfo(4, outputGateBiasDimensions.data(), DataType::Signed32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01754"></a><span class="lineno"> 1754</span>&#160; outputGateBiasData);</div><div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>&#160;</div><div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>&#160; <span class="comment">// CIFG disabled params</span></div><div class="line"><a name="l01757"></a><span class="lineno"> 1757</span>&#160; std::vector&lt;uint8_t&gt; inputToInputWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>&#160; std::vector&lt;unsigned int&gt; inputToInputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>&#160; ConstTensor inputToInputWeights(</div><div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>&#160; TensorInfo(4, inputToInputWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>&#160; inputToInputWeightsData);</div><div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>&#160;</div><div class="line"><a name="l01763"></a><span class="lineno"> 1763</span>&#160; std::vector&lt;uint8_t&gt; recurrentToInputWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>&#160; std::vector&lt;unsigned int&gt; recurrentToInputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>&#160; ConstTensor recurrentToInputWeights(</div><div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>&#160; TensorInfo(4, recurrentToInputWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>&#160; recurrentToInputWeightsData);</div><div class="line"><a name="l01768"></a><span class="lineno"> 1768</span>&#160;</div><div class="line"><a name="l01769"></a><span class="lineno"> 1769</span>&#160; std::vector&lt;int32_t&gt; inputGateBiasData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01770"></a><span class="lineno"> 1770</span>&#160; std::vector&lt;unsigned int&gt; inputGateBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01771"></a><span class="lineno"> 1771</span>&#160; ConstTensor inputGateBias(</div><div class="line"><a name="l01772"></a><span class="lineno"> 1772</span>&#160; TensorInfo(4, inputGateBiasDimensions.data(), DataType::Signed32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01773"></a><span class="lineno"> 1773</span>&#160; inputGateBiasData);</div><div class="line"><a name="l01774"></a><span class="lineno"> 1774</span>&#160;</div><div class="line"><a name="l01775"></a><span class="lineno"> 1775</span>&#160; <span class="comment">// Peephole enabled, CIFG disabled params</span></div><div class="line"><a name="l01776"></a><span class="lineno"> 1776</span>&#160; std::vector&lt;int16_t&gt; cellToInputWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01777"></a><span class="lineno"> 1777</span>&#160; std::vector&lt;unsigned int&gt; cellToInputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01778"></a><span class="lineno"> 1778</span>&#160; ConstTensor cellToInputWeights(</div><div class="line"><a name="l01779"></a><span class="lineno"> 1779</span>&#160; TensorInfo(4, cellToInputWeightsDimensions.data(), DataType::QSymmS16, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>&#160; cellToInputWeightsData);</div><div class="line"><a name="l01781"></a><span class="lineno"> 1781</span>&#160;</div><div class="line"><a name="l01782"></a><span class="lineno"> 1782</span>&#160; std::vector&lt;int16_t&gt; cellToForgetWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01783"></a><span class="lineno"> 1783</span>&#160; std::vector&lt;unsigned int&gt; cellToForgetWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>&#160; ConstTensor cellToForgetWeights(</div><div class="line"><a name="l01785"></a><span class="lineno"> 1785</span>&#160; TensorInfo(4, cellToForgetWeightsDimensions.data(), DataType::QSymmS16, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01786"></a><span class="lineno"> 1786</span>&#160; cellToForgetWeightsData);</div><div class="line"><a name="l01787"></a><span class="lineno"> 1787</span>&#160;</div><div class="line"><a name="l01788"></a><span class="lineno"> 1788</span>&#160; std::vector&lt;int16_t&gt; cellToOutputWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01789"></a><span class="lineno"> 1789</span>&#160; std::vector&lt;unsigned int&gt; cellToOutputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01790"></a><span class="lineno"> 1790</span>&#160; ConstTensor cellToOutputWeights(</div><div class="line"><a name="l01791"></a><span class="lineno"> 1791</span>&#160; TensorInfo(4, cellToOutputWeightsDimensions.data(), DataType::QSymmS16, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01792"></a><span class="lineno"> 1792</span>&#160; cellToOutputWeightsData);</div><div class="line"><a name="l01793"></a><span class="lineno"> 1793</span>&#160;</div><div class="line"><a name="l01794"></a><span class="lineno"> 1794</span>&#160; LstmInputParams params;</div><div class="line"><a name="l01795"></a><span class="lineno"> 1795</span>&#160;</div><div class="line"><a name="l01796"></a><span class="lineno"> 1796</span>&#160; <span class="comment">// Basic params</span></div><div class="line"><a name="l01797"></a><span class="lineno"> 1797</span>&#160; params.m_InputToForgetWeights = &amp;inputToForgetWeights;</div><div class="line"><a name="l01798"></a><span class="lineno"> 1798</span>&#160; params.m_InputToCellWeights = &amp;inputToCellWeights;</div><div class="line"><a name="l01799"></a><span class="lineno"> 1799</span>&#160; params.m_InputToOutputWeights = &amp;inputToOutputWeights;</div><div class="line"><a name="l01800"></a><span class="lineno"> 1800</span>&#160; params.m_RecurrentToForgetWeights = &amp;recurrentToForgetWeights;</div><div class="line"><a name="l01801"></a><span class="lineno"> 1801</span>&#160; params.m_RecurrentToCellWeights = &amp;recurrentToCellWeights;</div><div class="line"><a name="l01802"></a><span class="lineno"> 1802</span>&#160; params.m_RecurrentToOutputWeights = &amp;recurrentToOutputWeights;</div><div class="line"><a name="l01803"></a><span class="lineno"> 1803</span>&#160; params.m_ForgetGateBias = &amp;forgetGateBias;</div><div class="line"><a name="l01804"></a><span class="lineno"> 1804</span>&#160; params.m_CellBias = &amp;cellBias;</div><div class="line"><a name="l01805"></a><span class="lineno"> 1805</span>&#160; params.m_OutputGateBias = &amp;outputGateBias;</div><div class="line"><a name="l01806"></a><span class="lineno"> 1806</span>&#160;</div><div class="line"><a name="l01807"></a><span class="lineno"> 1807</span>&#160; <span class="comment">// CIFG disabled params</span></div><div class="line"><a name="l01808"></a><span class="lineno"> 1808</span>&#160; params.m_InputToInputWeights = &amp;inputToInputWeights;</div><div class="line"><a name="l01809"></a><span class="lineno"> 1809</span>&#160; params.m_RecurrentToInputWeights = &amp;recurrentToInputWeights;</div><div class="line"><a name="l01810"></a><span class="lineno"> 1810</span>&#160; params.m_InputGateBias = &amp;inputGateBias;</div><div class="line"><a name="l01811"></a><span class="lineno"> 1811</span>&#160;</div><div class="line"><a name="l01812"></a><span class="lineno"> 1812</span>&#160; <span class="comment">// Peephole enabled, CIFG disabled params</span></div><div class="line"><a name="l01813"></a><span class="lineno"> 1813</span>&#160; params.m_CellToInputWeights = &amp;cellToInputWeights;</div><div class="line"><a name="l01814"></a><span class="lineno"> 1814</span>&#160; params.m_CellToForgetWeights = &amp;cellToForgetWeights;</div><div class="line"><a name="l01815"></a><span class="lineno"> 1815</span>&#160; params.m_CellToOutputWeights = &amp;cellToOutputWeights;</div><div class="line"><a name="l01816"></a><span class="lineno"> 1816</span>&#160;</div><div class="line"><a name="l01817"></a><span class="lineno"> 1817</span>&#160; TestQLstmLayerVisitor visitor(descriptor, params);</div><div class="line"><a name="l01818"></a><span class="lineno"> 1818</span>&#160;</div><div class="line"><a name="l01819"></a><span class="lineno"> 1819</span>&#160; NetworkImpl net;</div><div class="line"><a name="l01820"></a><span class="lineno"> 1820</span>&#160;</div><div class="line"><a name="l01821"></a><span class="lineno"> 1821</span>&#160; IConnectableLayer* <span class="keyword">const</span> layer = net.AddQLstmLayer(descriptor, params);</div><div class="line"><a name="l01822"></a><span class="lineno"> 1822</span>&#160; layer-&gt;ExecuteStrategy(visitor);</div><div class="line"><a name="l01823"></a><span class="lineno"> 1823</span>&#160;}</div><div class="line"><a name="l01824"></a><span class="lineno"> 1824</span>&#160;</div><div class="line"><a name="l01825"></a><span class="lineno"> 1825</span>&#160;TEST_CASE(<span class="stringliteral">&quot;CheckQLstmLayerCifgEnabledPeepholeEnabled&quot;</span>)</div><div class="line"><a name="l01826"></a><span class="lineno"> 1826</span>&#160;{</div><div class="line"><a name="l01827"></a><span class="lineno"> 1827</span>&#160; QLstmDescriptor descriptor;</div><div class="line"><a name="l01828"></a><span class="lineno"> 1828</span>&#160; descriptor.m_ProjectionClip = 0.5f;</div><div class="line"><a name="l01829"></a><span class="lineno"> 1829</span>&#160; descriptor.m_CellClip = 0.3f;</div><div class="line"><a name="l01830"></a><span class="lineno"> 1830</span>&#160; descriptor.m_CifgEnabled = <span class="keyword">true</span>;</div><div class="line"><a name="l01831"></a><span class="lineno"> 1831</span>&#160; descriptor.m_PeepholeEnabled = <span class="keyword">true</span>;</div><div class="line"><a name="l01832"></a><span class="lineno"> 1832</span>&#160;</div><div class="line"><a name="l01833"></a><span class="lineno"> 1833</span>&#160; <span class="comment">// Basic params</span></div><div class="line"><a name="l01834"></a><span class="lineno"> 1834</span>&#160; std::vector&lt;uint8_t&gt; inputToForgetWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01835"></a><span class="lineno"> 1835</span>&#160; std::vector&lt;unsigned int&gt; inputToForgetWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01836"></a><span class="lineno"> 1836</span>&#160; ConstTensor inputToForgetWeights(</div><div class="line"><a name="l01837"></a><span class="lineno"> 1837</span>&#160; TensorInfo(4, inputToForgetWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01838"></a><span class="lineno"> 1838</span>&#160; inputToForgetWeightsData);</div><div class="line"><a name="l01839"></a><span class="lineno"> 1839</span>&#160;</div><div class="line"><a name="l01840"></a><span class="lineno"> 1840</span>&#160; std::vector&lt;uint8_t&gt; inputToCellWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01841"></a><span class="lineno"> 1841</span>&#160; std::vector&lt;unsigned int&gt; inputToCellWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01842"></a><span class="lineno"> 1842</span>&#160; ConstTensor inputToCellWeights(</div><div class="line"><a name="l01843"></a><span class="lineno"> 1843</span>&#160; TensorInfo(4, inputToCellWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01844"></a><span class="lineno"> 1844</span>&#160; inputToCellWeightsData);</div><div class="line"><a name="l01845"></a><span class="lineno"> 1845</span>&#160;</div><div class="line"><a name="l01846"></a><span class="lineno"> 1846</span>&#160; std::vector&lt;uint8_t&gt; inputToOutputWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01847"></a><span class="lineno"> 1847</span>&#160; std::vector&lt;unsigned int&gt; inputToOutputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01848"></a><span class="lineno"> 1848</span>&#160; ConstTensor inputToOutputWeights(</div><div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>&#160; TensorInfo(4, inputToOutputWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01850"></a><span class="lineno"> 1850</span>&#160; inputToOutputWeightsData);</div><div class="line"><a name="l01851"></a><span class="lineno"> 1851</span>&#160;</div><div class="line"><a name="l01852"></a><span class="lineno"> 1852</span>&#160; std::vector&lt;uint8_t&gt; recurrentToForgetWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01853"></a><span class="lineno"> 1853</span>&#160; std::vector&lt;unsigned int&gt; recurrentToForgetWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01854"></a><span class="lineno"> 1854</span>&#160; ConstTensor recurrentToForgetWeights(</div><div class="line"><a name="l01855"></a><span class="lineno"> 1855</span>&#160; TensorInfo(4, recurrentToForgetWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01856"></a><span class="lineno"> 1856</span>&#160; recurrentToForgetWeightsData);</div><div class="line"><a name="l01857"></a><span class="lineno"> 1857</span>&#160;</div><div class="line"><a name="l01858"></a><span class="lineno"> 1858</span>&#160; std::vector&lt;uint8_t&gt; recurrentToCellWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01859"></a><span class="lineno"> 1859</span>&#160; std::vector&lt;unsigned int&gt; recurrentToCellWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01860"></a><span class="lineno"> 1860</span>&#160; ConstTensor recurrentToCellWeights(</div><div class="line"><a name="l01861"></a><span class="lineno"> 1861</span>&#160; TensorInfo(4, recurrentToCellWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01862"></a><span class="lineno"> 1862</span>&#160; recurrentToCellWeightsData);</div><div class="line"><a name="l01863"></a><span class="lineno"> 1863</span>&#160;</div><div class="line"><a name="l01864"></a><span class="lineno"> 1864</span>&#160; std::vector&lt;uint8_t&gt; recurrentToOutputWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01865"></a><span class="lineno"> 1865</span>&#160; std::vector&lt;unsigned int&gt; recurrentToOutputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01866"></a><span class="lineno"> 1866</span>&#160; ConstTensor recurrentToOutputWeights(</div><div class="line"><a name="l01867"></a><span class="lineno"> 1867</span>&#160; TensorInfo(4, recurrentToOutputWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01868"></a><span class="lineno"> 1868</span>&#160; recurrentToOutputWeightsData);</div><div class="line"><a name="l01869"></a><span class="lineno"> 1869</span>&#160;</div><div class="line"><a name="l01870"></a><span class="lineno"> 1870</span>&#160; std::vector&lt;int32_t&gt; forgetGateBiasData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01871"></a><span class="lineno"> 1871</span>&#160; std::vector&lt;unsigned int&gt; forgetGateBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01872"></a><span class="lineno"> 1872</span>&#160; ConstTensor forgetGateBias(</div><div class="line"><a name="l01873"></a><span class="lineno"> 1873</span>&#160; TensorInfo(4, forgetGateBiasDimensions.data(), DataType::Signed32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01874"></a><span class="lineno"> 1874</span>&#160; forgetGateBiasData);</div><div class="line"><a name="l01875"></a><span class="lineno"> 1875</span>&#160;</div><div class="line"><a name="l01876"></a><span class="lineno"> 1876</span>&#160; std::vector&lt;int32_t&gt; cellBiasData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01877"></a><span class="lineno"> 1877</span>&#160; std::vector&lt;unsigned int&gt; cellBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01878"></a><span class="lineno"> 1878</span>&#160; ConstTensor cellBias(</div><div class="line"><a name="l01879"></a><span class="lineno"> 1879</span>&#160; TensorInfo(4, cellBiasDimensions.data(), DataType::Signed32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01880"></a><span class="lineno"> 1880</span>&#160; cellBiasData);</div><div class="line"><a name="l01881"></a><span class="lineno"> 1881</span>&#160;</div><div class="line"><a name="l01882"></a><span class="lineno"> 1882</span>&#160; std::vector&lt;int32_t&gt; outputGateBiasData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01883"></a><span class="lineno"> 1883</span>&#160; std::vector&lt;unsigned int&gt; outputGateBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01884"></a><span class="lineno"> 1884</span>&#160; ConstTensor outputGateBias(</div><div class="line"><a name="l01885"></a><span class="lineno"> 1885</span>&#160; TensorInfo(4, outputGateBiasDimensions.data(), DataType::Signed32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01886"></a><span class="lineno"> 1886</span>&#160; outputGateBiasData);</div><div class="line"><a name="l01887"></a><span class="lineno"> 1887</span>&#160;</div><div class="line"><a name="l01888"></a><span class="lineno"> 1888</span>&#160; <span class="comment">// Peephole enabled and CIFG enabled params</span></div><div class="line"><a name="l01889"></a><span class="lineno"> 1889</span>&#160; std::vector&lt;int16_t&gt; cellToForgetWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01890"></a><span class="lineno"> 1890</span>&#160; std::vector&lt;unsigned int&gt; cellToForgetWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01891"></a><span class="lineno"> 1891</span>&#160; ConstTensor cellToForgetWeights(</div><div class="line"><a name="l01892"></a><span class="lineno"> 1892</span>&#160; TensorInfo(4, cellToForgetWeightsDimensions.data(), DataType::QSymmS16, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01893"></a><span class="lineno"> 1893</span>&#160; cellToForgetWeightsData);</div><div class="line"><a name="l01894"></a><span class="lineno"> 1894</span>&#160;</div><div class="line"><a name="l01895"></a><span class="lineno"> 1895</span>&#160; std::vector&lt;int16_t&gt; cellToOutputWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01896"></a><span class="lineno"> 1896</span>&#160; std::vector&lt;unsigned int&gt; cellToOutputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01897"></a><span class="lineno"> 1897</span>&#160; ConstTensor cellToOutputWeights(</div><div class="line"><a name="l01898"></a><span class="lineno"> 1898</span>&#160; TensorInfo(4, cellToOutputWeightsDimensions.data(), DataType::QSymmS16, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01899"></a><span class="lineno"> 1899</span>&#160; cellToOutputWeightsData);</div><div class="line"><a name="l01900"></a><span class="lineno"> 1900</span>&#160;</div><div class="line"><a name="l01901"></a><span class="lineno"> 1901</span>&#160; LstmInputParams params;</div><div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>&#160;</div><div class="line"><a name="l01903"></a><span class="lineno"> 1903</span>&#160; <span class="comment">// Basic params</span></div><div class="line"><a name="l01904"></a><span class="lineno"> 1904</span>&#160; params.m_InputToForgetWeights = &amp;inputToForgetWeights;</div><div class="line"><a name="l01905"></a><span class="lineno"> 1905</span>&#160; params.m_InputToCellWeights = &amp;inputToCellWeights;</div><div class="line"><a name="l01906"></a><span class="lineno"> 1906</span>&#160; params.m_InputToOutputWeights = &amp;inputToOutputWeights;</div><div class="line"><a name="l01907"></a><span class="lineno"> 1907</span>&#160; params.m_RecurrentToForgetWeights = &amp;recurrentToForgetWeights;</div><div class="line"><a name="l01908"></a><span class="lineno"> 1908</span>&#160; params.m_RecurrentToCellWeights = &amp;recurrentToCellWeights;</div><div class="line"><a name="l01909"></a><span class="lineno"> 1909</span>&#160; params.m_RecurrentToOutputWeights = &amp;recurrentToOutputWeights;</div><div class="line"><a name="l01910"></a><span class="lineno"> 1910</span>&#160; params.m_ForgetGateBias = &amp;forgetGateBias;</div><div class="line"><a name="l01911"></a><span class="lineno"> 1911</span>&#160; params.m_CellBias = &amp;cellBias;</div><div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>&#160; params.m_OutputGateBias = &amp;outputGateBias;</div><div class="line"><a name="l01913"></a><span class="lineno"> 1913</span>&#160;</div><div class="line"><a name="l01914"></a><span class="lineno"> 1914</span>&#160; <span class="comment">// Peephole enabled and CIFG enabled params</span></div><div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>&#160; params.m_CellToForgetWeights = &amp;cellToForgetWeights;</div><div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>&#160; params.m_CellToOutputWeights = &amp;cellToOutputWeights;</div><div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>&#160;</div><div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>&#160; TestQLstmLayerVisitor visitor(descriptor, params);</div><div class="line"><a name="l01919"></a><span class="lineno"> 1919</span>&#160;</div><div class="line"><a name="l01920"></a><span class="lineno"> 1920</span>&#160; NetworkImpl net;</div><div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>&#160;</div><div class="line"><a name="l01922"></a><span class="lineno"> 1922</span>&#160; IConnectableLayer* <span class="keyword">const</span> layer = net.AddQLstmLayer(descriptor, params);</div><div class="line"><a name="l01923"></a><span class="lineno"> 1923</span>&#160; layer-&gt;ExecuteStrategy(visitor);</div><div class="line"><a name="l01924"></a><span class="lineno"> 1924</span>&#160;}</div><div class="line"><a name="l01925"></a><span class="lineno"> 1925</span>&#160;</div><div class="line"><a name="l01926"></a><span class="lineno"> 1926</span>&#160;TEST_CASE(<span class="stringliteral">&quot;CheckQLstmLayerProjectionEnabled&quot;</span>)</div><div class="line"><a name="l01927"></a><span class="lineno"> 1927</span>&#160;{</div><div class="line"><a name="l01928"></a><span class="lineno"> 1928</span>&#160; QLstmDescriptor descriptor;</div><div class="line"><a name="l01929"></a><span class="lineno"> 1929</span>&#160; descriptor.m_ProjectionClip = 0.5f;</div><div class="line"><a name="l01930"></a><span class="lineno"> 1930</span>&#160; descriptor.m_CellClip = 0.3f;</div><div class="line"><a name="l01931"></a><span class="lineno"> 1931</span>&#160; descriptor.m_CifgEnabled = <span class="keyword">true</span>;</div><div class="line"><a name="l01932"></a><span class="lineno"> 1932</span>&#160; descriptor.m_ProjectionEnabled = <span class="keyword">true</span>;</div><div class="line"><a name="l01933"></a><span class="lineno"> 1933</span>&#160;</div><div class="line"><a name="l01934"></a><span class="lineno"> 1934</span>&#160; <span class="comment">// Basic params ONLY</span></div><div class="line"><a name="l01935"></a><span class="lineno"> 1935</span>&#160; std::vector&lt;uint8_t&gt; inputToForgetWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01936"></a><span class="lineno"> 1936</span>&#160; std::vector&lt;unsigned int&gt; inputToForgetWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01937"></a><span class="lineno"> 1937</span>&#160; ConstTensor inputToForgetWeights(</div><div class="line"><a name="l01938"></a><span class="lineno"> 1938</span>&#160; TensorInfo(4, inputToForgetWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01939"></a><span class="lineno"> 1939</span>&#160; inputToForgetWeightsData);</div><div class="line"><a name="l01940"></a><span class="lineno"> 1940</span>&#160;</div><div class="line"><a name="l01941"></a><span class="lineno"> 1941</span>&#160; std::vector&lt;uint8_t&gt; inputToCellWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01942"></a><span class="lineno"> 1942</span>&#160; std::vector&lt;unsigned int&gt; inputToCellWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01943"></a><span class="lineno"> 1943</span>&#160; ConstTensor inputToCellWeights(</div><div class="line"><a name="l01944"></a><span class="lineno"> 1944</span>&#160; TensorInfo(4, inputToCellWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01945"></a><span class="lineno"> 1945</span>&#160; inputToCellWeightsData);</div><div class="line"><a name="l01946"></a><span class="lineno"> 1946</span>&#160;</div><div class="line"><a name="l01947"></a><span class="lineno"> 1947</span>&#160; std::vector&lt;uint8_t&gt; inputToOutputWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01948"></a><span class="lineno"> 1948</span>&#160; std::vector&lt;unsigned int&gt; inputToOutputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01949"></a><span class="lineno"> 1949</span>&#160; ConstTensor inputToOutputWeights(</div><div class="line"><a name="l01950"></a><span class="lineno"> 1950</span>&#160; TensorInfo(4, inputToOutputWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01951"></a><span class="lineno"> 1951</span>&#160; inputToOutputWeightsData);</div><div class="line"><a name="l01952"></a><span class="lineno"> 1952</span>&#160;</div><div class="line"><a name="l01953"></a><span class="lineno"> 1953</span>&#160; std::vector&lt;uint8_t&gt; recurrentToForgetWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01954"></a><span class="lineno"> 1954</span>&#160; std::vector&lt;unsigned int&gt; recurrentToForgetWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01955"></a><span class="lineno"> 1955</span>&#160; ConstTensor recurrentToForgetWeights(</div><div class="line"><a name="l01956"></a><span class="lineno"> 1956</span>&#160; TensorInfo(4, recurrentToForgetWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01957"></a><span class="lineno"> 1957</span>&#160; recurrentToForgetWeightsData);</div><div class="line"><a name="l01958"></a><span class="lineno"> 1958</span>&#160;</div><div class="line"><a name="l01959"></a><span class="lineno"> 1959</span>&#160; std::vector&lt;uint8_t&gt; recurrentToCellWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01960"></a><span class="lineno"> 1960</span>&#160; std::vector&lt;unsigned int&gt; recurrentToCellWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01961"></a><span class="lineno"> 1961</span>&#160; ConstTensor recurrentToCellWeights(</div><div class="line"><a name="l01962"></a><span class="lineno"> 1962</span>&#160; TensorInfo(4, recurrentToCellWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01963"></a><span class="lineno"> 1963</span>&#160; recurrentToCellWeightsData);</div><div class="line"><a name="l01964"></a><span class="lineno"> 1964</span>&#160;</div><div class="line"><a name="l01965"></a><span class="lineno"> 1965</span>&#160; std::vector&lt;uint8_t&gt; recurrentToOutputWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01966"></a><span class="lineno"> 1966</span>&#160; std::vector&lt;unsigned int&gt; recurrentToOutputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01967"></a><span class="lineno"> 1967</span>&#160; ConstTensor recurrentToOutputWeights(</div><div class="line"><a name="l01968"></a><span class="lineno"> 1968</span>&#160; TensorInfo(4, recurrentToOutputWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01969"></a><span class="lineno"> 1969</span>&#160; recurrentToOutputWeightsData);</div><div class="line"><a name="l01970"></a><span class="lineno"> 1970</span>&#160;</div><div class="line"><a name="l01971"></a><span class="lineno"> 1971</span>&#160; std::vector&lt;int32_t&gt; forgetGateBiasData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01972"></a><span class="lineno"> 1972</span>&#160; std::vector&lt;unsigned int&gt; forgetGateBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01973"></a><span class="lineno"> 1973</span>&#160; ConstTensor forgetGateBias(</div><div class="line"><a name="l01974"></a><span class="lineno"> 1974</span>&#160; TensorInfo(4, forgetGateBiasDimensions.data(), DataType::Signed32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01975"></a><span class="lineno"> 1975</span>&#160; forgetGateBiasData);</div><div class="line"><a name="l01976"></a><span class="lineno"> 1976</span>&#160;</div><div class="line"><a name="l01977"></a><span class="lineno"> 1977</span>&#160; std::vector&lt;int32_t&gt; cellBiasData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01978"></a><span class="lineno"> 1978</span>&#160; std::vector&lt;unsigned int&gt; cellBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01979"></a><span class="lineno"> 1979</span>&#160; ConstTensor cellBias(</div><div class="line"><a name="l01980"></a><span class="lineno"> 1980</span>&#160; TensorInfo(4, cellBiasDimensions.data(), DataType::Signed32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01981"></a><span class="lineno"> 1981</span>&#160; cellBiasData);</div><div class="line"><a name="l01982"></a><span class="lineno"> 1982</span>&#160;</div><div class="line"><a name="l01983"></a><span class="lineno"> 1983</span>&#160; std::vector&lt;int32_t&gt; outputGateBiasData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01984"></a><span class="lineno"> 1984</span>&#160; std::vector&lt;unsigned int&gt; outputGateBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01985"></a><span class="lineno"> 1985</span>&#160; ConstTensor outputGateBias(</div><div class="line"><a name="l01986"></a><span class="lineno"> 1986</span>&#160; TensorInfo(4, outputGateBiasDimensions.data(), DataType::Signed32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01987"></a><span class="lineno"> 1987</span>&#160; outputGateBiasData);</div><div class="line"><a name="l01988"></a><span class="lineno"> 1988</span>&#160;</div><div class="line"><a name="l01989"></a><span class="lineno"> 1989</span>&#160; <span class="comment">// Projection enabled params</span></div><div class="line"><a name="l01990"></a><span class="lineno"> 1990</span>&#160; std::vector&lt;uint8_t&gt; projectionWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01991"></a><span class="lineno"> 1991</span>&#160; std::vector&lt;unsigned int&gt; projectionWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01992"></a><span class="lineno"> 1992</span>&#160; ConstTensor projectionWeights(</div><div class="line"><a name="l01993"></a><span class="lineno"> 1993</span>&#160; TensorInfo(4, projectionWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l01994"></a><span class="lineno"> 1994</span>&#160; projectionWeightsData);</div><div class="line"><a name="l01995"></a><span class="lineno"> 1995</span>&#160;</div><div class="line"><a name="l01996"></a><span class="lineno"> 1996</span>&#160; std::vector&lt;int32_t&gt; projectionBiasData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l01997"></a><span class="lineno"> 1997</span>&#160; std::vector&lt;unsigned int&gt; projectionBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l01998"></a><span class="lineno"> 1998</span>&#160; ConstTensor projectionBias(</div><div class="line"><a name="l01999"></a><span class="lineno"> 1999</span>&#160; TensorInfo(4, projectionBiasDimensions.data(), DataType::Signed32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l02000"></a><span class="lineno"> 2000</span>&#160; projectionBiasData);</div><div class="line"><a name="l02001"></a><span class="lineno"> 2001</span>&#160;</div><div class="line"><a name="l02002"></a><span class="lineno"> 2002</span>&#160; LstmInputParams params;</div><div class="line"><a name="l02003"></a><span class="lineno"> 2003</span>&#160;</div><div class="line"><a name="l02004"></a><span class="lineno"> 2004</span>&#160; <span class="comment">// Basic params</span></div><div class="line"><a name="l02005"></a><span class="lineno"> 2005</span>&#160; params.m_InputToForgetWeights = &amp;inputToForgetWeights;</div><div class="line"><a name="l02006"></a><span class="lineno"> 2006</span>&#160; params.m_InputToCellWeights = &amp;inputToCellWeights;</div><div class="line"><a name="l02007"></a><span class="lineno"> 2007</span>&#160; params.m_InputToOutputWeights = &amp;inputToOutputWeights;</div><div class="line"><a name="l02008"></a><span class="lineno"> 2008</span>&#160; params.m_RecurrentToForgetWeights = &amp;recurrentToForgetWeights;</div><div class="line"><a name="l02009"></a><span class="lineno"> 2009</span>&#160; params.m_RecurrentToCellWeights = &amp;recurrentToCellWeights;</div><div class="line"><a name="l02010"></a><span class="lineno"> 2010</span>&#160; params.m_RecurrentToOutputWeights = &amp;recurrentToOutputWeights;</div><div class="line"><a name="l02011"></a><span class="lineno"> 2011</span>&#160; params.m_ForgetGateBias = &amp;forgetGateBias;</div><div class="line"><a name="l02012"></a><span class="lineno"> 2012</span>&#160; params.m_CellBias = &amp;cellBias;</div><div class="line"><a name="l02013"></a><span class="lineno"> 2013</span>&#160; params.m_OutputGateBias = &amp;outputGateBias;</div><div class="line"><a name="l02014"></a><span class="lineno"> 2014</span>&#160;</div><div class="line"><a name="l02015"></a><span class="lineno"> 2015</span>&#160; <span class="comment">// Projection enabled params</span></div><div class="line"><a name="l02016"></a><span class="lineno"> 2016</span>&#160; params.m_ProjectionWeights = &amp;projectionWeights;</div><div class="line"><a name="l02017"></a><span class="lineno"> 2017</span>&#160; params.m_ProjectionBias = &amp;projectionBias;</div><div class="line"><a name="l02018"></a><span class="lineno"> 2018</span>&#160;</div><div class="line"><a name="l02019"></a><span class="lineno"> 2019</span>&#160; TestQLstmLayerVisitor visitor(descriptor, params);</div><div class="line"><a name="l02020"></a><span class="lineno"> 2020</span>&#160;</div><div class="line"><a name="l02021"></a><span class="lineno"> 2021</span>&#160; NetworkImpl net;</div><div class="line"><a name="l02022"></a><span class="lineno"> 2022</span>&#160;</div><div class="line"><a name="l02023"></a><span class="lineno"> 2023</span>&#160; IConnectableLayer* <span class="keyword">const</span> layer = net.AddQLstmLayer(descriptor, params);</div><div class="line"><a name="l02024"></a><span class="lineno"> 2024</span>&#160; layer-&gt;ExecuteStrategy(visitor);</div><div class="line"><a name="l02025"></a><span class="lineno"> 2025</span>&#160;}</div><div class="line"><a name="l02026"></a><span class="lineno"> 2026</span>&#160;</div><div class="line"><a name="l02027"></a><span class="lineno"> 2027</span>&#160;TEST_CASE(<span class="stringliteral">&quot;CheckQLstmLayerCifgDisabledLayerNormEnabled&quot;</span>)</div><div class="line"><a name="l02028"></a><span class="lineno"> 2028</span>&#160;{</div><div class="line"><a name="l02029"></a><span class="lineno"> 2029</span>&#160; QLstmDescriptor descriptor;</div><div class="line"><a name="l02030"></a><span class="lineno"> 2030</span>&#160; descriptor.m_ProjectionClip = 0.5f;</div><div class="line"><a name="l02031"></a><span class="lineno"> 2031</span>&#160; descriptor.m_CellClip = 0.3f;</div><div class="line"><a name="l02032"></a><span class="lineno"> 2032</span>&#160; descriptor.m_CifgEnabled = <span class="keyword">false</span>;</div><div class="line"><a name="l02033"></a><span class="lineno"> 2033</span>&#160; descriptor.m_LayerNormEnabled = <span class="keyword">true</span>;</div><div class="line"><a name="l02034"></a><span class="lineno"> 2034</span>&#160;</div><div class="line"><a name="l02035"></a><span class="lineno"> 2035</span>&#160; <span class="comment">// Basic params</span></div><div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>&#160; std::vector&lt;uint8_t&gt; inputToForgetWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>&#160; std::vector&lt;unsigned int&gt; inputToForgetWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>&#160; ConstTensor inputToForgetWeights(</div><div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>&#160; TensorInfo(4, inputToForgetWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l02040"></a><span class="lineno"> 2040</span>&#160; inputToForgetWeightsData);</div><div class="line"><a name="l02041"></a><span class="lineno"> 2041</span>&#160;</div><div class="line"><a name="l02042"></a><span class="lineno"> 2042</span>&#160; std::vector&lt;uint8_t&gt; inputToCellWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>&#160; std::vector&lt;unsigned int&gt; inputToCellWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l02044"></a><span class="lineno"> 2044</span>&#160; ConstTensor inputToCellWeights(</div><div class="line"><a name="l02045"></a><span class="lineno"> 2045</span>&#160; TensorInfo(4, inputToCellWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l02046"></a><span class="lineno"> 2046</span>&#160; inputToCellWeightsData);</div><div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>&#160;</div><div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>&#160; std::vector&lt;uint8_t&gt; inputToOutputWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>&#160; std::vector&lt;unsigned int&gt; inputToOutputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>&#160; ConstTensor inputToOutputWeights(</div><div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>&#160; TensorInfo(4, inputToOutputWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>&#160; inputToOutputWeightsData);</div><div class="line"><a name="l02053"></a><span class="lineno"> 2053</span>&#160;</div><div class="line"><a name="l02054"></a><span class="lineno"> 2054</span>&#160; std::vector&lt;uint8_t&gt; recurrentToForgetWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l02055"></a><span class="lineno"> 2055</span>&#160; std::vector&lt;unsigned int&gt; recurrentToForgetWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l02056"></a><span class="lineno"> 2056</span>&#160; ConstTensor recurrentToForgetWeights(</div><div class="line"><a name="l02057"></a><span class="lineno"> 2057</span>&#160; TensorInfo(4, recurrentToForgetWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l02058"></a><span class="lineno"> 2058</span>&#160; recurrentToForgetWeightsData);</div><div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>&#160;</div><div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>&#160; std::vector&lt;uint8_t&gt; recurrentToCellWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>&#160; std::vector&lt;unsigned int&gt; recurrentToCellWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l02062"></a><span class="lineno"> 2062</span>&#160; ConstTensor recurrentToCellWeights(</div><div class="line"><a name="l02063"></a><span class="lineno"> 2063</span>&#160; TensorInfo(4, recurrentToCellWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l02064"></a><span class="lineno"> 2064</span>&#160; recurrentToCellWeightsData);</div><div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>&#160;</div><div class="line"><a name="l02066"></a><span class="lineno"> 2066</span>&#160; std::vector&lt;uint8_t&gt; recurrentToOutputWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l02067"></a><span class="lineno"> 2067</span>&#160; std::vector&lt;unsigned int&gt; recurrentToOutputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>&#160; ConstTensor recurrentToOutputWeights(</div><div class="line"><a name="l02069"></a><span class="lineno"> 2069</span>&#160; TensorInfo(4, recurrentToOutputWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>&#160; recurrentToOutputWeightsData);</div><div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>&#160;</div><div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>&#160; std::vector&lt;int32_t&gt; forgetGateBiasData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>&#160; std::vector&lt;unsigned int&gt; forgetGateBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>&#160; ConstTensor forgetGateBias(</div><div class="line"><a name="l02075"></a><span class="lineno"> 2075</span>&#160; TensorInfo(4, forgetGateBiasDimensions.data(), DataType::Signed32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>&#160; forgetGateBiasData);</div><div class="line"><a name="l02077"></a><span class="lineno"> 2077</span>&#160;</div><div class="line"><a name="l02078"></a><span class="lineno"> 2078</span>&#160; std::vector&lt;int32_t&gt; cellBiasData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l02079"></a><span class="lineno"> 2079</span>&#160; std::vector&lt;unsigned int&gt; cellBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l02080"></a><span class="lineno"> 2080</span>&#160; ConstTensor cellBias(</div><div class="line"><a name="l02081"></a><span class="lineno"> 2081</span>&#160; TensorInfo(4, cellBiasDimensions.data(), DataType::Signed32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l02082"></a><span class="lineno"> 2082</span>&#160; cellBiasData);</div><div class="line"><a name="l02083"></a><span class="lineno"> 2083</span>&#160;</div><div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>&#160; std::vector&lt;int32_t&gt; outputGateBiasData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l02085"></a><span class="lineno"> 2085</span>&#160; std::vector&lt;unsigned int&gt; outputGateBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l02086"></a><span class="lineno"> 2086</span>&#160; ConstTensor outputGateBias(</div><div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>&#160; TensorInfo(4, outputGateBiasDimensions.data(), DataType::Signed32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>&#160; outputGateBiasData);</div><div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>&#160;</div><div class="line"><a name="l02090"></a><span class="lineno"> 2090</span>&#160; <span class="comment">// CIFG disabled params</span></div><div class="line"><a name="l02091"></a><span class="lineno"> 2091</span>&#160; std::vector&lt;uint8_t&gt; inputToInputWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l02092"></a><span class="lineno"> 2092</span>&#160; std::vector&lt;unsigned int&gt; inputToInputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l02093"></a><span class="lineno"> 2093</span>&#160; ConstTensor inputToInputWeights(</div><div class="line"><a name="l02094"></a><span class="lineno"> 2094</span>&#160; TensorInfo(4, inputToInputWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l02095"></a><span class="lineno"> 2095</span>&#160; inputToInputWeightsData);</div><div class="line"><a name="l02096"></a><span class="lineno"> 2096</span>&#160;</div><div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>&#160; std::vector&lt;uint8_t&gt; recurrentToInputWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>&#160; std::vector&lt;unsigned int&gt; recurrentToInputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>&#160; ConstTensor recurrentToInputWeights(</div><div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>&#160; TensorInfo(4, recurrentToInputWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l02101"></a><span class="lineno"> 2101</span>&#160; recurrentToInputWeightsData);</div><div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>&#160;</div><div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>&#160; std::vector&lt;int32_t&gt; inputGateBiasData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l02104"></a><span class="lineno"> 2104</span>&#160; std::vector&lt;unsigned int&gt; inputGateBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l02105"></a><span class="lineno"> 2105</span>&#160; ConstTensor inputGateBias(</div><div class="line"><a name="l02106"></a><span class="lineno"> 2106</span>&#160; TensorInfo(4, inputGateBiasDimensions.data(), DataType::Signed32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l02107"></a><span class="lineno"> 2107</span>&#160; inputGateBiasData);</div><div class="line"><a name="l02108"></a><span class="lineno"> 2108</span>&#160;</div><div class="line"><a name="l02109"></a><span class="lineno"> 2109</span>&#160; <span class="comment">// Layer Norm enabled, CIFG disabled params</span></div><div class="line"><a name="l02110"></a><span class="lineno"> 2110</span>&#160; std::vector&lt;int16_t&gt; inputLayerNormWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l02111"></a><span class="lineno"> 2111</span>&#160; std::vector&lt;unsigned int&gt; inputLayerNormWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>&#160; ConstTensor inputLayerNormWeights(</div><div class="line"><a name="l02113"></a><span class="lineno"> 2113</span>&#160; TensorInfo(4, inputLayerNormWeightsDimensions.data(), DataType::QSymmS16, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>&#160; inputLayerNormWeightsData);</div><div class="line"><a name="l02115"></a><span class="lineno"> 2115</span>&#160;</div><div class="line"><a name="l02116"></a><span class="lineno"> 2116</span>&#160; std::vector&lt;int16_t&gt; forgetLayerNormWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l02117"></a><span class="lineno"> 2117</span>&#160; std::vector&lt;unsigned int&gt; forgetLayerNormWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l02118"></a><span class="lineno"> 2118</span>&#160; ConstTensor forgetLayerNormWeights(</div><div class="line"><a name="l02119"></a><span class="lineno"> 2119</span>&#160; TensorInfo(4, forgetLayerNormWeightsDimensions.data(), DataType::QSymmS16, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l02120"></a><span class="lineno"> 2120</span>&#160; forgetLayerNormWeightsData);</div><div class="line"><a name="l02121"></a><span class="lineno"> 2121</span>&#160;</div><div class="line"><a name="l02122"></a><span class="lineno"> 2122</span>&#160; std::vector&lt;int16_t&gt; cellLayerNormWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l02123"></a><span class="lineno"> 2123</span>&#160; std::vector&lt;unsigned int&gt; cellLayerNormWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l02124"></a><span class="lineno"> 2124</span>&#160; ConstTensor cellLayerNormWeights(</div><div class="line"><a name="l02125"></a><span class="lineno"> 2125</span>&#160; TensorInfo(4, cellLayerNormWeightsDimensions.data(), DataType::QSymmS16, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l02126"></a><span class="lineno"> 2126</span>&#160; cellLayerNormWeightsData);</div><div class="line"><a name="l02127"></a><span class="lineno"> 2127</span>&#160;</div><div class="line"><a name="l02128"></a><span class="lineno"> 2128</span>&#160; std::vector&lt;int16_t&gt; outputLayerNormWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l02129"></a><span class="lineno"> 2129</span>&#160; std::vector&lt;unsigned int&gt; outputLayerNormWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l02130"></a><span class="lineno"> 2130</span>&#160; ConstTensor outputLayerNormWeights(</div><div class="line"><a name="l02131"></a><span class="lineno"> 2131</span>&#160; TensorInfo(4, outputLayerNormWeightsDimensions.data(), DataType::QSymmS16, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l02132"></a><span class="lineno"> 2132</span>&#160; outputLayerNormWeightsData);</div><div class="line"><a name="l02133"></a><span class="lineno"> 2133</span>&#160;</div><div class="line"><a name="l02134"></a><span class="lineno"> 2134</span>&#160; LstmInputParams params;</div><div class="line"><a name="l02135"></a><span class="lineno"> 2135</span>&#160;</div><div class="line"><a name="l02136"></a><span class="lineno"> 2136</span>&#160; <span class="comment">// Basic params</span></div><div class="line"><a name="l02137"></a><span class="lineno"> 2137</span>&#160; params.m_InputToForgetWeights = &amp;inputToForgetWeights;</div><div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>&#160; params.m_InputToCellWeights = &amp;inputToCellWeights;</div><div class="line"><a name="l02139"></a><span class="lineno"> 2139</span>&#160; params.m_InputToOutputWeights = &amp;inputToOutputWeights;</div><div class="line"><a name="l02140"></a><span class="lineno"> 2140</span>&#160; params.m_RecurrentToForgetWeights = &amp;recurrentToForgetWeights;</div><div class="line"><a name="l02141"></a><span class="lineno"> 2141</span>&#160; params.m_RecurrentToCellWeights = &amp;recurrentToCellWeights;</div><div class="line"><a name="l02142"></a><span class="lineno"> 2142</span>&#160; params.m_RecurrentToOutputWeights = &amp;recurrentToOutputWeights;</div><div class="line"><a name="l02143"></a><span class="lineno"> 2143</span>&#160; params.m_ForgetGateBias = &amp;forgetGateBias;</div><div class="line"><a name="l02144"></a><span class="lineno"> 2144</span>&#160; params.m_CellBias = &amp;cellBias;</div><div class="line"><a name="l02145"></a><span class="lineno"> 2145</span>&#160; params.m_OutputGateBias = &amp;outputGateBias;</div><div class="line"><a name="l02146"></a><span class="lineno"> 2146</span>&#160;</div><div class="line"><a name="l02147"></a><span class="lineno"> 2147</span>&#160; <span class="comment">// CIFG disabled params</span></div><div class="line"><a name="l02148"></a><span class="lineno"> 2148</span>&#160; params.m_InputToInputWeights = &amp;inputToInputWeights;</div><div class="line"><a name="l02149"></a><span class="lineno"> 2149</span>&#160; params.m_RecurrentToInputWeights = &amp;recurrentToInputWeights;</div><div class="line"><a name="l02150"></a><span class="lineno"> 2150</span>&#160; params.m_InputGateBias = &amp;inputGateBias;</div><div class="line"><a name="l02151"></a><span class="lineno"> 2151</span>&#160;</div><div class="line"><a name="l02152"></a><span class="lineno"> 2152</span>&#160; <span class="comment">// Layer Norm enabled, CIFG disabled params</span></div><div class="line"><a name="l02153"></a><span class="lineno"> 2153</span>&#160; params.m_InputLayerNormWeights = &amp;inputLayerNormWeights;</div><div class="line"><a name="l02154"></a><span class="lineno"> 2154</span>&#160; params.m_ForgetLayerNormWeights = &amp;forgetLayerNormWeights;</div><div class="line"><a name="l02155"></a><span class="lineno"> 2155</span>&#160; params.m_CellLayerNormWeights = &amp;cellLayerNormWeights;</div><div class="line"><a name="l02156"></a><span class="lineno"> 2156</span>&#160; params.m_OutputLayerNormWeights = &amp;outputLayerNormWeights;</div><div class="line"><a name="l02157"></a><span class="lineno"> 2157</span>&#160;</div><div class="line"><a name="l02158"></a><span class="lineno"> 2158</span>&#160; TestQLstmLayerVisitor visitor(descriptor, params);</div><div class="line"><a name="l02159"></a><span class="lineno"> 2159</span>&#160;</div><div class="line"><a name="l02160"></a><span class="lineno"> 2160</span>&#160; NetworkImpl net;</div><div class="line"><a name="l02161"></a><span class="lineno"> 2161</span>&#160;</div><div class="line"><a name="l02162"></a><span class="lineno"> 2162</span>&#160; IConnectableLayer* <span class="keyword">const</span> layer = net.AddQLstmLayer(descriptor, params);</div><div class="line"><a name="l02163"></a><span class="lineno"> 2163</span>&#160; layer-&gt;ExecuteStrategy(visitor);</div><div class="line"><a name="l02164"></a><span class="lineno"> 2164</span>&#160;}</div><div class="line"><a name="l02165"></a><span class="lineno"> 2165</span>&#160;</div><div class="line"><a name="l02166"></a><span class="lineno"> 2166</span>&#160;</div><div class="line"><a name="l02167"></a><span class="lineno"> 2167</span>&#160;TEST_CASE(<span class="stringliteral">&quot;CheckQuantizedLstmLayer&quot;</span>)</div><div class="line"><a name="l02168"></a><span class="lineno"> 2168</span>&#160;{</div><div class="line"><a name="l02169"></a><span class="lineno"> 2169</span>&#160; std::vector&lt;uint8_t&gt; inputToInputWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l02170"></a><span class="lineno"> 2170</span>&#160; std::vector&lt;unsigned int&gt; inputToInputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l02171"></a><span class="lineno"> 2171</span>&#160; ConstTensor inputToInputWeights(</div><div class="line"><a name="l02172"></a><span class="lineno"> 2172</span>&#160; TensorInfo(4, inputToInputWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l02173"></a><span class="lineno"> 2173</span>&#160; inputToInputWeightsData);</div><div class="line"><a name="l02174"></a><span class="lineno"> 2174</span>&#160;</div><div class="line"><a name="l02175"></a><span class="lineno"> 2175</span>&#160; std::vector&lt;uint8_t&gt; inputToForgetWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l02176"></a><span class="lineno"> 2176</span>&#160; std::vector&lt;unsigned int&gt; inputToForgetWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l02177"></a><span class="lineno"> 2177</span>&#160; ConstTensor inputToForgetWeights(</div><div class="line"><a name="l02178"></a><span class="lineno"> 2178</span>&#160; TensorInfo(4, inputToForgetWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l02179"></a><span class="lineno"> 2179</span>&#160; inputToForgetWeightsData);</div><div class="line"><a name="l02180"></a><span class="lineno"> 2180</span>&#160;</div><div class="line"><a name="l02181"></a><span class="lineno"> 2181</span>&#160; std::vector&lt;uint8_t&gt; inputToCellWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l02182"></a><span class="lineno"> 2182</span>&#160; std::vector&lt;unsigned int&gt; inputToCellWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l02183"></a><span class="lineno"> 2183</span>&#160; ConstTensor inputToCellWeights(</div><div class="line"><a name="l02184"></a><span class="lineno"> 2184</span>&#160; TensorInfo(4, inputToCellWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l02185"></a><span class="lineno"> 2185</span>&#160; inputToCellWeightsData);</div><div class="line"><a name="l02186"></a><span class="lineno"> 2186</span>&#160;</div><div class="line"><a name="l02187"></a><span class="lineno"> 2187</span>&#160; std::vector&lt;uint8_t&gt; inputToOutputWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l02188"></a><span class="lineno"> 2188</span>&#160; std::vector&lt;unsigned int&gt; inputToOutputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l02189"></a><span class="lineno"> 2189</span>&#160; ConstTensor inputToOutputWeights(</div><div class="line"><a name="l02190"></a><span class="lineno"> 2190</span>&#160; TensorInfo(4, inputToOutputWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l02191"></a><span class="lineno"> 2191</span>&#160; inputToOutputWeightsData);</div><div class="line"><a name="l02192"></a><span class="lineno"> 2192</span>&#160;</div><div class="line"><a name="l02193"></a><span class="lineno"> 2193</span>&#160;</div><div class="line"><a name="l02194"></a><span class="lineno"> 2194</span>&#160; std::vector&lt;uint8_t&gt; recurrentToInputWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l02195"></a><span class="lineno"> 2195</span>&#160; std::vector&lt;unsigned int&gt; recurrentToInputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l02196"></a><span class="lineno"> 2196</span>&#160; ConstTensor recurrentToInputWeights(</div><div class="line"><a name="l02197"></a><span class="lineno"> 2197</span>&#160; TensorInfo(4, recurrentToInputWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l02198"></a><span class="lineno"> 2198</span>&#160; recurrentToInputWeightsData);</div><div class="line"><a name="l02199"></a><span class="lineno"> 2199</span>&#160;</div><div class="line"><a name="l02200"></a><span class="lineno"> 2200</span>&#160; std::vector&lt;uint8_t&gt; recurrentToForgetWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l02201"></a><span class="lineno"> 2201</span>&#160; std::vector&lt;unsigned int&gt; recurrentToForgetWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l02202"></a><span class="lineno"> 2202</span>&#160; ConstTensor recurrentToForgetWeights(</div><div class="line"><a name="l02203"></a><span class="lineno"> 2203</span>&#160; TensorInfo(4, recurrentToForgetWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l02204"></a><span class="lineno"> 2204</span>&#160; recurrentToForgetWeightsData);</div><div class="line"><a name="l02205"></a><span class="lineno"> 2205</span>&#160;</div><div class="line"><a name="l02206"></a><span class="lineno"> 2206</span>&#160; std::vector&lt;uint8_t&gt; recurrentToCellWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l02207"></a><span class="lineno"> 2207</span>&#160; std::vector&lt;unsigned int&gt; recurrentToCellWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l02208"></a><span class="lineno"> 2208</span>&#160; ConstTensor recurrentToCellWeights(</div><div class="line"><a name="l02209"></a><span class="lineno"> 2209</span>&#160; TensorInfo(4, recurrentToCellWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l02210"></a><span class="lineno"> 2210</span>&#160; recurrentToCellWeightsData);</div><div class="line"><a name="l02211"></a><span class="lineno"> 2211</span>&#160;</div><div class="line"><a name="l02212"></a><span class="lineno"> 2212</span>&#160; std::vector&lt;uint8_t&gt; recurrentToOutputWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l02213"></a><span class="lineno"> 2213</span>&#160; std::vector&lt;unsigned int&gt; recurrentToOutputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l02214"></a><span class="lineno"> 2214</span>&#160; ConstTensor recurrentToOutputWeights(</div><div class="line"><a name="l02215"></a><span class="lineno"> 2215</span>&#160; TensorInfo(4, recurrentToOutputWeightsDimensions.data(), DataType::QSymmS8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l02216"></a><span class="lineno"> 2216</span>&#160; recurrentToOutputWeightsData);</div><div class="line"><a name="l02217"></a><span class="lineno"> 2217</span>&#160;</div><div class="line"><a name="l02218"></a><span class="lineno"> 2218</span>&#160;</div><div class="line"><a name="l02219"></a><span class="lineno"> 2219</span>&#160; std::vector&lt;int32_t&gt; inputGateBiasData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l02220"></a><span class="lineno"> 2220</span>&#160; std::vector&lt;unsigned int&gt; inputGateBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l02221"></a><span class="lineno"> 2221</span>&#160; ConstTensor inputGateBias(</div><div class="line"><a name="l02222"></a><span class="lineno"> 2222</span>&#160; TensorInfo(4, inputGateBiasDimensions.data(), DataType::Signed32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l02223"></a><span class="lineno"> 2223</span>&#160; inputGateBiasData);</div><div class="line"><a name="l02224"></a><span class="lineno"> 2224</span>&#160;</div><div class="line"><a name="l02225"></a><span class="lineno"> 2225</span>&#160; std::vector&lt;int32_t&gt; forgetGateBiasData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l02226"></a><span class="lineno"> 2226</span>&#160; std::vector&lt;unsigned int&gt; forgetGateBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l02227"></a><span class="lineno"> 2227</span>&#160; ConstTensor forgetGateBias(</div><div class="line"><a name="l02228"></a><span class="lineno"> 2228</span>&#160; TensorInfo(4, forgetGateBiasDimensions.data(), DataType::Signed32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l02229"></a><span class="lineno"> 2229</span>&#160; forgetGateBiasData);</div><div class="line"><a name="l02230"></a><span class="lineno"> 2230</span>&#160;</div><div class="line"><a name="l02231"></a><span class="lineno"> 2231</span>&#160; std::vector&lt;int32_t&gt; cellBiasData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l02232"></a><span class="lineno"> 2232</span>&#160; std::vector&lt;unsigned int&gt; cellBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l02233"></a><span class="lineno"> 2233</span>&#160; ConstTensor cellBias(</div><div class="line"><a name="l02234"></a><span class="lineno"> 2234</span>&#160; TensorInfo(4, cellBiasDimensions.data(), DataType::Signed32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l02235"></a><span class="lineno"> 2235</span>&#160; cellBiasData);</div><div class="line"><a name="l02236"></a><span class="lineno"> 2236</span>&#160;</div><div class="line"><a name="l02237"></a><span class="lineno"> 2237</span>&#160; std::vector&lt;int32_t&gt; outputGateBiasData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l02238"></a><span class="lineno"> 2238</span>&#160; std::vector&lt;unsigned int&gt; outputGateBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l02239"></a><span class="lineno"> 2239</span>&#160; ConstTensor outputGateBias(</div><div class="line"><a name="l02240"></a><span class="lineno"> 2240</span>&#160; TensorInfo(4, outputGateBiasDimensions.data(), DataType::Signed32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l02241"></a><span class="lineno"> 2241</span>&#160; outputGateBiasData);</div><div class="line"><a name="l02242"></a><span class="lineno"> 2242</span>&#160;</div><div class="line"><a name="l02243"></a><span class="lineno"> 2243</span>&#160; QuantizedLstmInputParams params;</div><div class="line"><a name="l02244"></a><span class="lineno"> 2244</span>&#160;</div><div class="line"><a name="l02245"></a><span class="lineno"> 2245</span>&#160; params.m_InputToInputWeights = &amp;inputToInputWeights;</div><div class="line"><a name="l02246"></a><span class="lineno"> 2246</span>&#160; params.m_InputToForgetWeights = &amp;inputToForgetWeights;</div><div class="line"><a name="l02247"></a><span class="lineno"> 2247</span>&#160; params.m_InputToCellWeights = &amp;inputToCellWeights;</div><div class="line"><a name="l02248"></a><span class="lineno"> 2248</span>&#160; params.m_InputToOutputWeights = &amp;inputToOutputWeights;</div><div class="line"><a name="l02249"></a><span class="lineno"> 2249</span>&#160;</div><div class="line"><a name="l02250"></a><span class="lineno"> 2250</span>&#160; params.m_RecurrentToInputWeights = &amp;recurrentToInputWeights;</div><div class="line"><a name="l02251"></a><span class="lineno"> 2251</span>&#160; params.m_RecurrentToForgetWeights = &amp;recurrentToForgetWeights;</div><div class="line"><a name="l02252"></a><span class="lineno"> 2252</span>&#160; params.m_RecurrentToCellWeights = &amp;recurrentToCellWeights;</div><div class="line"><a name="l02253"></a><span class="lineno"> 2253</span>&#160; params.m_RecurrentToOutputWeights = &amp;recurrentToOutputWeights;</div><div class="line"><a name="l02254"></a><span class="lineno"> 2254</span>&#160;</div><div class="line"><a name="l02255"></a><span class="lineno"> 2255</span>&#160; params.m_InputGateBias = &amp;inputGateBias;</div><div class="line"><a name="l02256"></a><span class="lineno"> 2256</span>&#160; params.m_ForgetGateBias = &amp;forgetGateBias;</div><div class="line"><a name="l02257"></a><span class="lineno"> 2257</span>&#160; params.m_CellBias = &amp;cellBias;</div><div class="line"><a name="l02258"></a><span class="lineno"> 2258</span>&#160; params.m_OutputGateBias = &amp;outputGateBias;</div><div class="line"><a name="l02259"></a><span class="lineno"> 2259</span>&#160;</div><div class="line"><a name="l02260"></a><span class="lineno"> 2260</span>&#160; TestQuantizedLstmLayerVisitor visitor(params);</div><div class="line"><a name="l02261"></a><span class="lineno"> 2261</span>&#160;</div><div class="line"><a name="l02262"></a><span class="lineno"> 2262</span>&#160; NetworkImpl net;</div><div class="line"><a name="l02263"></a><span class="lineno"> 2263</span>&#160;</div><div class="line"><a name="l02264"></a><span class="lineno"> 2264</span>&#160; IConnectableLayer* <span class="keyword">const</span> layer = net.AddQuantizedLstmLayer(params);</div><div class="line"><a name="l02265"></a><span class="lineno"> 2265</span>&#160; layer-&gt;ExecuteStrategy(visitor);</div><div class="line"><a name="l02266"></a><span class="lineno"> 2266</span>&#160;}</div><div class="line"><a name="l02267"></a><span class="lineno"> 2267</span>&#160;</div><div class="line"><a name="l02268"></a><span class="lineno"> 2268</span>&#160;TEST_CASE(<span class="stringliteral">&quot;CheckNamedQuantizedLstmLayer&quot;</span>)</div><div class="line"><a name="l02269"></a><span class="lineno"> 2269</span>&#160;{</div><div class="line"><a name="l02270"></a><span class="lineno"> 2270</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* layerName = <span class="stringliteral">&quot;LstmLayer&quot;</span>;</div><div class="line"><a name="l02271"></a><span class="lineno"> 2271</span>&#160; std::vector&lt;uint8_t&gt; inputToInputWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l02272"></a><span class="lineno"> 2272</span>&#160; std::vector&lt;unsigned int&gt; inputToInputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l02273"></a><span class="lineno"> 2273</span>&#160; ConstTensor inputToInputWeights(</div><div class="line"><a name="l02274"></a><span class="lineno"> 2274</span>&#160; TensorInfo(4, inputToInputWeightsDimensions.data(), DataType::QAsymmU8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l02275"></a><span class="lineno"> 2275</span>&#160; inputToInputWeightsData);</div><div class="line"><a name="l02276"></a><span class="lineno"> 2276</span>&#160;</div><div class="line"><a name="l02277"></a><span class="lineno"> 2277</span>&#160; std::vector&lt;uint8_t&gt; inputToForgetWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l02278"></a><span class="lineno"> 2278</span>&#160; std::vector&lt;unsigned int&gt; inputToForgetWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l02279"></a><span class="lineno"> 2279</span>&#160; ConstTensor inputToForgetWeights(</div><div class="line"><a name="l02280"></a><span class="lineno"> 2280</span>&#160; TensorInfo(4, inputToForgetWeightsDimensions.data(), DataType::QAsymmU8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l02281"></a><span class="lineno"> 2281</span>&#160; inputToForgetWeightsData);</div><div class="line"><a name="l02282"></a><span class="lineno"> 2282</span>&#160;</div><div class="line"><a name="l02283"></a><span class="lineno"> 2283</span>&#160; std::vector&lt;uint8_t&gt; inputToCellWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l02284"></a><span class="lineno"> 2284</span>&#160; std::vector&lt;unsigned int&gt; inputToCellWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l02285"></a><span class="lineno"> 2285</span>&#160; ConstTensor inputToCellWeights(</div><div class="line"><a name="l02286"></a><span class="lineno"> 2286</span>&#160; TensorInfo(4, inputToCellWeightsDimensions.data(), DataType::QAsymmU8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l02287"></a><span class="lineno"> 2287</span>&#160; inputToCellWeightsData);</div><div class="line"><a name="l02288"></a><span class="lineno"> 2288</span>&#160;</div><div class="line"><a name="l02289"></a><span class="lineno"> 2289</span>&#160; std::vector&lt;uint8_t&gt; inputToOutputWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l02290"></a><span class="lineno"> 2290</span>&#160; std::vector&lt;unsigned int&gt; inputToOutputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l02291"></a><span class="lineno"> 2291</span>&#160; ConstTensor inputToOutputWeights(</div><div class="line"><a name="l02292"></a><span class="lineno"> 2292</span>&#160; TensorInfo(4, inputToOutputWeightsDimensions.data(), DataType::QAsymmU8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l02293"></a><span class="lineno"> 2293</span>&#160; inputToOutputWeightsData);</div><div class="line"><a name="l02294"></a><span class="lineno"> 2294</span>&#160;</div><div class="line"><a name="l02295"></a><span class="lineno"> 2295</span>&#160;</div><div class="line"><a name="l02296"></a><span class="lineno"> 2296</span>&#160; std::vector&lt;uint8_t&gt; recurrentToInputWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l02297"></a><span class="lineno"> 2297</span>&#160; std::vector&lt;unsigned int&gt; recurrentToInputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l02298"></a><span class="lineno"> 2298</span>&#160; ConstTensor recurrentToInputWeights(</div><div class="line"><a name="l02299"></a><span class="lineno"> 2299</span>&#160; TensorInfo(4, recurrentToInputWeightsDimensions.data(), DataType::QAsymmU8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l02300"></a><span class="lineno"> 2300</span>&#160; recurrentToInputWeightsData);</div><div class="line"><a name="l02301"></a><span class="lineno"> 2301</span>&#160;</div><div class="line"><a name="l02302"></a><span class="lineno"> 2302</span>&#160; std::vector&lt;uint8_t&gt; recurrentToForgetWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l02303"></a><span class="lineno"> 2303</span>&#160; std::vector&lt;unsigned int&gt; recurrentToForgetWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l02304"></a><span class="lineno"> 2304</span>&#160; ConstTensor recurrentToForgetWeights(</div><div class="line"><a name="l02305"></a><span class="lineno"> 2305</span>&#160; TensorInfo(4, recurrentToForgetWeightsDimensions.data(), DataType::QAsymmU8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l02306"></a><span class="lineno"> 2306</span>&#160; recurrentToForgetWeightsData);</div><div class="line"><a name="l02307"></a><span class="lineno"> 2307</span>&#160;</div><div class="line"><a name="l02308"></a><span class="lineno"> 2308</span>&#160; std::vector&lt;uint8_t&gt; recurrentToCellWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l02309"></a><span class="lineno"> 2309</span>&#160; std::vector&lt;unsigned int&gt; recurrentToCellWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l02310"></a><span class="lineno"> 2310</span>&#160; ConstTensor recurrentToCellWeights(</div><div class="line"><a name="l02311"></a><span class="lineno"> 2311</span>&#160; TensorInfo(4, recurrentToCellWeightsDimensions.data(), DataType::QAsymmU8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l02312"></a><span class="lineno"> 2312</span>&#160; recurrentToCellWeightsData);</div><div class="line"><a name="l02313"></a><span class="lineno"> 2313</span>&#160;</div><div class="line"><a name="l02314"></a><span class="lineno"> 2314</span>&#160; std::vector&lt;uint8_t&gt; recurrentToOutputWeightsData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l02315"></a><span class="lineno"> 2315</span>&#160; std::vector&lt;unsigned int&gt; recurrentToOutputWeightsDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l02316"></a><span class="lineno"> 2316</span>&#160; ConstTensor recurrentToOutputWeights(</div><div class="line"><a name="l02317"></a><span class="lineno"> 2317</span>&#160; TensorInfo(4, recurrentToOutputWeightsDimensions.data(), DataType::QAsymmU8, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l02318"></a><span class="lineno"> 2318</span>&#160; recurrentToOutputWeightsData);</div><div class="line"><a name="l02319"></a><span class="lineno"> 2319</span>&#160;</div><div class="line"><a name="l02320"></a><span class="lineno"> 2320</span>&#160;</div><div class="line"><a name="l02321"></a><span class="lineno"> 2321</span>&#160; std::vector&lt;int32_t&gt; inputGateBiasData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l02322"></a><span class="lineno"> 2322</span>&#160; std::vector&lt;unsigned int&gt; inputGateBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l02323"></a><span class="lineno"> 2323</span>&#160; ConstTensor inputGateBias(</div><div class="line"><a name="l02324"></a><span class="lineno"> 2324</span>&#160; TensorInfo(4, inputGateBiasDimensions.data(), DataType::Signed32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l02325"></a><span class="lineno"> 2325</span>&#160; inputGateBiasData);</div><div class="line"><a name="l02326"></a><span class="lineno"> 2326</span>&#160;</div><div class="line"><a name="l02327"></a><span class="lineno"> 2327</span>&#160; std::vector&lt;int32_t&gt; forgetGateBiasData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l02328"></a><span class="lineno"> 2328</span>&#160; std::vector&lt;unsigned int&gt; forgetGateBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l02329"></a><span class="lineno"> 2329</span>&#160; ConstTensor forgetGateBias(</div><div class="line"><a name="l02330"></a><span class="lineno"> 2330</span>&#160; TensorInfo(4, forgetGateBiasDimensions.data(), DataType::Signed32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l02331"></a><span class="lineno"> 2331</span>&#160; forgetGateBiasData);</div><div class="line"><a name="l02332"></a><span class="lineno"> 2332</span>&#160;</div><div class="line"><a name="l02333"></a><span class="lineno"> 2333</span>&#160; std::vector&lt;int32_t&gt; cellBiasData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l02334"></a><span class="lineno"> 2334</span>&#160; std::vector&lt;unsigned int&gt; cellBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l02335"></a><span class="lineno"> 2335</span>&#160; ConstTensor cellBias(</div><div class="line"><a name="l02336"></a><span class="lineno"> 2336</span>&#160; TensorInfo(4, cellBiasDimensions.data(), DataType::Signed32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l02337"></a><span class="lineno"> 2337</span>&#160; cellBiasData);</div><div class="line"><a name="l02338"></a><span class="lineno"> 2338</span>&#160;</div><div class="line"><a name="l02339"></a><span class="lineno"> 2339</span>&#160; std::vector&lt;int32_t&gt; outputGateBiasData = {1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><a name="l02340"></a><span class="lineno"> 2340</span>&#160; std::vector&lt;unsigned int&gt; outputGateBiasDimensions = {1, 1, 3, 3};</div><div class="line"><a name="l02341"></a><span class="lineno"> 2341</span>&#160; ConstTensor outputGateBias(</div><div class="line"><a name="l02342"></a><span class="lineno"> 2342</span>&#160; TensorInfo(4, outputGateBiasDimensions.data(), DataType::Signed32, 0.0f, 0, <span class="keyword">true</span>),</div><div class="line"><a name="l02343"></a><span class="lineno"> 2343</span>&#160; outputGateBiasData);</div><div class="line"><a name="l02344"></a><span class="lineno"> 2344</span>&#160;</div><div class="line"><a name="l02345"></a><span class="lineno"> 2345</span>&#160; QuantizedLstmInputParams params;</div><div class="line"><a name="l02346"></a><span class="lineno"> 2346</span>&#160;</div><div class="line"><a name="l02347"></a><span class="lineno"> 2347</span>&#160; params.m_InputToInputWeights = &amp;inputToInputWeights;</div><div class="line"><a name="l02348"></a><span class="lineno"> 2348</span>&#160; params.m_InputToForgetWeights = &amp;inputToForgetWeights;</div><div class="line"><a name="l02349"></a><span class="lineno"> 2349</span>&#160; params.m_InputToCellWeights = &amp;inputToCellWeights;</div><div class="line"><a name="l02350"></a><span class="lineno"> 2350</span>&#160; params.m_InputToOutputWeights = &amp;inputToOutputWeights;</div><div class="line"><a name="l02351"></a><span class="lineno"> 2351</span>&#160;</div><div class="line"><a name="l02352"></a><span class="lineno"> 2352</span>&#160; params.m_RecurrentToInputWeights = &amp;recurrentToInputWeights;</div><div class="line"><a name="l02353"></a><span class="lineno"> 2353</span>&#160; params.m_RecurrentToForgetWeights = &amp;recurrentToForgetWeights;</div><div class="line"><a name="l02354"></a><span class="lineno"> 2354</span>&#160; params.m_RecurrentToCellWeights = &amp;recurrentToCellWeights;</div><div class="line"><a name="l02355"></a><span class="lineno"> 2355</span>&#160; params.m_RecurrentToOutputWeights = &amp;recurrentToOutputWeights;</div><div class="line"><a name="l02356"></a><span class="lineno"> 2356</span>&#160;</div><div class="line"><a name="l02357"></a><span class="lineno"> 2357</span>&#160; params.m_InputGateBias = &amp;inputGateBias;</div><div class="line"><a name="l02358"></a><span class="lineno"> 2358</span>&#160; params.m_ForgetGateBias = &amp;forgetGateBias;</div><div class="line"><a name="l02359"></a><span class="lineno"> 2359</span>&#160; params.m_CellBias = &amp;cellBias;</div><div class="line"><a name="l02360"></a><span class="lineno"> 2360</span>&#160; params.m_OutputGateBias = &amp;outputGateBias;</div><div class="line"><a name="l02361"></a><span class="lineno"> 2361</span>&#160;</div><div class="line"><a name="l02362"></a><span class="lineno"> 2362</span>&#160; TestQuantizedLstmLayerVisitor visitor(params, layerName);</div><div class="line"><a name="l02363"></a><span class="lineno"> 2363</span>&#160;</div><div class="line"><a name="l02364"></a><span class="lineno"> 2364</span>&#160; NetworkImpl net;</div><div class="line"><a name="l02365"></a><span class="lineno"> 2365</span>&#160;</div><div class="line"><a name="l02366"></a><span class="lineno"> 2366</span>&#160; IConnectableLayer* <span class="keyword">const</span> layer = net.AddQuantizedLstmLayer(params, layerName);</div><div class="line"><a name="l02367"></a><span class="lineno"> 2367</span>&#160; layer-&gt;ExecuteStrategy(visitor);</div><div class="line"><a name="l02368"></a><span class="lineno"> 2368</span>&#160;}</div><div class="line"><a name="l02369"></a><span class="lineno"> 2369</span>&#160;</div><div class="line"><a name="l02370"></a><span class="lineno"> 2370</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a2748f45e58b1c612d473043f711d1434"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2748f45e58b1c612d473043f711d1434">&#9670;&nbsp;</a></span>TopKSort()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void TopKSort </td>
+ <td>(</td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>k</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int *&#160;</td>
+ <td class="paramname"><em>indices</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const float *&#160;</td>
+ <td class="paramname"><em>values</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>numElement</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="backends_2reference_2workloads_2_detection_post_process_8cpp_source.xhtml#l00024">24</a> of file <a class="el" href="backends_2reference_2workloads_2_detection_post_process_8cpp_source.xhtml">DetectionPostProcess.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="backends_2reference_2workloads_2_detection_post_process_8cpp_source.xhtml#l00140">DetectionPostProcess()</a>, <a class="el" href="backends_2reference_2workloads_2_detection_post_process_8cpp_source.xhtml#l00049">NonMaxSuppression()</a>, and <a class="el" href="_ref_detection_post_process_tests_8cpp_source.xhtml#l00013">TEST_SUITE()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;{</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; std::partial_sort(indices, indices + k, indices + numElement,</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; [&amp;values](<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j) { <span class="keywordflow">return</span> values[i] &gt; values[j]; });</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="affec174d91f234497dfbceba5e251dee"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#affec174d91f234497dfbceba5e251dee">&#9670;&nbsp;</a></span>TransposeConvolution2dImpl()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void TransposeConvolution2dImpl </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_transpose_convolution2d_descriptor.xhtml">TransposeConvolution2dDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>descriptor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> &amp;&#160;</td>
+ <td class="paramname"><em>inputShape</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>inputDecoder</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> &amp;&#160;</td>
+ <td class="paramname"><em>outputShape</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>outputEncoder</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> &amp;&#160;</td>
+ <td class="paramname"><em>weightsShape</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; &amp;&#160;</td>
+ <td class="paramname"><em>weightsDecoder</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; float &gt; *&#160;</td>
+ <td class="paramname"><em>biasesDecoder</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_transpose_convolution2d_8cpp_source.xhtml#l00015">15</a> of file <a class="el" href="_transpose_convolution2d_8cpp_source.xhtml">TransposeConvolution2d.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="classarmnn_1_1_decoder.xhtml#aafe0168dd5ece89e7c62e8d83a4e57cd">Decoder&lt; IType &gt;::DecodeTensor()</a>, <a class="el" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Decoder&lt; IType &gt;::Get()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00023">DataLayoutIndexed::GetChannelsIndex()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00024">DataLayoutIndexed::GetHeightIndex()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00028">DataLayoutIndexed::GetIndex()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00181">TensorShape::GetNumElements()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00025">DataLayoutIndexed::GetWidthIndex()</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01433">TransposeConvolution2dDescriptor::m_BiasEnabled</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01435">TransposeConvolution2dDescriptor::m_DataLayout</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01421">TransposeConvolution2dDescriptor::m_PadLeft</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01425">TransposeConvolution2dDescriptor::m_PadTop</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01429">TransposeConvolution2dDescriptor::m_StrideX</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01431">TransposeConvolution2dDescriptor::m_StrideY</a>, <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">NHWC</a>, and <a class="el" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_ref_transpose_convolution2d_workload_8cpp_source.xhtml#l00041">RefTransposeConvolution2dWorkload::ExecuteAsync()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;{</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keywordflow">if</span> (descriptor.m_BiasEnabled &amp;&amp; !biasesDecoder)</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; {</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Biases enabled but no bias data provided&quot;</span>);</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; }</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml">DataLayoutIndexed</a> dataLayoutIndexed(descriptor.m_DataLayout);</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channelsIndex = dataLayoutIndexed.GetChannelsIndex();</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> heightIndex = dataLayoutIndexed.GetHeightIndex();</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> widthIndex = dataLayoutIndexed.GetWidthIndex();</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numBatches = inputShape[0];</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputWidth = inputShape[widthIndex];</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputHeight = inputShape[heightIndex];</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputDepth = inputShape[channelsIndex];</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> weightsHeight = weightsShape[heightIndex];</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> weightsWidth = weightsShape[widthIndex];</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> weightsDepth = weightsShape[channelsIndex];</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputHeight = outputShape[heightIndex];</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputWidth = outputShape[widthIndex];</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputDepth = outputShape[channelsIndex];</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> paddingLeft = descriptor.m_PadLeft;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> paddingTop = descriptor.m_PadTop;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> strideX = descriptor.m_StrideX;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> strideY = descriptor.m_StrideY;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; std::vector&lt;float&gt; outputBuffer(outputShape.GetNumElements(), 0);</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keyword">const</span> std::vector&lt;float&gt; inputVec = inputDecoder.<a class="code" href="classarmnn_1_1_decoder.xhtml#aafe0168dd5ece89e7c62e8d83a4e57cd">DecodeTensor</a>(inputShape);</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keyword">const</span> std::vector&lt;float&gt; filterVec = weightsDecoder.<a class="code" href="classarmnn_1_1_decoder.xhtml#aafe0168dd5ece89e7c62e8d83a4e57cd">DecodeTensor</a>(weightsShape);</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> batch = 0u; batch &lt; numBatches; ++batch)</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; {</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> yInput = 0u; yInput &lt; inputHeight; ++yInput)</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; {</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> xInput = 0u; xInput &lt; inputWidth; ++xInput)</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; {</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> xOutputOrigin = xInput * strideX - paddingLeft;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> yOutputOrigin = yInput * strideY - paddingTop;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dOutput = 0u; dOutput &lt; outputDepth; ++dOutput)</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; {</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> yWeights = 0u; yWeights &lt; weightsHeight; ++yWeights)</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; {</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> xWeights = 0u; xWeights &lt; weightsWidth; ++xWeights)</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; {</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> yOutput = yOutputOrigin + yWeights;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> xOutput = xOutputOrigin + xWeights;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">if</span> (yOutput &lt; outputHeight &amp;&amp; xOutput&lt; outputWidth)</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; {</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dInput = 0u; dInput &lt; inputDepth; dInput++)</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; {</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputIndex;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputIndex;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> weightsIndex;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">if</span>(descriptor.m_DataLayout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a>)</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; {</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; inputIndex = batch * inputHeight * inputWidth * inputDepth +</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; yInput * inputWidth * inputDepth +</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; xInput * inputDepth +</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; dInput;</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; weightsIndex = dOutput * weightsHeight * weightsWidth * weightsDepth +</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; yWeights * weightsWidth * weightsDepth +</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; xWeights * weightsDepth +</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; dInput;</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; outputIndex = batch * outputHeight * outputWidth * outputDepth +</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; yOutput * outputWidth * outputDepth +</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; xOutput * outputDepth +</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; dOutput;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; }</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; {</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; inputIndex = batch * inputDepth * inputHeight * inputWidth +</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; dInput * inputHeight * inputWidth +</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; yInput * inputWidth +</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; xInput;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; weightsIndex = dOutput * weightsDepth * weightsHeight * weightsWidth +</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; dInput * weightsHeight * weightsWidth +</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; yWeights * weightsWidth +</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; xWeights;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; outputIndex = batch * outputDepth * outputHeight * outputWidth +</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; dOutput * outputHeight * outputWidth +</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; yOutput * outputWidth +</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; xOutput;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; }</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; outputBuffer[outputIndex] += inputVec[inputIndex] * filterVec[weightsIndex];</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; }</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; }</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; }</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; }</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; }</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; }</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; }</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; }</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="comment">// Apply bias (if enabled)</span></div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordflow">if</span> (descriptor.m_BiasEnabled)</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; {</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; outputEncoder[0];</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; Decoder&lt;float&gt;&amp; rBiasesDecoder = *biasesDecoder;</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> batch = 0u; batch &lt; numBatches; ++batch)</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; {</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dOutput = 0u; dOutput &lt; outputDepth; ++dOutput)</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; {</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; rBiasesDecoder[dOutput];</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> yOutput = 0u; yOutput &lt; outputHeight; ++yOutput)</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; {</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> xOutput = 0u; xOutput &lt; outputWidth; ++xOutput)</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; {</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputIndex =</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; dataLayoutIndexed.GetIndex(outputShape, batch, dOutput, yOutput, xOutput);</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; outputBuffer[outputIndex] += rBiasesDecoder.<a class="code" href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">Get</a>();</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; }</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; }</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; }</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; }</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; }</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; outputEncoder[0];</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">float</span> output : outputBuffer)</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; {</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; outputEncoder.<a class="code" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Set</a>(output);</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; ++outputEncoder;</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; }</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_decoder_xhtml_aafe0168dd5ece89e7c62e8d83a4e57cd"><div class="ttname"><a href="classarmnn_1_1_decoder.xhtml#aafe0168dd5ece89e7c62e8d83a4e57cd">armnn::Decoder::DecodeTensor</a></div><div class="ttdeci">virtual std::vector&lt; float &gt; DecodeTensor(const TensorShape &amp;tensorShape, bool isDepthwise=false)=0</div></div>
+<div class="ttc" id="classarmnn_1_1_encoder_xhtml_ae3b62b846a9c239f332830b9e36030eb"><div class="ttname"><a href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">armnn::Encoder::Set</a></div><div class="ttdeci">virtual void Set(IType right)=0</div></div>
+<div class="ttc" id="classarmnn_1_1_decoder_xhtml_ac729108381e2340bea12877971713ecb"><div class="ttname"><a href="classarmnn_1_1_decoder.xhtml#ac729108381e2340bea12877971713ecb">armnn::Decoder::Get</a></div><div class="ttdeci">virtual IType Get() const =0</div></div>
+<div class="ttc" id="classarmnn_utils_1_1_data_layout_indexed_xhtml"><div class="ttname"><a href="classarmnn_utils_1_1_data_layout_indexed.xhtml">armnnUtils::DataLayoutIndexed</a></div><div class="ttdoc">Provides access to the appropriate indexes for Channels, Height and Width based on DataLayout...</div><div class="ttdef"><b>Definition:</b> <a href="_data_layout_indexed_8hpp_source.xhtml#l00017">DataLayoutIndexed.hpp:17</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="aeaee60c3c6c67a7cf37bbef45b89fc0a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aeaee60c3c6c67a7cf37bbef45b89fc0a">&#9670;&nbsp;</a></span>TrueFunc()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::TrueFunc </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; std::string &amp;&gt;&#160;</td>
+ <td class="paramname"><em>reasonIfUnsupported</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Params &amp;&amp;...&#160;</td>
+ <td class="paramname"><em>params</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_layer_support_common_8hpp_source.xhtml#l00054">54</a> of file <a class="el" href="_layer_support_common_8hpp_source.xhtml">LayerSupportCommon.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;{</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(reasonIfUnsupported);</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(params...);</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="acda1e285d7be5f9b456d98bd29be4591"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acda1e285d7be5f9b456d98bd29be4591">&#9670;&nbsp;</a></span>VerifyClContextBuffer()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::VerifyClContextBuffer </td>
+ <td>(</td>
+ <td class="paramtype">flatbuffers::Verifier &amp;&#160;</td>
+ <td class="paramname"><em>verifier</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_context_schema__generated_8h_source.xhtml#l00157">157</a> of file <a class="el" href="_cl_context_schema__generated_8h_source.xhtml">ClContextSchema_generated.h</a>.</p>
+
+<p class="reference">References <a class="el" href="_cl_context_schema__generated_8h_source.xhtml#l00148">ClContextIdentifier()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; {</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keywordflow">return</span> verifier.VerifyBuffer&lt;armnn::ClContext&gt;(<a class="code" href="namespacearmnn.xhtml#ab672391d036102ab6864bb181d4844d5">ClContextIdentifier</a>());</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ab672391d036102ab6864bb181d4844d5"><div class="ttname"><a href="namespacearmnn.xhtml#ab672391d036102ab6864bb181d4844d5">armnn::ClContextIdentifier</a></div><div class="ttdeci">const char * ClContextIdentifier()</div><div class="ttdef"><b>Definition:</b> <a href="_cl_context_schema__generated_8h_source.xhtml#l00148">ClContextSchema_generated.h:148</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="acc7af054e783ad1bf6dce0111366d64c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acc7af054e783ad1bf6dce0111366d64c">&#9670;&nbsp;</a></span>VerifySizePrefixedClContextBuffer()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool armnn::VerifySizePrefixedClContextBuffer </td>
+ <td>(</td>
+ <td class="paramtype">flatbuffers::Verifier &amp;&#160;</td>
+ <td class="paramname"><em>verifier</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_context_schema__generated_8h_source.xhtml#l00162">162</a> of file <a class="el" href="_cl_context_schema__generated_8h_source.xhtml">ClContextSchema_generated.h</a>.</p>
+
+<p class="reference">References <a class="el" href="_cl_context_schema__generated_8h_source.xhtml#l00148">ClContextIdentifier()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; {</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keywordflow">return</span> verifier.VerifySizePrefixedBuffer&lt;armnn::ClContext&gt;(<a class="code" href="namespacearmnn.xhtml#ab672391d036102ab6864bb181d4844d5">ClContextIdentifier</a>());</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ab672391d036102ab6864bb181d4844d5"><div class="ttname"><a href="namespacearmnn.xhtml#ab672391d036102ab6864bb181d4844d5">armnn::ClContextIdentifier</a></div><div class="ttdeci">const char * ClContextIdentifier()</div><div class="ttdef"><b>Definition:</b> <a href="_cl_context_schema__generated_8h_source.xhtml#l00148">ClContextSchema_generated.h:148</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a9667bea652e3a5ef81fea59b71513ced"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9667bea652e3a5ef81fea59b71513ced">&#9670;&nbsp;</a></span>VerifyTensorInfoDataType()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void armnn::VerifyTensorInfoDataType </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>info</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a>&#160;</td>
+ <td class="paramname"><em>dataType</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00337">337</a> of file <a class="el" href="_types_utils_8hpp_source.xhtml">TypesUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_tensor_8hpp_source.xhtml#l00198">TensorInfo::GetDataType()</a>, <a class="el" href="_types_utils_8hpp_source.xhtml#l00202">GetDataTypeName()</a>, and <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_parser_flatbuffers_fixture_8hpp_source.xhtml#l00259">ParserFlatbuffersFixture::CheckTensors()</a>, <a class="el" href="_parser_flatbuffers_serialize_fixture_8hpp_source.xhtml#l00202">ParserFlatbuffersSerializeFixture::RunTest()</a>, and <a class="el" href="_parser_flatbuffers_fixture_8hpp_source.xhtml#l00339">ParserFlatbuffersFixture::RunTest()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160;{</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <span class="keywordflow">if</span> (info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>() != dataType)</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; {</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; std::stringstream ss;</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;Unexpected datatype:&quot;</span> &lt;&lt; <a class="code" href="namespacearmnn.xhtml#a81b5ff8545adad19a1c9d4ca076d552c">armnn::GetDataTypeName</a>(info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>())</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; &lt;&lt; <span class="stringliteral">&quot; for tensor:&quot;</span> &lt;&lt; info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; &lt;&lt; <span class="stringliteral">&quot;. The type expected to be: &quot;</span> &lt;&lt; <a class="code" href="namespacearmnn.xhtml#a81b5ff8545adad19a1c9d4ca076d552c">armnn::GetDataTypeName</a>(dataType);</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_exception.xhtml">armnn::Exception</a>(ss.str());</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; }</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a8b5d0f8a24e9d9238f412260a552acf8"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">armnn::TensorInfo::GetShape</a></div><div class="ttdeci">const TensorShape &amp; GetShape() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00191">Tensor.hpp:191</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a81b5ff8545adad19a1c9d4ca076d552c"><div class="ttname"><a href="namespacearmnn.xhtml#a81b5ff8545adad19a1c9d4ca076d552c">armnn::GetDataTypeName</a></div><div class="ttdeci">constexpr const char * GetDataTypeName(DataType dataType)</div><div class="ttdef"><b>Definition:</b> <a href="_types_utils_8hpp_source.xhtml#l00202">TypesUtils.hpp:202</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_aea909c7327109228ef618d459015def3"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">armnn::TensorInfo::GetDataType</a></div><div class="ttdeci">DataType GetDataType() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00198">Tensor.hpp:198</a></div></div>
+<div class="ttc" id="classarmnn_1_1_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_exception.xhtml">armnn::Exception</a></div><div class="ttdoc">Base class for all ArmNN exceptions so that users can filter to just those. </div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00046">Exceptions.hpp:46</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a2192b5ff59aacdb27f8b0238323915dc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2192b5ff59aacdb27f8b0238323915dc">&#9670;&nbsp;</a></span>WrapClError()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classarmnn_1_1_runtime_exception.xhtml">RuntimeException</a> armnn::WrapClError </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da902b0d55fddef6f8d651fe1035b7d4bd">cl::Error</a> &amp;&#160;</td>
+ <td class="paramname"><em>clError</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structarmnn_1_1_check_location.xhtml">CheckLocation</a> &amp;&#160;</td>
+ <td class="paramname"><em>location</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_cl_workload_utils_8hpp_source.xhtml#l00147">147</a> of file <a class="el" href="_cl_workload_utils_8hpp_source.xhtml">ClWorkloadUtils.hpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_exceptions_8cpp_source.xhtml#l00032">Exception::what()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_workload_factory_8cpp_source.xhtml#l00066">ClWorkloadFactory::AfterWorkloadsCreated()</a>, and <a class="el" href="_cl_workload_utils_8hpp_source.xhtml#l00155">RunClFunction()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;{</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; std::stringstream message;</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; message &lt;&lt; <span class="stringliteral">&quot;CL error: &quot;</span> &lt;&lt; clError.what() &lt;&lt; <span class="stringliteral">&quot;. Error code: &quot;</span> &lt;&lt; clError.err();</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordflow">return</span> RuntimeException(message.str(), location);</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<h2 class="groupheader">Variable Documentation</h2>
+<a id="a59b7d5f8cd8e403a46183a527afe1d4b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a59b7d5f8cd8e403a46183a527afe1d4b">&#9670;&nbsp;</a></span>cpuAccCapabilities</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const <a class="el" href="namespacearmnn.xhtml#aa9c506b558b8aa33a228b15164f40dc3">BackendCapabilities</a> cpuAccCapabilities(&quot;CpuAcc&quot;, { {&quot;NonConstWeights&quot;, false}, {&quot;AsyncExecution&quot;, false}, {&quot;ProtectedContentAllocation&quot;, false}, {&quot;ConstantTensorsAsInputs&quot;, false}, {&quot;PreImportIOTensors&quot;, false}, {&quot;ExternallyManagedMemory&quot;, true}, {&quot;MultiAxisPacking&quot;, false}, {&quot;SingleAxisPacking&quot;, true} })</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="reference">Referenced by <a class="el" href="_neon_backend_8hpp_source.xhtml#l00064">NeonBackend::GetCapabilities()</a>.</p>
+
+</div>
+</div>
+<a id="abf951dc00760f423e98e6295c8edd595"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abf951dc00760f423e98e6295c8edd595">&#9670;&nbsp;</a></span>cpuRefCapabilities</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const <a class="el" href="namespacearmnn.xhtml#aa9c506b558b8aa33a228b15164f40dc3">BackendCapabilities</a> cpuRefCapabilities(&quot;CpuRef&quot;, { {&quot;NonConstWeights&quot;, true}, {&quot;AsyncExecution&quot;, true}, {&quot;ProtectedContentAllocation&quot;, false}, {&quot;ConstantTensorsAsInputs&quot;, true}, {&quot;PreImportIOTensors&quot;, true}, {&quot;ExternallyManagedMemory&quot;, true}, {&quot;MultiAxisPacking&quot;, false}, {&quot;SingleAxisPacking&quot;, true} })</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="reference">Referenced by <a class="el" href="_ref_backend_8hpp_source.xhtml#l00059">RefBackend::GetCapabilities()</a>.</p>
+
+</div>
+</div>
+<a id="a61d2390e44601830cdc9b400b9910bbf"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a61d2390e44601830cdc9b400b9910bbf">&#9670;&nbsp;</a></span>EXPIRE_RATE</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr unsigned int EXPIRE_RATE = 3U</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Variable to control expire rate of priority queue. </p>
+
+<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00024">24</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_threadpool_8cpp_source.xhtml#l00102">Threadpool::TerminateThreadPool()</a>.</p>
+
+</div>
+</div>
+<a id="aacc0d11e271ebbfcff9d613dd17604aa"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aacc0d11e271ebbfcff9d613dd17604aa">&#9670;&nbsp;</a></span>g_AggregateProfilingEventsByInference</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr bool g_AggregateProfilingEventsByInference = true</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_profiling_8cpp_source.xhtml#l00037">37</a> of file <a class="el" href="_profiling_8cpp_source.xhtml">Profiling.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a43ecd194778b7653578044060ba8695e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a43ecd194778b7653578044060ba8695e">&#9670;&nbsp;</a></span>g_ProfilingEventCountHint</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr std::size_t g_ProfilingEventCountHint = 1024</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_profiling_8cpp_source.xhtml#l00029">29</a> of file <a class="el" href="_profiling_8cpp_source.xhtml">Profiling.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a41794552ff67b0dad16de60f9b8e7d7c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a41794552ff67b0dad16de60f9b8e7d7c">&#9670;&nbsp;</a></span>g_WriteProfilingEventSequence</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr bool g_WriteProfilingEventSequence = true</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_profiling_8cpp_source.xhtml#l00032">32</a> of file <a class="el" href="_profiling_8cpp_source.xhtml">Profiling.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a6ce7e56eb10e440463f09eee8f213adc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6ce7e56eb10e440463f09eee8f213adc">&#9670;&nbsp;</a></span>g_WriteReportToStdOutOnProfilerDestruction</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr bool g_WriteReportToStdOutOnProfilerDestruction = false</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_profiling_8cpp_source.xhtml#l00041">41</a> of file <a class="el" href="_profiling_8cpp_source.xhtml">Profiling.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a468f6472f6d28fba4a9e43c8c793df9f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a468f6472f6d28fba4a9e43c8c793df9f">&#9670;&nbsp;</a></span>gpuAccCapabilities</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const <a class="el" href="namespacearmnn.xhtml#aa9c506b558b8aa33a228b15164f40dc3">BackendCapabilities</a> gpuAccCapabilities(&quot;GpuAcc&quot;, { {&quot;NonConstWeights&quot;, false}, {&quot;AsyncExecution&quot;, false}, {&quot;ProtectedContentAllocation&quot;, true}, {&quot;ConstantTensorsAsInputs&quot;, false}, {&quot;PreImportIOTensors&quot;, false}, {&quot;ExternallyManagedMemory&quot;, true}, {&quot;MultiAxisPacking&quot;, false}, {&quot;SingleAxisPacking&quot;, true} })</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="reference">Referenced by <a class="el" href="_cl_backend_8hpp_source.xhtml#l00093">ClBackend::GetCapabilities()</a>.</p>
+
+</div>
+</div>
+<a id="a602ddc6408c3347ba4c1eba623003984"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a602ddc6408c3347ba4c1eba623003984">&#9670;&nbsp;</a></span>LOWEST_CAPTURE_PERIOD</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr unsigned int LOWEST_CAPTURE_PERIOD = 10000u</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>The lowest performance data capture interval we support is 10 miliseconds. </p>
+
+<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00021">21</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_periodic_counter_selection_command_handler_8cpp_source.xhtml#l00060">PeriodicCounterSelectionCommandHandler::operator()()</a>, and <a class="el" href="_profiling_tests_8cpp_source.xhtml#l00057">TEST_SUITE()</a>.</p>
+
+</div>
+</div>
+<a id="abdcd184ed3bd648bb31d385040cafd5d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abdcd184ed3bd648bb31d385040cafd5d">&#9670;&nbsp;</a></span>MaxNumOfTensorDimensions</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr unsigned int MaxNumOfTensorDimensions = 5U</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00018">18</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_tf_lite_parser_8cpp_source.xhtml#l03309">armnnTfLiteParser::ComputeWrappedIndex()</a>, <a class="el" href="_concatenate_8cpp_source.xhtml#l00014">Concatenate()</a>, <a class="el" href="_workload_utils_8hpp_source.xhtml#l00046">CopyTensorContentsGeneric()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00257">TensorShape::IsAtLeastOneDimensionSpecified()</a>, <a class="el" href="_tf_lite_parser_8cpp_source.xhtml#l02575">TfLiteParserImpl::OutputShapeOfReshape()</a>, <a class="el" href="_descriptors_8cpp_source.xhtml#l00020">PermutationVector::PermutationVector()</a>, <a class="el" href="_permute_8cpp_source.xhtml#l00098">armnnUtils::Permuted()</a>, <a class="el" href="_splitter_8cpp_source.xhtml#l00021">Split()</a>, <a class="el" href="_splitter_8hpp_source.xhtml#l00017">Splitter()</a>, <a class="el" href="_input_output_tensor_names_8cpp_source.xhtml#l00009">TEST_SUITE()</a>, <a class="el" href="_deserializer_8cpp_source.xhtml#l00609">armnnDeserializer::ToTensorInfo()</a>, and <a class="el" href="armnn_utils_2_transpose_8cpp_source.xhtml#l00098">armnnUtils::TransposeTensorShape()</a>.</p>
+
+</div>
+</div>
+<a id="ab7a35288d329560ff76ddf785e852507"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab7a35288d329560ff76ddf785e852507">&#9670;&nbsp;</a></span>oldCpuRefCapabilities</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const std::set&lt;<a class="el" href="namespacearmnn.xhtml#ab24d74259a053475f6040dd701a01952">armnn::BackendCapability</a>&gt; oldCpuRefCapabilities</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<b>Initial value:</b><div class="fragment"><div class="line">{</div><div class="line"> <a class="code" href="namespacearmnn.xhtml#ab24d74259a053475f6040dd701a01952a0be89c9a624a5de3925150e3cd476245">armnn::BackendCapability::NonConstWeights</a>,</div><div class="line">}</div><div class="ttc" id="namespacearmnn_xhtml_ab24d74259a053475f6040dd701a01952a0be89c9a624a5de3925150e3cd476245"><div class="ttname"><a href="namespacearmnn.xhtml#ab24d74259a053475f6040dd701a01952a0be89c9a624a5de3925150e3cd476245">armnn::BackendCapability::NonConstWeights</a></div><div class="ttdoc">Constant weights can be accessed through the descriptors, On the other hand, non-const weights can be...</div></div>
+</div><!-- fragment -->
+<p class="definition">Definition at line <a class="el" href="_ref_backend_8hpp_source.xhtml#l00024">24</a> of file <a class="el" href="_ref_backend_8hpp_source.xhtml">RefBackend.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a57af7c2f79db8ab6ccc1611a2172b6e6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a57af7c2f79db8ab6ccc1611a2172b6e6">&#9670;&nbsp;</a></span>paddingRequiredLayers</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const std::set&lt;<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">armnn::LayerType</a>&gt; paddingRequiredLayers</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<b>Initial value:</b><div class="fragment"><div class="line">{</div><div class="line"> <a class="code" href="namespacearmnn.xhtml#ad441be836a142e8935e0413f4a22c9ec">LayerType::ArgMinMax</a>,</div><div class="line"> LayerType::Convolution2d,</div><div class="line"> <a class="code" href="namespacearmnn.xhtml#ab023d9a7687e35c0f108458a094c1f56">LayerType::DepthToSpace</a>,</div><div class="line"> LayerType::DepthwiseConvolution2d,</div><div class="line"> <a class="code" href="namespacearmnn.xhtml#a855293b1be0581fb61ef6a1c5b027d0f">LayerType::Dequantize</a>,</div><div class="line"> <a class="code" href="namespacearmnn.xhtml#a435f9350a94adfbb0d5b9abb5f430914">LayerType::FullyConnected</a>,</div><div class="line"> <a class="code" href="namespacearmnn.xhtml#a38c9c1724b660b2558a19895b681a8fb">LayerType::Gather</a>,</div><div class="line"> LayerType::Lstm,</div><div class="line"> LayerType::Mean,</div><div class="line"> <a class="code" href="namespacearmnn_utils.xhtml#af3c74017185773dd61d8ca6662d65d43">LayerType::Permute</a>,</div><div class="line"> <a class="code" href="namespacearmnn.xhtml#ae2e93e304cf516841c521e3eaee025cd">LayerType::Pooling2d</a>,</div><div class="line"> <a class="code" href="namespacearmnn.xhtml#ad773a034fb9983e15f3094b4c5c7c30c">LayerType::Quantize</a>,</div><div class="line"> LayerType::QuantizedLstm,</div><div class="line"> <a class="code" href="namespacearmnn.xhtml#ac245fda400649db10eed0dc96c1b5c37">LayerType::Stack</a>,</div><div class="line"> LayerType::TransposeConvolution2d</div><div class="line">}</div><div class="ttc" id="namespacearmnn_xhtml_a855293b1be0581fb61ef6a1c5b027d0f"><div class="ttname"><a href="namespacearmnn.xhtml#a855293b1be0581fb61ef6a1c5b027d0f">armnn::Dequantize</a></div><div class="ttdeci">float Dequantize(QuantizedType value, float scale, int32_t offset)</div><div class="ttdoc">Dequantize an 8-bit data type into a floating point data type. </div><div class="ttdef"><b>Definition:</b> <a href="_types_utils_8cpp_source.xhtml#l00046">TypesUtils.cpp:46</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ac245fda400649db10eed0dc96c1b5c37"><div class="ttname"><a href="namespacearmnn.xhtml#ac245fda400649db10eed0dc96c1b5c37">armnn::Stack</a></div><div class="ttdeci">void Stack(const StackQueueDescriptor &amp;data, std::vector&lt; std::unique_ptr&lt; Decoder&lt; float &gt;&gt;&gt; &amp;inputs, Encoder&lt; float &gt; &amp;output, const TensorInfo &amp;inputInfo, const TensorInfo &amp;outputInfo)</div><div class="ttdef"><b>Definition:</b> <a href="_stack_8cpp_source.xhtml#l00012">Stack.cpp:12</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ab023d9a7687e35c0f108458a094c1f56"><div class="ttname"><a href="namespacearmnn.xhtml#ab023d9a7687e35c0f108458a094c1f56">armnn::DepthToSpace</a></div><div class="ttdeci">void DepthToSpace(const TensorInfo &amp;inputInfo, const DepthToSpaceDescriptor &amp;descriptor, const void *inputData, void *outputData, unsigned int dataTypeSize)</div><div class="ttdef"><b>Definition:</b> <a href="backends_2reference_2workloads_2_depth_to_space_8cpp_source.xhtml#l00018">DepthToSpace.cpp:18</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad441be836a142e8935e0413f4a22c9ec"><div class="ttname"><a href="namespacearmnn.xhtml#ad441be836a142e8935e0413f4a22c9ec">armnn::ArgMinMax</a></div><div class="ttdeci">void ArgMinMax(Decoder&lt; float &gt; &amp;in, OUT *out, const TensorInfo &amp;inputTensorInfo, const TensorInfo &amp;outputTensorInfo, ArgMinMaxFunction function, int axis)</div><div class="ttdef"><b>Definition:</b> <a href="backends_2reference_2workloads_2_arg_min_max_8cpp_source.xhtml#l00016">ArgMinMax.cpp:16</a></div></div>
+<div class="ttc" id="namespacearmnn_utils_xhtml_af3c74017185773dd61d8ca6662d65d43"><div class="ttname"><a href="namespacearmnn_utils.xhtml#af3c74017185773dd61d8ca6662d65d43">armnnUtils::Permute</a></div><div class="ttdeci">void Permute(const armnn::TensorShape &amp;dstShape, const armnn::PermutationVector &amp;mappings, const void *src, void *dst, size_t dataTypeSize)</div><div class="ttdef"><b>Definition:</b> <a href="_permute_8cpp_source.xhtml#l00131">Permute.cpp:131</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a38c9c1724b660b2558a19895b681a8fb"><div class="ttname"><a href="namespacearmnn.xhtml#a38c9c1724b660b2558a19895b681a8fb">armnn::Gather</a></div><div class="ttdeci">void Gather(const TensorInfo &amp;paramsInfo, const TensorInfo &amp;indicesInfo, const TensorInfo &amp;outputInfo, Decoder&lt; float &gt; &amp;params, const int32_t *indices, Encoder&lt; float &gt; &amp;output, const int32_t axis)</div><div class="ttdef"><b>Definition:</b> <a href="backends_2reference_2workloads_2_gather_8cpp_source.xhtml#l00017">Gather.cpp:17</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad773a034fb9983e15f3094b4c5c7c30c"><div class="ttname"><a href="namespacearmnn.xhtml#ad773a034fb9983e15f3094b4c5c7c30c">armnn::Quantize</a></div><div class="ttdeci">QuantizedType Quantize(float value, float scale, int32_t offset)</div><div class="ttdoc">Quantize a floating point data type into an 8-bit data type. </div><div class="ttdef"><b>Definition:</b> <a href="_types_utils_8cpp_source.xhtml#l00030">TypesUtils.cpp:30</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ae2e93e304cf516841c521e3eaee025cd"><div class="ttname"><a href="namespacearmnn.xhtml#ae2e93e304cf516841c521e3eaee025cd">armnn::Pooling2d</a></div><div class="ttdeci">void Pooling2d(Decoder&lt; float &gt; &amp;rInputDecoder, Encoder&lt; float &gt; &amp;rOutputEncoder, const TensorInfo &amp;inputInfo, const TensorInfo &amp;outputInfo, const Pooling2dDescriptor &amp;params)</div><div class="ttdoc">Computes the Pooling2d operation. </div><div class="ttdef"><b>Definition:</b> <a href="_pooling2d_8cpp_source.xhtml#l00142">Pooling2d.cpp:142</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a435f9350a94adfbb0d5b9abb5f430914"><div class="ttname"><a href="namespacearmnn.xhtml#a435f9350a94adfbb0d5b9abb5f430914">armnn::FullyConnected</a></div><div class="ttdeci">void FullyConnected(const TensorShape &amp;rInputShape, Decoder&lt; float &gt; &amp;rInputDecoder, const TensorShape &amp;rOutputShape, Encoder&lt; float &gt; &amp;rOutputEncoder, const TensorShape &amp;rWeightsShape, Decoder&lt; float &gt; &amp;rWeightDecoder, Decoder&lt; float &gt; *pBiasDecoder, const bool biasEnabled, const unsigned int K, const bool transposeWeights)</div><div class="ttdoc">Performs a matrix multiplication and optionally adds a bias. </div><div class="ttdef"><b>Definition:</b> <a href="backends_2reference_2workloads_2_fully_connected_8cpp_source.xhtml#l00015">FullyConnected.cpp:15</a></div></div>
+</div><!-- fragment -->
+<p class="definition">Definition at line <a class="el" href="_neon_tensor_handle_factory_8hpp_source.xhtml#l00016">16</a> of file <a class="el" href="_neon_tensor_handle_factory_8hpp_source.xhtml">NeonTensorHandleFactory.hpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_neon_tensor_handle_factory_8cpp_source.xhtml#l00120">NeonTensorHandleFactory::GetCapabilities()</a>.</p>
+
+</div>
+</div>
+<a id="acb96b901eccb58267042c6bb7d41185f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acb96b901eccb58267042c6bb7d41185f">&#9670;&nbsp;</a></span>tl_Profiler</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">thread_local <a class="el" href="classarmnn_1_1_i_profiler.xhtml">IProfiler</a>* tl_Profiler = nullptr</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_profiling_8cpp_source.xhtml#l00566">566</a> of file <a class="el" href="_profiling_8cpp_source.xhtml">Profiling.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_profiling_8cpp_source.xhtml#l00580">ProfilerManager::GetProfiler()</a>.</p>
+
+</div>
+</div>
+<a id="aa2b4a5cd5b7f1555cba80a6072824024"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa2b4a5cd5b7f1555cba80a6072824024">&#9670;&nbsp;</a></span>wordSize</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">constexpr size_t wordSize = sizeof(size_t) * 8</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_single_axis_priority_list_8cpp_source.xhtml#l00022">22</a> of file <a class="el" href="_single_axis_priority_list_8cpp_source.xhtml">SingleAxisPriorityList.cpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_single_axis_priority_list_8cpp_source.xhtml#l00028">SingleAxisPriorityList::GetMemBlockStrategyType()</a>.</p>
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="navelem"><a class="el" href="namespacearmnn.xhtml">armnn</a></li>
+ <li class="footer">Generated on Wed Mar 9 2022 12:01:14 for ArmNN by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>