aboutsummaryrefslogtreecommitdiff
path: root/23.02/namespacearmnn.xhtml
diff options
context:
space:
mode:
authorDavid Monahan <david.monahan@arm.com>2023-03-22 16:48:58 +0000
committerDavid Monahan <david.monahan@arm.com>2023-03-22 16:48:58 +0000
commitae050524109f1ce827962665436ef7430f2ac479 (patch)
treea087fe0c77570971dd7979f2757426c24e91afc7 /23.02/namespacearmnn.xhtml
parent8d2ca734165a068478df7cffa46185680b05cd20 (diff)
downloadarmnn-ae050524109f1ce827962665436ef7430f2ac479.tar.gz
IVGCVSW-7255 Update Doxygen Documentation and publish on GitHub.
* Updating Doxygen documentation for 23.02 release. Signed-off-by: David Monahan <david.monahan@arm.com> Change-Id: I545574ff7664b4595d2fe6a91a3c35d2ad55df82
Diffstat (limited to '23.02/namespacearmnn.xhtml')
-rw-r--r--23.02/namespacearmnn.xhtml18359
1 files changed, 15186 insertions, 3173 deletions
diff --git a/23.02/namespacearmnn.xhtml b/23.02/namespacearmnn.xhtml
index 83a020e592..c63203135b 100644
--- a/23.02/namespacearmnn.xhtml
+++ b/23.02/namespacearmnn.xhtml
@@ -8,7 +8,7 @@
<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="generator" content="Doxygen 1.8.17"/>
<meta name="robots" content="NOINDEX, NOFOLLOW" />
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ArmNN: armnn Namespace Reference</title>
@@ -19,9 +19,6 @@
<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>
@@ -30,7 +27,8 @@
extensions: ["tex2jax.js"],
jax: ["input/TeX","output/HTML-CSS"],
});
-</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+</script>
+<script type="text/javascript" async="async" 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>
@@ -51,18 +49,21 @@
</table>
</div>
<!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.17 -->
<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
-</script>
+/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
@@ -76,7 +77,9 @@ $(function() {
</div>
</div>
<script type="text/javascript">
-$(document).ready(function(){initNavTree('namespacearmnn.xhtml','');});
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(document).ready(function(){initNavTree('namespacearmnn.xhtml',''); initResizable(); });
+/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
@@ -107,7 +110,7 @@ $(document).ready(function(){initNavTree('namespacearmnn.xhtml','');});
<div class="contents">
<p>Copyright (c) 2021 ARM Limited and Contributors.
-<a href="#details">More...</a></p>
+<a href="namespacearmnn.xhtml#details">More...</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="namespaces"></a>
Namespaces</h2></td></tr>
@@ -133,7 +136,7 @@ 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_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="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>
@@ -150,7 +153,7 @@ 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_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="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>
@@ -191,14 +194,14 @@ Classes</h2></td></tr>
<tr 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_mat_mul.xhtml">BatchMatMul</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_mat_mul_descriptor.xhtml">BatchMatMulDescriptor</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml" title="A BatchMatMulDescriptor for the BatchMatMul operator. ">BatchMatMulDescriptor</a> for the <a class="el" href="classarmnn_1_1_batch_mat_mul.xhtml">BatchMatMul</a> operator. <a href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml#details">More...</a><br /></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_batch_mat_mul_descriptor.xhtml" title="A BatchMatMulDescriptor for the BatchMatMul operator.">BatchMatMulDescriptor</a> for the <a class="el" href="classarmnn_1_1_batch_mat_mul.xhtml">BatchMatMul</a> operator. <a href="structarmnn_1_1_batch_mat_mul_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_mat_mul_layer.xhtml">BatchMatMulLayer</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_mat_mul_queue_descriptor.xhtml">BatchMatMulQueueDescriptor</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="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>
@@ -206,7 +209,7 @@ 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_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="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>
@@ -232,7 +235,7 @@ 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_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="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>
@@ -240,7 +243,7 @@ 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_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="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>
@@ -264,7 +267,7 @@ Classes</h2></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="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>
@@ -424,7 +427,7 @@ Classes</h2></td></tr>
<tr 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="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>
@@ -464,7 +467,7 @@ 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_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="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>
@@ -472,7 +475,7 @@ 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_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="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>
@@ -497,7 +500,7 @@ 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_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="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>
@@ -541,12 +544,12 @@ Classes</h2></td></tr>
<tr 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="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="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>
@@ -565,7 +568,7 @@ Classes</h2></td></tr>
<tr 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="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>
@@ -575,7 +578,7 @@ 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_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="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>
@@ -585,7 +588,7 @@ Classes</h2></td></tr>
<tr 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="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>
@@ -610,7 +613,7 @@ 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_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="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>
@@ -618,7 +621,7 @@ 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_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="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>
@@ -649,7 +652,7 @@ Classes</h2></td></tr>
<tr 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="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>
@@ -702,7 +705,7 @@ Classes</h2></td></tr>
<tr 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="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>
@@ -756,7 +759,7 @@ Classes</h2></td></tr>
<tr 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="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>
@@ -924,7 +927,7 @@ 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_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="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>
@@ -945,7 +948,7 @@ 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_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="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>
@@ -981,7 +984,7 @@ 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_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="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>
@@ -1050,7 +1053,7 @@ Classes</h2></td></tr>
<tr 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="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>
@@ -1199,12 +1202,12 @@ Classes</h2></td></tr>
<tr 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="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="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>
@@ -1214,14 +1217,14 @@ 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_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="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="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>
@@ -1257,7 +1260,7 @@ Classes</h2></td></tr>
<tr 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="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>
@@ -1266,7 +1269,7 @@ Classes</h2></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="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>
@@ -1276,7 +1279,7 @@ Classes</h2></td></tr>
<tr 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="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>
@@ -1288,12 +1291,12 @@ Classes</h2></td></tr>
<tr 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="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="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>
@@ -1303,7 +1306,7 @@ Classes</h2></td></tr>
<tr 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="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>
@@ -1311,7 +1314,7 @@ 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_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="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>
@@ -1319,7 +1322,7 @@ 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_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="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>
@@ -1349,7 +1352,7 @@ 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_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="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>
@@ -1407,7 +1410,7 @@ 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_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="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>
@@ -1543,7 +1546,7 @@ Classes</h2></td></tr>
<tr 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="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>
@@ -1551,7 +1554,7 @@ 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_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 <a class="el" href="structarmnn_1_1_resize_descriptor.xhtml" title="A ResizeDescriptor for the ResizeLayer. ">ResizeDescriptor</a> for the <a class="el" href="classarmnn_1_1_resize_layer.xhtml" title="This layer represents a resize operation. ">ResizeLayer</a>. <a href="structarmnn_1_1_resize_descriptor.xhtml#details">More...</a><br /></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="structarmnn_1_1_resize_descriptor.xhtml" title="A ResizeDescriptor for the ResizeLayer.">ResizeDescriptor</a> for the <a class="el" href="classarmnn_1_1_resize_layer.xhtml" title="This layer represents a resize operation.">ResizeLayer</a>. <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>
@@ -1620,14 +1623,14 @@ Classes</h2></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="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="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>
@@ -1635,7 +1638,7 @@ 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_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="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>
@@ -1643,7 +1646,7 @@ 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_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="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>
@@ -1658,7 +1661,7 @@ 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_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="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>
@@ -1668,7 +1671,7 @@ Classes</h2></td></tr>
<tr 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="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>
@@ -1681,7 +1684,7 @@ Classes</h2></td></tr>
<tr 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="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>
@@ -1689,7 +1692,7 @@ 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_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="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>
@@ -1765,7 +1768,7 @@ Classes</h2></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="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>
@@ -1824,7 +1827,7 @@ Classes</h2></td></tr>
<tr 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="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>
@@ -1832,7 +1835,7 @@ 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_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="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>
@@ -1866,7 +1869,7 @@ Classes</h2></td></tr>
<tr 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="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">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>
@@ -1945,17 +1948,17 @@ Typedefs</h2></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="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="namespacearmnn.xhtml#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="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="namespacearmnn.xhtml#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="memdesc:a003d213dd28b0b8c0f26fbf268ccb975"><td class="mdescLeft">&#160;</td><td class="mdescRight">MergerDescriptor is deprecated, use ConcatDescriptor instead. <a href="namespacearmnn.xhtml#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>
@@ -1972,7 +1975,7 @@ Typedefs</h2></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="memdesc:a2d3a708a26ac6d77bf8f15506e89a25a"><td class="mdescLeft">&#160;</td><td class="mdescRight">The following API is replaced by the backend options API. <a href="namespacearmnn.xhtml#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>
@@ -1987,17 +1990,17 @@ Typedefs</h2></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="memdesc:ab8cf8f9fb6792e654c2d8d8382f6f01b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Type of identifiers for bindable layers (inputs, outputs). <a href="namespacearmnn.xhtml#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: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="_types_8hpp.xhtml#af22094b802160f09f7c89ad9eee10084">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="memdesc:a15f3ad9b5e4e3d46b0a6dda246a7bc28"><td class="mdescLeft">&#160;</td><td class="mdescRight">Define the type of callback for the Debug layer to call. <a href="namespacearmnn.xhtml#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="memdesc:a4b3cb628c15e1eea1b09ec848e9ae8c4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Define a timer and associated inference ID for recording execution times. <a href="namespacearmnn.xhtml#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>
@@ -2108,14 +2111,14 @@ Enumerations</h2></td></tr>
<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>
+ }</td></tr>
+<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>
<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>
+ }</td></tr>
+<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>
<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>,
@@ -2136,8 +2139,7 @@ Enumerations</h2></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>
+ }</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,
@@ -2164,8 +2166,8 @@ Enumerations</h2></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>
+ }</td></tr>
+<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>
<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,
@@ -2248,14 +2250,14 @@ Enumerations</h2></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>
+ }</td></tr>
+<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>
<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>
+ }</td></tr>
+<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>
<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
@@ -2271,8 +2273,8 @@ Enumerations</h2></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>
+ }</td></tr>
+<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>
<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,
@@ -2282,8 +2284,8 @@ Enumerations</h2></td></tr>
<br />
&#160;&#160;<a class="el" href="namespacearmnn.xhtml#a14fcd7f88d11cea0a018269dca5f9277a4bafe7f8ad22a8eca972a7ac5eb6702e">Gralloc</a> = 8
<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>
+ }</td></tr>
+<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>
<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
@@ -2291,8 +2293,8 @@ Enumerations</h2></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>
+ }</td></tr>
+<tr class="memdesc:ab24d74259a053475f6040dd701a01952"><td class="mdescLeft">&#160;</td><td class="mdescRight">BackendCapability class. <a href="namespacearmnn.xhtml#ab24d74259a053475f6040dd701a01952">More...</a><br /></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>,
@@ -2389,8 +2391,8 @@ Enumerations</h2></td></tr>
<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4ae66a93a31fb93839c8369265cd44695c">FirstLayer</a> = Activation,
<a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a33cae35d37c1b558ecd35dd5e37dd80f">LastLayer</a> = BatchMatMul
<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>
+ }</td></tr>
+<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>
<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>,
@@ -2422,40 +2424,40 @@ Enumerations</h2></td></tr>
<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="memdesc:a6d9d90e2ace1cd49789835b0073196a3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convenience function to retrieve the ILayerSupportHandle for a backend. <a href="namespacearmnn.xhtml#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="memdesc:abd839f0f103c1ae19a4b38d59b869108"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convenience function to check if a capability exists in a BackendCapabilites struct. <a href="namespacearmnn.xhtml#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="memdesc:a8439e8b224a1fb7abdf449c8e6775469"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convenience function to check if a capability exists in a backend. <a href="namespacearmnn.xhtml#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="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="namespacearmnn.xhtml#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="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="namespacearmnn.xhtml#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="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="namespacearmnn.xhtml#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="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="namespacearmnn.xhtml#a8d70f94d3f0ffb06067a66c49b2f8689">More...</a><br /></td></tr>
<tr class="separator:a8d70f94d3f0ffb06067a66c49b2f8689"><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="memdesc:ae266ee8bf362cbf8a88ab6e6b389791a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the number of cached files if backend supports caching. <a href="namespacearmnn.xhtml#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="memdesc:a6bab17bfd45c2fa4592c431bc25ad10e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated function that will be removed together with the Compute enum. <a href="namespacearmnn.xhtml#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="memdesc:a5b0313cb554380d6e4dfb24c31f9e605"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated function that will be removed together with the Compute enum. <a href="namespacearmnn.xhtml#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="memdesc:a127a59fdf5e6d2fa74f87f9265de958b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated function that will be removed together with the Compute enum. <a href="namespacearmnn.xhtml#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="memdesc:a345acf4e0dc087eee3f9688029ee6328"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated function that will be removed together with the Compute enum. <a href="namespacearmnn.xhtml#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>
@@ -2481,7 +2483,7 @@ Functions</h2></td></tr>
<tr class="separator:a872803f5667392efc3c8e5607bd453ad"><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="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="namespacearmnn.xhtml#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>
@@ -2491,157 +2493,157 @@ Functions</h2></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="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="namespacearmnn.xhtml#ae57b7f9e2cb7080bf10b28d1f72b558e">More...</a><br /></td></tr>
<tr class="separator:ae57b7f9e2cb7080bf10b28d1f72b558e"><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:a25ff4c2830094e33a67f0963a3e4b24c"><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#a25ff4c2830094e33a67f0963a3e4b24c">Optimize</a> (const <a class="el" href="classarmnn_1_1_graph.xhtml">Graph</a> &amp;inGraph, 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="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:a25ff4c2830094e33a67f0963a3e4b24c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create an optimized version of the network. <a href="#a25ff4c2830094e33a67f0963a3e4b24c">More...</a><br /></td></tr>
-<tr class="separator:a25ff4c2830094e33a67f0963a3e4b24c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2783360b253135639f4c63cfcaed6d48"><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#a2783360b253135639f4c63cfcaed6d48">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:a2783360b253135639f4c63cfcaed6d48"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create an optimized version of the network. <a href="namespacearmnn.xhtml#a2783360b253135639f4c63cfcaed6d48">More...</a><br /></td></tr>
+<tr class="separator:a2783360b253135639f4c63cfcaed6d48"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4c79e02d43c1fac7d2f073663ef9ca5d"><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#a4c79e02d43c1fac7d2f073663ef9ca5d">Optimize</a> (const <a class="el" href="classarmnn_1_1_graph.xhtml">Graph</a> &amp;inGraph, 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="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:a4c79e02d43c1fac7d2f073663ef9ca5d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create an optimized version of the network. <a href="namespacearmnn.xhtml#a4c79e02d43c1fac7d2f073663ef9ca5d">More...</a><br /></td></tr>
+<tr class="separator:a4c79e02d43c1fac7d2f073663ef9ca5d"><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="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="namespacearmnn.xhtml#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="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="namespacearmnn.xhtml#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="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="namespacearmnn.xhtml#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="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="namespacearmnn.xhtml#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:ac8b3d64c6b38fe4bc59bd05959577fb6"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ac8b3d64c6b38fe4bc59bd05959577fb6">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:ac8b3d64c6b38fe4bc59bd05959577fb6"><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="namespacearmnn.xhtml#ac8b3d64c6b38fe4bc59bd05959577fb6">More...</a><br /></td></tr>
+<tr class="separator:ac8b3d64c6b38fe4bc59bd05959577fb6"><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="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="namespacearmnn.xhtml#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="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="namespacearmnn.xhtml#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="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="namespacearmnn.xhtml#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="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="namespacearmnn.xhtml#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="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="namespacearmnn.xhtml#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="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="namespacearmnn.xhtml#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="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="namespacearmnn.xhtml#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="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="namespacearmnn.xhtml#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="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="namespacearmnn.xhtml#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="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="namespacearmnn.xhtml#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="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="namespacearmnn.xhtml#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="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="namespacearmnn.xhtml#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="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="namespacearmnn.xhtml#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="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="namespacearmnn.xhtml#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="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="namespacearmnn.xhtml#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="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="namespacearmnn.xhtml#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="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="namespacearmnn.xhtml#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="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="namespacearmnn.xhtml#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="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="namespacearmnn.xhtml#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="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="namespacearmnn.xhtml#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="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="namespacearmnn.xhtml#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="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="namespacearmnn.xhtml#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="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="namespacearmnn.xhtml#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="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="namespacearmnn.xhtml#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="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="namespacearmnn.xhtml#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="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="namespacearmnn.xhtml#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="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="namespacearmnn.xhtml#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="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="namespacearmnn.xhtml#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="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="namespacearmnn.xhtml#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="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="namespacearmnn.xhtml#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="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="namespacearmnn.xhtml#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="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="namespacearmnn.xhtml#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="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="namespacearmnn.xhtml#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="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="namespacearmnn.xhtml#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="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="namespacearmnn.xhtml#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="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="namespacearmnn.xhtml#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="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="namespacearmnn.xhtml#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="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="namespacearmnn.xhtml#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:a1ef301853035778cebf30782cae7b86d"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a1ef301853035778cebf30782cae7b86d">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:a1ef301853035778cebf30782cae7b86d"><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="namespacearmnn.xhtml#a1ef301853035778cebf30782cae7b86d">More...</a><br /></td></tr>
+<tr class="separator:a1ef301853035778cebf30782cae7b86d"><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="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="namespacearmnn.xhtml#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="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="namespacearmnn.xhtml#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="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="namespacearmnn.xhtml#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="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="namespacearmnn.xhtml#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>
@@ -2663,7 +2665,7 @@ Functions</h2></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="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="namespacearmnn.xhtml#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>
@@ -2695,7 +2697,7 @@ Functions</h2></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="memdesc:a65645fa03bf8cddfb9d8a9f83beeb6e8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated function that will be removed together with the Compute enum. <a href="namespacearmnn.xhtml#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>
@@ -2722,11 +2724,11 @@ Functions</h2></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="memdesc:ad773a034fb9983e15f3094b4c5c7c30c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Quantize a floating point data type into an 8-bit data type. <a href="namespacearmnn.xhtml#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="memdesc:a855293b1be0581fb61ef6a1c5b027d0f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Dequantize an 8-bit data type into a floating point data type. <a href="namespacearmnn.xhtml#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>
@@ -2762,11 +2764,11 @@ Functions</h2></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="memdesc:aa4e89c644c511e255f6a7ecbd5d14686"><td class="mdescLeft">&#160;</td><td class="mdescRight">Polymorphic downcast for build in pointers only. <a href="namespacearmnn.xhtml#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="memdesc:a6baab222db3195a0bd77f488a81fd316"><td class="mdescLeft">&#160;</td><td class="mdescRight">Polymorphic downcast for shared pointers and build in pointers. <a href="namespacearmnn.xhtml#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>
@@ -2776,7 +2778,7 @@ Functions</h2></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="memdesc:aa59f7a819c3e29d10ffc41e5c0616872"><td class="mdescLeft">&#160;</td><td class="mdescRight">Configures the logging behaviour of the ARMNN library. <a href="namespacearmnn.xhtml#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>
@@ -2793,260 +2795,260 @@ Functions</h2></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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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:a317945cbed8d24f155e43d976a355c14"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a317945cbed8d24f155e43d976a355c14"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a317945cbed8d24f155e43d976a355c14"><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#a317945cbed8d24f155e43d976a355c14">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_batch_mat_mul_layer.xhtml">BatchMatMulLayer</a> *)</td></tr>
<tr class="separator:a317945cbed8d24f155e43d976a355c14"><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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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:a4471d39d8390fc550c1f8688639e66f5"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:a4471d39d8390fc550c1f8688639e66f5"><td class="memItemLeft" align="right" valign="top">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:af8df06bed5f1257864645e45948afa5c"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:af8df06bed5f1257864645e45948afa5c"><td class="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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:af786ed151cee66263c0ce890d11d15c9"><td class="memTemplParams" colspan="2">template&lt;&gt; </td></tr>
+<tr class="memitem:af786ed151cee66263c0ce890d11d15c9"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:af786ed151cee66263c0ce890d11d15c9"><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#af786ed151cee66263c0ce890d11d15c9">LayerEnumOf</a> (const <a class="el" href="classarmnn_1_1_gather_nd_layer.xhtml">GatherNdLayer</a> *)</td></tr>
<tr class="separator:af786ed151cee66263c0ce890d11d15c9"><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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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:a8c88a8a91827e9ccc3cf3ce6b14fcd17"><td class="memTemplParams" colspan="2">template&lt;typename T , typename V &gt; </td></tr>
+<tr class="memitem:a8c88a8a91827e9ccc3cf3ce6b14fcd17"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a8c88a8a91827e9ccc3cf3ce6b14fcd17">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:a8c88a8a91827e9ccc3cf3ce6b14fcd17"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a23a5267702f036fe70a34f91e6c07490"><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:a23a5267702f036fe70a34f91e6c07490"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a23a5267702f036fe70a34f91e6c07490">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:a23a5267702f036fe70a34f91e6c07490"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1c60a2624c7cabd60237bbeec07c70a0"><td class="memTemplParams" colspan="2">template&lt;typename ... Params&gt; </td></tr>
+<tr class="memitem:a1c60a2624c7cabd60237bbeec07c70a0"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a1c60a2624c7cabd60237bbeec07c70a0">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:a1c60a2624c7cabd60237bbeec07c70a0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a589f726622788501df0463460dac63c1"><td class="memTemplParams" colspan="2">template&lt;typename ... Params&gt; </td></tr>
+<tr class="memitem:a589f726622788501df0463460dac63c1"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a589f726622788501df0463460dac63c1">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:a589f726622788501df0463460dac63c1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9b083e0201523891e08a2d86405c4e46"><td class="memTemplParams" colspan="2">template&lt;typename ... Params&gt; </td></tr>
+<tr class="memitem:a9b083e0201523891e08a2d86405c4e46"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a9b083e0201523891e08a2d86405c4e46">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:a9b083e0201523891e08a2d86405c4e46"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5b1231d5607d2dc1909c1cec828ba415"><td class="memTemplParams" colspan="2">template&lt;typename ... Params&gt; </td></tr>
+<tr class="memitem:a5b1231d5607d2dc1909c1cec828ba415"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a5b1231d5607d2dc1909c1cec828ba415">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:a5b1231d5607d2dc1909c1cec828ba415"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae5039794f89bfaf2ebbe28fd35a815cf"><td class="memTemplParams" colspan="2">template&lt;typename ... Params&gt; </td></tr>
+<tr class="memitem:ae5039794f89bfaf2ebbe28fd35a815cf"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ae5039794f89bfaf2ebbe28fd35a815cf">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:ae5039794f89bfaf2ebbe28fd35a815cf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7560a9e76988007d33039df264aeed3f"><td class="memTemplParams" colspan="2">template&lt;typename ... Params&gt; </td></tr>
+<tr class="memitem:a7560a9e76988007d33039df264aeed3f"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a7560a9e76988007d33039df264aeed3f">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:a7560a9e76988007d33039df264aeed3f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a59aa54d3652ffbef6793f6447314cbd0"><td class="memTemplParams" colspan="2">template&lt;typename ... Params&gt; </td></tr>
+<tr class="memitem:a59aa54d3652ffbef6793f6447314cbd0"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a59aa54d3652ffbef6793f6447314cbd0">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:a59aa54d3652ffbef6793f6447314cbd0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8cd64bd8701401fe3dda7eab78011d8a"><td class="memTemplParams" colspan="2">template&lt;typename ... Params&gt; </td></tr>
+<tr class="memitem:a8cd64bd8701401fe3dda7eab78011d8a"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a8cd64bd8701401fe3dda7eab78011d8a">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:a8cd64bd8701401fe3dda7eab78011d8a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a55cbb728001f752173f5d4e34a874e83"><td class="memTemplParams" colspan="2">template&lt;typename ... Params&gt; </td></tr>
+<tr class="memitem:a55cbb728001f752173f5d4e34a874e83"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a55cbb728001f752173f5d4e34a874e83">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:a55cbb728001f752173f5d4e34a874e83"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abc2b8312f25f2daa3cc277f1307b2067"><td class="memTemplParams" colspan="2">template&lt;typename ... Params&gt; </td></tr>
+<tr class="memitem:abc2b8312f25f2daa3cc277f1307b2067"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#abc2b8312f25f2daa3cc277f1307b2067">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:abc2b8312f25f2daa3cc277f1307b2067"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a52928589effc0b9cbb170a93ea792d47"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a52928589effc0b9cbb170a93ea792d47">ValidateSourcesMatchOptimizedNetwork</a> (std::vector&lt; <a class="el" href="structarmnn_1_1_backend_options.xhtml">BackendOptions</a> &gt; optimizedOptions, const <a class="el" href="structarmnn_1_1_i_network_properties.xhtml">INetworkProperties</a> &amp;networkProperties)</td></tr>
-<tr class="memdesc:a52928589effc0b9cbb170a93ea792d47"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function performs a sanity check to ensure that the combination of input and output memory source matches the values for importEnabled and exportEnabled that were specified during optimization. <a href="#a52928589effc0b9cbb170a93ea792d47">More...</a><br /></td></tr>
+<tr class="memdesc:a52928589effc0b9cbb170a93ea792d47"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function performs a sanity check to ensure that the combination of input and output memory source matches the values for importEnabled and exportEnabled that were specified during optimization. <a href="namespacearmnn.xhtml#a52928589effc0b9cbb170a93ea792d47">More...</a><br /></td></tr>
<tr class="separator:a52928589effc0b9cbb170a93ea792d47"><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>
@@ -3057,30 +3059,30 @@ Functions</h2></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: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:a3cf1cee98e0ed8b54263ec7279f6ec69"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a3cf1cee98e0ed8b54263ec7279f6ec69">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:a3cf1cee98e0ed8b54263ec7279f6ec69"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a070307e9ee0f7969f7d4320145d1dddb"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a070307e9ee0f7969f7d4320145d1dddb">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:a070307e9ee0f7969f7d4320145d1dddb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aeee4e55e6ad4fe12b2168f9fd1e88141"><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#aeee4e55e6ad4fe12b2168f9fd1e88141">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:aeee4e55e6ad4fe12b2168f9fd1e88141"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8bf1222ae8931bf663fa076b3e3b6f0e"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a8bf1222ae8931bf663fa076b3e3b6f0e">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:a8bf1222ae8931bf663fa076b3e3b6f0e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abd660675ae5a9df777dcdb30c50224f6"><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#abd660675ae5a9df777dcdb30c50224f6">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:abd660675ae5a9df777dcdb30c50224f6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2b8ec686784330e8f20e4444f1ed7e98"><td class="memItemLeft" align="right" valign="top">std::vector&lt; <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a2b8ec686784330e8f20e4444f1ed7e98">GetLayerInOutDatatype</a> (const <a class="el" href="classarmnn_1_1_layer.xhtml">Layer</a> *layer)</td></tr>
<tr class="separator:a2b8ec686784330e8f20e4444f1ed7e98"><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:af52a698836d638d0a71263c6c1496a05"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#af52a698836d638d0a71263c6c1496a05">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:af52a698836d638d0a71263c6c1496a05"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a839ad76f1f52a70b540805b231f05d9c"><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#a839ad76f1f52a70b540805b231f05d9c">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:a839ad76f1f52a70b540805b231f05d9c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4a0c704ab68e6741579b60b681e5d919"><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#a4a0c704ab68e6741579b60b681e5d919">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:a4a0c704ab68e6741579b60b681e5d919"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0ea4ff80d0075ff847e96dc12e734368"><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#a0ea4ff80d0075ff847e96dc12e734368">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:a0ea4ff80d0075ff847e96dc12e734368"><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:ac39f2b15d34d3e2fc74d586fc3e26231"><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#ac39f2b15d34d3e2fc74d586fc3e26231">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:ac39f2b15d34d3e2fc74d586fc3e26231"><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>
@@ -3091,8 +3093,8 @@ Functions</h2></td></tr>
<tr class="separator:ad52508167694d6d259525b3eec1a4267"><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:abdde0870cf702c8284c9693c68093fd3"><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#abdde0870cf702c8284c9693c68093fd3">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, bool exportEnabled, <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:abdde0870cf702c8284c9693c68093fd3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acbf7c9a630f03ece800f807d946239ab"><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#acbf7c9a630f03ece800f807d946239ab">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, bool exportEnabled, <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:acbf7c9a630f03ece800f807d946239ab"><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: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>
@@ -3122,8 +3124,8 @@ Functions</h2></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:a7d4e24d8e296ccced976d626e08b742a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a7d4e24d8e296ccced976d626e08b742a">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:a7d4e24d8e296ccced976d626e08b742a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2386397752b62040e3b0647e8bc4dc70"><td class="memTemplParams" colspan="2">template&lt;typename DescriptorType &gt; </td></tr>
<tr class="memitem:a2386397752b62040e3b0647e8bc4dc70"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a2386397752b62040e3b0647e8bc4dc70">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 arm::pipe::ProfilingGuid guid)</td></tr>
<tr class="separator:a2386397752b62040e3b0647e8bc4dc70"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -3185,9 +3187,9 @@ Functions</h2></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:abecdb9c231b9ced02bec27a1ca54184f"><td class="memTemplParams" colspan="2">template&lt;typename LayerType &gt; </td></tr>
+<tr class="memitem:abecdb9c231b9ced02bec27a1ca54184f"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#abecdb9c231b9ced02bec27a1ca54184f">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:abecdb9c231b9ced02bec27a1ca54184f"><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: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>
@@ -3224,13 +3226,13 @@ Functions</h2></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="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="namespacearmnn.xhtml#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="memdesc:aa1e65a4dea8c65b76423e121b880d059"><td class="mdescLeft">&#160;</td><td class="mdescRight">Function to convert axis to its positive equivalent value. <a href="namespacearmnn.xhtml#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="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="namespacearmnn.xhtml#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>
@@ -3239,13 +3241,13 @@ Functions</h2></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="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="namespacearmnn.xhtml#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:aa588395c0d3b0074091b497835aaa309"><td class="memTemplParams" colspan="2">template&lt;typename F &gt; </td></tr>
+<tr class="memitem:aa588395c0d3b0074091b497835aaa309"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aa588395c0d3b0074091b497835aaa309">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:aa588395c0d3b0074091b497835aaa309"><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>
@@ -3256,8 +3258,8 @@ Functions</h2></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: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="_types_8hpp.xhtml#af22094b802160f09f7c89ad9eee10084">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:a5afd10e5e84ebf5cb8cfc8707492eda7"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a5afd10e5e84ebf5cb8cfc8707492eda7">ReportUntouchedLayers</a> (<a class="el" href="classarmnn_1_1_optimization_views.xhtml">OptimizationViews</a> &amp;optimizationViews, std::map&lt; <a class="el" href="_types_8hpp.xhtml#af22094b802160f09f7c89ad9eee10084">LayerGuid</a>, <a class="el" href="classarmnn_1_1_layer.xhtml">Layer</a> * &gt; untouched)</td></tr>
+<tr class="separator:a5afd10e5e84ebf5cb8cfc8707492eda7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae4b69405416c09ee6878e01d27c9450b"><td class="memTemplParams" colspan="2">template&lt;typename LayerType &gt; </td></tr>
<tr class="memitem:ae4b69405416c09ee6878e01d27c9450b"><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#ae4b69405416c09ee6878e01d27c9450b">FoldPadLayer</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_pad_layer.xhtml">PadLayer</a> *padLayer)</td></tr>
<tr class="separator:ae4b69405416c09ee6878e01d27c9450b"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -3274,30 +3276,30 @@ Functions</h2></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="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="namespacearmnn.xhtml#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="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="namespacearmnn.xhtml#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="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="namespacearmnn.xhtml#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:ac40d3e4035af5fbe68d9e126a8d6367c"><td class="memItemLeft" align="right" valign="top">std::map&lt; std::string, unsigned int &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#ac40d3e4035af5fbe68d9e126a8d6367c">CalculateGatherNdKeyIndices</a> (<a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> inputInfo0, <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> inputInfo1)</td></tr>
-<tr class="memdesc:ac40d3e4035af5fbe68d9e126a8d6367c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculates the key index values needed for GatherNd: N, ND, K, W, C (N is always 1) <a href="#ac40d3e4035af5fbe68d9e126a8d6367c">More...</a><br /></td></tr>
+<tr class="memdesc:ac40d3e4035af5fbe68d9e126a8d6367c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculates the key index values needed for GatherNd: N, ND, K, W, C (N is always 1) <a href="namespacearmnn.xhtml#ac40d3e4035af5fbe68d9e126a8d6367c">More...</a><br /></td></tr>
<tr class="separator:ac40d3e4035af5fbe68d9e126a8d6367c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a15e2ba06d2ecd7ff6013118838e5d1be"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_permutation_vector.xhtml">armnn::PermutationVector</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a15e2ba06d2ecd7ff6013118838e5d1be">GeneratePermutationVectorOnLastTwoDimensions</a> (unsigned int rank)</td></tr>
-<tr class="memdesc:a15e2ba06d2ecd7ff6013118838e5d1be"><td class="mdescLeft">&#160;</td><td class="mdescRight">Generates a permutation vector of size rank that permutes the 2 most right dimensions. <a href="#a15e2ba06d2ecd7ff6013118838e5d1be">More...</a><br /></td></tr>
+<tr class="memdesc:a15e2ba06d2ecd7ff6013118838e5d1be"><td class="mdescLeft">&#160;</td><td class="mdescRight">Generates a permutation vector of size rank that permutes the 2 most right dimensions. <a href="namespacearmnn.xhtml#a15e2ba06d2ecd7ff6013118838e5d1be">More...</a><br /></td></tr>
<tr class="separator:a15e2ba06d2ecd7ff6013118838e5d1be"><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:a844d7fa4dde82e1c6b0606e1c68890bb"><td class="memTemplParams" colspan="2">template&lt;typename SrcTensorHandleType , typename DstTensorHandleType , typename DescriptorType &gt; </td></tr>
+<tr class="memitem:a844d7fa4dde82e1c6b0606e1c68890bb"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a844d7fa4dde82e1c6b0606e1c68890bb">GatherTensorHandlePairs</a> (const DescriptorType &amp;descriptor, std::vector&lt; std::pair&lt; SrcTensorHandleType *, DstTensorHandleType * &gt;&gt; &amp;tensorHandlePairs)</td></tr>
+<tr class="separator:a844d7fa4dde82e1c6b0606e1c68890bb"><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>
@@ -3350,8 +3352,8 @@ Functions</h2></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:a0784b1fdac2844c5d6f331ab6e9af547"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a0784b1fdac2844c5d6f331ab6e9af547">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:a0784b1fdac2844c5d6f331ab6e9af547"><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>
@@ -3446,8 +3448,8 @@ Functions</h2></td></tr>
<tr class="separator:a3ac8a60f837b19b20987e4fd238ce0cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a34e66b74a990db4b29ea4f904c69d7d9"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a34e66b74a990db4b29ea4f904c69d7d9">ClSqrtWorkloadValidate</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:a34e66b74a990db4b29ea4f904c69d7d9"><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:a776783e716aa3dd5975c72696d0b7abb"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a776783e716aa3dd5975c72696d0b7abb">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:a776783e716aa3dd5975c72696d0b7abb"><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>
@@ -3469,7 +3471,7 @@ Functions</h2></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="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 cl::Error &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>
@@ -3478,8 +3480,8 @@ Functions</h2></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:a2b49ca67b57ecb9d830213169ff5e7db"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a2b49ca67b57ecb9d830213169ff5e7db">IsLayerTypeSupported</a> (const <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> &amp;type, const std::vector&lt; <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &gt; &amp;infos, const <a class="el" href="structarmnn_1_1_base_descriptor.xhtml">BaseDescriptor</a> &amp;descriptor, const <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; <a class="el" href="structarmnn_1_1_lstm_input_params_info.xhtml">LstmInputParamsInfo</a> &gt; &amp;lstmParamsInfo, const <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; <a class="el" href="structarmnn_1_1_quantized_lstm_input_params_info.xhtml">QuantizedLstmInputParamsInfo</a> &gt; &amp;quantizedLstmParamsInfo, <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; std::string &amp;&gt; reasonIfUnsupported, const <a class="el" href="classarmnn_1_1_neon_layer_support.xhtml">NeonLayerSupport</a> &amp;support)</td></tr>
-<tr class="separator:a2b49ca67b57ecb9d830213169ff5e7db"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8c69ca5000838df92215ca5053141cf6"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a8c69ca5000838df92215ca5053141cf6">IsLayerTypeSupported</a> (const <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> &amp;type, const std::vector&lt; <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &gt; &amp;infos, const <a class="el" href="structarmnn_1_1_base_descriptor.xhtml">BaseDescriptor</a> &amp;descriptor, const <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; <a class="el" href="structarmnn_1_1_lstm_input_params_info.xhtml">LstmInputParamsInfo</a> &gt; &amp;lstmParamsInfo, const <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; <a class="el" href="structarmnn_1_1_quantized_lstm_input_params_info.xhtml">QuantizedLstmInputParamsInfo</a> &gt; &amp;quantizedLstmParamsInfo, <a class="el" href="classarmnn_1_1_optional.xhtml">Optional</a>&lt; std::string &amp; &gt; reasonIfUnsupported, const <a class="el" href="classarmnn_1_1_neon_layer_support.xhtml">NeonLayerSupport</a> &amp;support)</td></tr>
+<tr class="separator:a8c69ca5000838df92215ca5053141cf6"><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>
@@ -3502,8 +3504,8 @@ Functions</h2></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:a3653413d74a951674c88db372d217baa"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a3653413d74a951674c88db372d217baa">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:a3653413d74a951674c88db372d217baa"><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>
@@ -3551,7 +3553,7 @@ Functions</h2></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="memdesc:ab81159ebfa638af1b91fe1e8c5de1955"><td class="mdescLeft">&#160;</td><td class="mdescRight">Validate function for validating the inputs and output. <a href="namespacearmnn.xhtml#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>
@@ -3597,8 +3599,8 @@ Functions</h2></td></tr>
<tr class="separator:aab5ea316b3decb05430323d847e3a773"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5fadc539a1a3c35c4a6138bf6e970e4c"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a5fadc539a1a3c35c4a6138bf6e970e4c">NeonSqrtWorkloadValidate</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:a5fadc539a1a3c35c4a6138bf6e970e4c"><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:add549d4deb11580fc32d17fb38b309b4"><td class="memItemLeft" align="right" valign="top">arm_compute::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#add549d4deb11580fc32d17fb38b309b4">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:add549d4deb11580fc32d17fb38b309b4"><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>
@@ -3646,13 +3648,13 @@ Functions</h2></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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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="memItemLeft" align="right" valign="top">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>
@@ -3672,8 +3674,8 @@ Functions</h2></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:a83b1d61a12c9e1911c2b6d79c35ef551"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a83b1d61a12c9e1911c2b6d79c35ef551">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:a83b1d61a12c9e1911c2b6d79c35ef551"><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>
@@ -3701,15 +3703,9 @@ Functions</h2></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:a8cb12db00d6e4ab4ac5ccfa6e7a69374"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
+<tr class="memitem:a8cb12db00d6e4ab4ac5ccfa6e7a69374"><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#a8cb12db00d6e4ab4ac5ccfa6e7a69374">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:a8cb12db00d6e4ab4ac5ccfa6e7a69374"><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>
@@ -3729,20 +3725,14 @@ Functions</h2></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:a01cdb4291025316036201d689811255f"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
+<tr class="memitem:a01cdb4291025316036201d689811255f"><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#a01cdb4291025316036201d689811255f">MakeEncoder</a> (const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;info, void *data)</td></tr>
+<tr class="separator:a01cdb4291025316036201d689811255f"><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="memdesc:a88bebdfe6309aa2cd6831cfa73c296f0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates a tensor and fills it with a scalar value. <a href="namespacearmnn.xhtml#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="memdesc:a435f9350a94adfbb0d5b9abb5f430914"><td class="mdescLeft">&#160;</td><td class="mdescRight">Performs a matrix multiplication and optionally adds a bias. <a href="namespacearmnn.xhtml#a435f9350a94adfbb0d5b9abb5f430914">More...</a><br /></td></tr>
<tr class="separator:a435f9350a94adfbb0d5b9abb5f430914"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4f1a1b88b01d8dfda3803776e0778a49"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a4f1a1b88b01d8dfda3803776e0778a49">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_int)</td></tr>
<tr class="separator:a4f1a1b88b01d8dfda3803776e0778a49"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -3757,10 +3747,10 @@ Functions</h2></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="memdesc:ae2e93e304cf516841c521e3eaee025cd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes the Pooling2d operation. <a href="namespacearmnn.xhtml#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="memdesc:a69acbef24cd1cc572b93fc3e1e6ac030"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes the Pooling3d operation. <a href="namespacearmnn.xhtml#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>
@@ -3776,7 +3766,7 @@ Functions</h2></td></tr>
<tr class="separator:a3f8e72f86ecaf365978a993127ea5957"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa815fde54f6d8e8aa5b4f0301cf4178b"><td class="memTemplParams" colspan="2">template&lt;typename TensorHandleType = RefTensorHandle&gt; </td></tr>
<tr class="memitem:aa815fde54f6d8e8aa5b4f0301cf4178b"><td class="memTemplItemLeft" align="right" valign="top">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#aa815fde54f6d8e8aa5b4f0301cf4178b">GetTensorInfo</a> (const <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a> *tensorHandle)</td></tr>
-<tr class="memdesc:aa815fde54f6d8e8aa5b4f0301cf4178b"><td class="mdescLeft">&#160;</td><td class="mdescRight">float32 helpers <a href="#aa815fde54f6d8e8aa5b4f0301cf4178b">More...</a><br /></td></tr>
+<tr class="memdesc:aa815fde54f6d8e8aa5b4f0301cf4178b"><td class="mdescLeft">&#160;</td><td class="mdescRight">float32 helpers <a href="namespacearmnn.xhtml#aa815fde54f6d8e8aa5b4f0301cf4178b">More...</a><br /></td></tr>
<tr class="separator:aa815fde54f6d8e8aa5b4f0301cf4178b"><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>
@@ -3804,7 +3794,7 @@ Functions</h2></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="memdesc:a4144d7535639c617fca0d095379493f0"><td class="mdescLeft">&#160;</td><td class="mdescRight">u8 helpers <a href="namespacearmnn.xhtml#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>
@@ -3816,7 +3806,7 @@ Functions</h2></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="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="namespacearmnn.xhtml#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>
@@ -3824,11 +3814,11 @@ Functions</h2></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:a3e6cbdbfb81dbcea27d219a6553838dc"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a3e6cbdbfb81dbcea27d219a6553838dc">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:a3e6cbdbfb81dbcea27d219a6553838dc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0fdab6fc39d90c5beea97f4ca0a584c4"><td class="memTemplParams" colspan="2">template&lt;typename DataType &gt; </td></tr>
+<tr class="memitem:a0fdab6fc39d90c5beea97f4ca0a584c4"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacearmnn.xhtml#a0fdab6fc39d90c5beea97f4ca0a584c4">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:a0fdab6fc39d90c5beea97f4ca0a584c4"><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>
@@ -3850,10 +3840,10 @@ 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="memdesc:a602ddc6408c3347ba4c1eba623003984"><td class="mdescLeft">&#160;</td><td class="mdescRight">The lowest performance data capture interval we support is 10 miliseconds. <a href="namespacearmnn.xhtml#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="memdesc:a61d2390e44601830cdc9b400b9910bbf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Variable to control expire rate of priority queue. <a href="namespacearmnn.xhtml#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>
@@ -4190,7 +4180,7 @@ Variables</h2></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>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#l01046">1046</a> of file <a class="el" href="_descriptors_8hpp_source.xhtml">Descriptors.hpp</a>.</p>
@@ -4726,7 +4716,7 @@ Variables</h2></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>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#l00176">176</a> of file <a class="el" href="_descriptors_8hpp_source.xhtml">Descriptors.hpp</a>.</p>
@@ -5507,18 +5497,20 @@ Variables</h2></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00086">86</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</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#a56297e0f7b215eea46c818cb7528d9eaa21eebb164e4b8b9bcf64fdb4d8d5dff4">Sigmoid</a> = 0,</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa23b68da1de2b77d74da9da2635722a3e">TanH</a> = 1,</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa32a843da6ea40ab3b17a3421ccdf671b">Linear</a> = 2,</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa3d90c0a5ab3fcf8e6f6608cb3d3a1559">ReLu</a> = 3,</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</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="l00093"></a><span class="lineno"> 93</span>&#160;<span class="comment"></span> <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa6bba7052636d1740303b1b2ef3b53fef">SoftReLu</a> = 5,</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaacb7667f5ec2f6e8a5943b781ba6c2735">LeakyReLu</a> = 6,</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa1e34af023adeb7d5f484f8eb4b9826b6">Abs</a> = 7,</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaaae77f3ad25595e35b327334d89410054">Sqrt</a> = 8,</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaaceb46ca115d05c51aa5a16a8867c3304">Square</a> = 9,</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaaed67cf7d54c570e4c4891800f085f41d">Elu</a> = 10,</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa0877e5b3fbe9d7569df6399609ed0186">HardSwish</a> = 11</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</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 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#a56297e0f7b215eea46c818cb7528d9eaa21eebb164e4b8b9bcf64fdb4d8d5dff4">Sigmoid</a> = 0,</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa23b68da1de2b77d74da9da2635722a3e">TanH</a> = 1,</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa32a843da6ea40ab3b17a3421ccdf671b">Linear</a> = 2,</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa3d90c0a5ab3fcf8e6f6608cb3d3a1559">ReLu</a> = 3,</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</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="l00093"></a><span class="lineno"> 93</span>&#160;<span class="comment"></span> <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa6bba7052636d1740303b1b2ef3b53fef">SoftReLu</a> = 5,</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaacb7667f5ec2f6e8a5943b781ba6c2735">LeakyReLu</a> = 6,</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa1e34af023adeb7d5f484f8eb4b9826b6">Abs</a> = 7,</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaaae77f3ad25595e35b327334d89410054">Sqrt</a> = 8,</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaaceb46ca115d05c51aa5a16a8867c3304">Square</a> = 9,</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaaed67cf7d54c570e4c4891800f085f41d">Elu</a> = 10,</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa0877e5b3fbe9d7569df6399609ed0186">HardSwish</a> = 11</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
@@ -5547,8 +5539,10 @@ Variables</h2></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00102">102</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</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#ae7e8cbf71db6a490789ca6dcaa8deeaea78d811e98514cd165dda532286610fd2">Min</a> = 0,</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <a class="code" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea6a061313d22e51e0f25b7cd4dc065233">Max</a> = 1</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</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 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#ae7e8cbf71db6a490789ca6dcaa8deeaea78d811e98514cd165dda532286610fd2">Min</a> = 0,</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <a class="code" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea6a061313d22e51e0f25b7cd4dc065233">Max</a> = 1</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
@@ -5581,8 +5575,17 @@ Variables</h2></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00267">267</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
-<div class="fragment"><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; : uint32_t</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160;{<span class="comment"></span></div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;<span class="comment"> /// Constant weights can be accessed through the descriptors,</span></div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;<span class="comment"> /// On the other hand, non-const weights can be accessed through inputs.</span></div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160;<span class="comment"></span> <a class="code" href="namespacearmnn.xhtml#ab24d74259a053475f6040dd701a01952a0be89c9a624a5de3925150e3cd476245">NonConstWeights</a>,</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160;<span class="comment"> /// Asynchronous Execution.</span></div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160;<span class="comment"></span> <a class="code" href="namespacearmnn.xhtml#ab24d74259a053475f6040dd701a01952ac7fdc1b70472b8558fdba30db193d58f">AsyncExecution</a>,</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">// add new enum values here</span></div><div class="line"><a name="l00277"></a><span class="lineno"> 277</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 class="fragment"><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; : uint32_t</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160;{<span class="comment"></span></div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;<span class="comment"> /// Constant weights can be accessed through the descriptors,</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;<span class="comment"> /// On the other hand, non-const weights can be accessed through inputs.</span></div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160;<span class="comment"></span> <a class="code" href="namespacearmnn.xhtml#ab24d74259a053475f6040dd701a01952a0be89c9a624a5de3925150e3cd476245">NonConstWeights</a>,</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;<span class="comment"></span> </div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160;<span class="comment"> /// Asynchronous Execution.</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160;<span class="comment"></span> <a class="code" href="namespacearmnn.xhtml#ab24d74259a053475f6040dd701a01952ac7fdc1b70472b8558fdba30db193d58f">AsyncExecution</a>,</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">// add new enum values here</span></div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
@@ -5615,12 +5618,14 @@ Variables</h2></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_logging_8hpp_source.xhtml#l00196">196</a> of file <a class="el" href="_logging_8hpp_source.xhtml">Logging.hpp</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; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407a04a75036e9d520bb983c5ed03b8d0182">trace</a>,</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407aad42f6697b035b7580e4fef93be20b4d">debug</a>,</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>,</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407a7b83d3f08fa392b79e3f553b585971cd">warning</a>,</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acb5e100e5a9a3e7f6d1fd97512215282">error</a>,</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407adf6402fd9ecc60f5a2159fdf45711cd4">fatal</a></div><div class="line"><a name="l00204"></a><span class="lineno"> 204</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 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; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407a04a75036e9d520bb983c5ed03b8d0182">trace</a>,</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407aad42f6697b035b7580e4fef93be20b4d">debug</a>,</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>,</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407a7b83d3f08fa392b79e3f553b585971cd">warning</a>,</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acb5e100e5a9a3e7f6d1fd97512215282">error</a>,</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407adf6402fd9ecc60f5a2159fdf45711cd4">fatal</a></div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
@@ -5644,7 +5649,7 @@ Variables</h2></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>
+<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>
@@ -5652,9 +5657,14 @@ Variables</h2></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="include_2armnn_2backends_2_i_tensor_handle_factory_8hpp_source.xhtml#l00024">24</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="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#a10c50bc964cc8cc559eebcd7df5a8af3aa47abd1077ef632a38ada05b6edbf389">PaddingRequired</a> = 1,</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <a class="code" href="namespacearmnn.xhtml#a10c50bc964cc8cc559eebcd7df5a8af3a5a3e0409dae79a7940aade8d399dcd5d">FallbackImportDisabled</a> = 2,</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="comment">// add new enum values here</span></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; <a class="code" href="namespacearmnn.xhtml#a10c50bc964cc8cc559eebcd7df5a8af3a280957607e14bb2ccc1155ae6569aee1">CapabilityClassMax</a> = 254</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</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 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#a10c50bc964cc8cc559eebcd7df5a8af3aa47abd1077ef632a38ada05b6edbf389">PaddingRequired</a> = 1,</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <a class="code" href="namespacearmnn.xhtml#a10c50bc964cc8cc559eebcd7df5a8af3a5a3e0409dae79a7940aade8d399dcd5d">FallbackImportDisabled</a> = 2,</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="comment">// add new enum values here</span></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; <a class="code" href="namespacearmnn.xhtml#a10c50bc964cc8cc559eebcd7df5a8af3a280957607e14bb2ccc1155ae6569aee1">CapabilityClassMax</a> = 254</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
@@ -5687,12 +5697,14 @@ Variables</h2></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00108">108</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</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; <a class="code" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58caf5f286e73bda105e538310b3190f75c5">Equal</a> = 0,</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <a class="code" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58ca8768a6821cd735aea4f5b0df88c1fc6a">Greater</a> = 1,</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <a class="code" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58ca6f2f0aefb3d22da0f3839453add5f937">GreaterOrEqual</a> = 2,</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <a class="code" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58ca1cfdf0e8d0c87a228c1f40d9bee7888b">Less</a> = 3,</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <a class="code" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58caa4cbdbb6070a5abb35fc95ecf1e22c14">LessOrEqual</a> = 4,</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <a class="code" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58ca19bb0af2c3c530538cb41aff7f235b96">NotEqual</a> = 5</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</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 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; <a class="code" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58caf5f286e73bda105e538310b3190f75c5">Equal</a> = 0,</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <a class="code" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58ca8768a6821cd735aea4f5b0df88c1fc6a">Greater</a> = 1,</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <a class="code" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58ca6f2f0aefb3d22da0f3839453add5f937">GreaterOrEqual</a> = 2,</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <a class="code" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58ca1cfdf0e8d0c87a228c1f40d9bee7888b">Less</a> = 3,</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <a class="code" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58caa4cbdbb6070a5abb35fc95ecf1e22c14">LessOrEqual</a> = 4,</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <a class="code" href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58ca19bb0af2c3c530538cb41aff7f235b96">NotEqual</a> = 5</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
@@ -5728,10 +5740,15 @@ Variables</h2></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 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><!-- fragment -->
</div>
</div>
@@ -5762,10 +5779,12 @@ Variables</h2></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00062">62</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</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#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">NCHW</a> = 1,</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">NHWC</a> = 2,</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a4dd0194b114cbf51da5b3a72569863ef">NDHWC</a> = 3,</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a884e0167ebf9bbe6cfd6ca5ab97ab015">NCDHW</a> = 4</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</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 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#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">NCHW</a> = 1,</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">NHWC</a> = 2,</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a4dd0194b114cbf51da5b3a72569863ef">NDHWC</a> = 3,</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a884e0167ebf9bbe6cfd6ca5ab97ab015">NCDHW</a> = 4</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
@@ -5802,16 +5821,18 @@ Variables</h2></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00048">48</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</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; <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">Float16</a> = 0,</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">Float32</a> = 1,</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">QAsymmU8</a> = 2,</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">Signed32</a> = 3,</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">Boolean</a> = 4,</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">QSymmS16</a> = 5,</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">QSymmS8</a> = 6,</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">QAsymmS8</a> = 7,</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">BFloat16</a> = 8,</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6ae1b3c9c6087a93b07c83e0b04f377a8d">Signed64</a> = 9,</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</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 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; <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">Float16</a> = 0,</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">Float32</a> = 1,</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">QAsymmU8</a> = 2,</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">Signed32</a> = 3,</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">Boolean</a> = 4,</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">QSymmS16</a> = 5,</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">QSymmS8</a> = 6,</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">QAsymmS8</a> = 7,</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">BFloat16</a> = 8,</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6ae1b3c9c6087a93b07c83e0b04f377a8d">Signed64</a> = 9,</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
@@ -5841,9 +5862,11 @@ Variables</h2></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00158">158</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</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; <a class="code" href="namespacearmnn.xhtml#a8e1f31031ad31cd8cc22d7c9daa32681a4b7d504abac49ba24b4df86c129d3cbc">NotSpecified</a> = 0,</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <a class="code" href="namespacearmnn.xhtml#a8e1f31031ad31cd8cc22d7c9daa32681ab4b379bf7ded74c07595ccb85bc6fdc3">Specified</a> = 1,</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <a class="code" href="namespacearmnn.xhtml#a8e1f31031ad31cd8cc22d7c9daa32681af60357a8d17e45793298323f1b372a74">Scalar</a> = 2</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</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 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; <a class="code" href="namespacearmnn.xhtml#a8e1f31031ad31cd8cc22d7c9daa32681a4b7d504abac49ba24b4df86c129d3cbc">NotSpecified</a> = 0,</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <a class="code" href="namespacearmnn.xhtml#a8e1f31031ad31cd8cc22d7c9daa32681ab4b379bf7ded74c07595ccb85bc6fdc3">Specified</a> = 1,</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <a class="code" href="namespacearmnn.xhtml#a8e1f31031ad31cd8cc22d7c9daa32681af60357a8d17e45793298323f1b372a74">Scalar</a> = 2</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
@@ -5878,10 +5901,12 @@ Variables</h2></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="include_2armnn_2backends_2_i_tensor_handle_factory_8hpp_source.xhtml#l00104">104</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="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="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="l00107"></a><span class="lineno"> 107</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="l00108"></a><span class="lineno"> 108</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="l00109"></a><span class="lineno"> 109</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="l00110"></a><span class="lineno"> 110</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 class="fragment"><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="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="l00107"></a><span class="lineno"> 107</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="l00108"></a><span class="lineno"> 108</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="l00109"></a><span class="lineno"> 109</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="l00110"></a><span class="lineno"> 110</span>&#160;<span class="comment"></span>};</div>
</div><!-- fragment -->
</div>
</div>
@@ -5910,8 +5935,10 @@ Variables</h2></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 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><!-- fragment -->
</div>
</div>
@@ -5941,9 +5968,11 @@ Variables</h2></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 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><!-- fragment -->
</div>
</div>
@@ -6047,11 +6076,13 @@ Variables</h2></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00466">466</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
-<div class="fragment"><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160;{</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160;<span class="preprocessor">#define X(name) name,</span></div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; <a class="code" href="_types_8hpp.xhtml#ac6d0779b576215649c2610ef2bd1903f">LIST_OF_LAYER_TYPE</a></div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160;<span class="preprocessor">#undef X</span></div><div class="line"><a name="l00471"></a><span class="lineno"> 471</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="l00472"></a><span class="lineno"> 472</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a33cae35d37c1b558ecd35dd5e37dd80f">LastLayer</a> = <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a9882ff3cfed27d6161c20a305e7a3484">BatchMatMul</a></div><div class="line"><a name="l00473"></a><span class="lineno"> 473</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#l00388">Types.hpp:388</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_a56943a0946e5f15e5e58054b8e7a04a4a9882ff3cfed27d6161c20a305e7a3484"><div class="ttname"><a href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a9882ff3cfed27d6161c20a305e7a3484">armnn::LayerType::BatchMatMul</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="fragment"><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160;{</div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160;<span class="preprocessor">#define X(name) name,</span></div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; <a class="code" href="_types_8hpp.xhtml#ac6d0779b576215649c2610ef2bd1903f">LIST_OF_LAYER_TYPE</a></div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160;<span class="preprocessor">#undef X</span></div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</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="l00472"></a><span class="lineno"> 472</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a33cae35d37c1b558ecd35dd5e37dd80f">LastLayer</a> = <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a9882ff3cfed27d6161c20a305e7a3484">BatchMatMul</a></div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
@@ -6080,8 +6111,10 @@ Variables</h2></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00118">118</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</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#a2da4db0140d1a6dc69c9c82e9ef5379ea103aa83df42877d5f9baeafdbf620b55">LogicalAnd</a> = 0,</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <a class="code" href="namespacearmnn.xhtml#a2da4db0140d1a6dc69c9c82e9ef5379ea74ce78827b02c650a20b149765388247">LogicalOr</a> = 1</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</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 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#a2da4db0140d1a6dc69c9c82e9ef5379ea103aa83df42877d5f9baeafdbf620b55">LogicalAnd</a> = 0,</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <a class="code" href="namespacearmnn.xhtml#a2da4db0140d1a6dc69c9c82e9ef5379ea74ce78827b02c650a20b149765388247">LogicalOr</a> = 1</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
@@ -6114,12 +6147,14 @@ Variables</h2></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_utils_8hpp_source.xhtml#l00012">12</a> of file <a class="el" href="_utils_8hpp_source.xhtml">Utils.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#a93a3ba385cad27c4774e5fe64c025d3dadd4ec0ac4e58f7c32a01244ae91150b1">Trace</a>,</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; <a class="code" href="namespacearmnn.xhtml#a181ecb133401da6ff2916c192ca04d48">Debug</a>,</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; <a class="code" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da4059b0251f66a18cb56f544728796875">Info</a>,</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; <a class="code" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da0eaadb4fcb48a0a0ed7bc9868be9fbaa">Warning</a>,</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; <a class="code" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da902b0d55fddef6f8d651fe1035b7d4bd">Error</a>,</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <a class="code" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da882384ec38ce8d9582b57e70861730e4">Fatal</a></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</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_a181ecb133401da6ff2916c192ca04d48"><div class="ttname"><a href="namespacearmnn.xhtml#a181ecb133401da6ff2916c192ca04d48">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, bool outputsToFile)</div><div class="ttdef"><b>Definition:</b> <a href="_debug_8cpp_source.xhtml#l00097">Debug.cpp:97</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 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#a93a3ba385cad27c4774e5fe64c025d3dadd4ec0ac4e58f7c32a01244ae91150b1">Trace</a>,</div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; <a class="code" href="namespacearmnn.xhtml#a181ecb133401da6ff2916c192ca04d48">Debug</a>,</div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; <a class="code" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da4059b0251f66a18cb56f544728796875">Info</a>,</div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; <a class="code" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da0eaadb4fcb48a0a0ed7bc9868be9fbaa">Warning</a>,</div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; <a class="code" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da902b0d55fddef6f8d651fe1035b7d4bd">Error</a>,</div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <a class="code" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da882384ec38ce8d9582b57e70861730e4">Fatal</a></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
@@ -6148,8 +6183,17 @@ Variables</h2></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00239">239</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
-<div class="fragment"><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; <span class="comment">// MemBlocks can be packed on the Y axis only, overlap allowed on X axis.</span></div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="comment">// In other words MemBlocks with overlapping lifetimes cannot use the same MemBin,</span></div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="comment">// equivalent to blob or pooling memory management.</span></div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <a class="code" href="namespacearmnn.xhtml#a7100de49939c3e393101f78d425a98c6a568437eb3752bdf14546b5c221ba5be7">SingleAxisPacking</a> = 0,</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160;</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="comment">// MemBlocks can be packed on either Y or X axis but cannot overlap on both.</span></div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="comment">// In other words MemBlocks with overlapping lifetimes can use the same MemBin,</span></div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="comment">// equivalent to offset or slab memory management.</span></div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <a class="code" href="namespacearmnn.xhtml#a7100de49939c3e393101f78d425a98c6ab093fa975bc79c72c686e6d9773a0d1f">MultiAxisPacking</a> = 1</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</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 class="fragment"><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; <span class="comment">// MemBlocks can be packed on the Y axis only, overlap allowed on X axis.</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="comment">// In other words MemBlocks with overlapping lifetimes cannot use the same MemBin,</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="comment">// equivalent to blob or pooling memory management.</span></div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <a class="code" href="namespacearmnn.xhtml#a7100de49939c3e393101f78d425a98c6a568437eb3752bdf14546b5c221ba5be7">SingleAxisPacking</a> = 0,</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; </div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="comment">// MemBlocks can be packed on either Y or X axis but cannot overlap on both.</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="comment">// In other words MemBlocks with overlapping lifetimes can use the same MemBin,</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="comment">// equivalent to offset or slab memory management.</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <a class="code" href="namespacearmnn.xhtml#a7100de49939c3e393101f78d425a98c6ab093fa975bc79c72c686e6d9773a0d1f">MultiAxisPacking</a> = 1</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
@@ -6183,11 +6227,14 @@ Variables</h2></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00230">230</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
-<div class="fragment"><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; : uint32_t</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; <a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a> = 0,</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <a class="code" href="namespacearmnn.xhtml#a14fcd7f88d11cea0a018269dca5f9277a1131a914388fac73e5f07b0ba0aad523">Malloc</a> = 1,</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <a class="code" href="namespacearmnn.xhtml#a14fcd7f88d11cea0a018269dca5f9277a966e13d8aabbff3966a5cd28d67b4846">DmaBuf</a> = 2,</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <a class="code" href="namespacearmnn.xhtml#a14fcd7f88d11cea0a018269dca5f9277a7f9067c59dd34aca0ad09a7f283ed1f8">DmaBufProtected</a> = 4,</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <a class="code" href="namespacearmnn.xhtml#a14fcd7f88d11cea0a018269dca5f9277a4bafe7f8ad22a8eca972a7ac5eb6702e">Gralloc</a> = 8</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</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 class="fragment"><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; : uint32_t</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; <a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a> = 0,</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <a class="code" href="namespacearmnn.xhtml#a14fcd7f88d11cea0a018269dca5f9277a1131a914388fac73e5f07b0ba0aad523">Malloc</a> = 1,</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <a class="code" href="namespacearmnn.xhtml#a14fcd7f88d11cea0a018269dca5f9277a966e13d8aabbff3966a5cd28d67b4846">DmaBuf</a> = 2,</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <a class="code" href="namespacearmnn.xhtml#a14fcd7f88d11cea0a018269dca5f9277a7f9067c59dd34aca0ad09a7f283ed1f8">DmaBufProtected</a> = 4,</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <a class="code" href="namespacearmnn.xhtml#a14fcd7f88d11cea0a018269dca5f9277a4bafe7f8ad22a8eca972a7ac5eb6702e">Gralloc</a> = 8</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
@@ -6216,8 +6263,10 @@ Variables</h2></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00193">193</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
-<div class="fragment"><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; <a class="code" href="namespacearmnn.xhtml#abe18a5033f2ab9c0de82c676b48f5437a810f43f3996922151c39b76143faeecc">Across</a> = 0,</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <a class="code" href="namespacearmnn.xhtml#abe18a5033f2ab9c0de82c676b48f5437a37bac6dce4f46277d89bfa3003e2e39b">Within</a> = 1</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</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 class="fragment"><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; <a class="code" href="namespacearmnn.xhtml#abe18a5033f2ab9c0de82c676b48f5437a810f43f3996922151c39b76143faeecc">Across</a> = 0,</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <a class="code" href="namespacearmnn.xhtml#abe18a5033f2ab9c0de82c676b48f5437a37bac6dce4f46277d89bfa3003e2e39b">Within</a> = 1</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
@@ -6248,8 +6297,12 @@ Variables</h2></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00199">199</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
-<div class="fragment"><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;{<span class="comment"></span></div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160;<span class="comment"> /// Krichevsky 2012: Local Brightness Normalization</span></div><div class="line"><a name="l00202"></a><span class="lineno"> 202</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="l00203"></a><span class="lineno"> 203</span>&#160;<span class="comment"> /// Jarret 2009: Local Contrast Normalization</span></div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;<span class="comment"></span> <a class="code" href="namespacearmnn.xhtml#ad605d1661fa0d8c7fea651d82fbe11c9aa94d2fcabc6b001015aeddfa19266e6f">LocalContrast</a> = 1</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</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 class="fragment"><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;{<span class="comment"></span></div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160;<span class="comment"> /// Krichevsky 2012: Local Brightness Normalization</span></div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</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="l00203"></a><span class="lineno"> 203</span>&#160;<span class="comment"> /// Jarret 2009: Local Contrast Normalization</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;<span class="comment"></span> <a class="code" href="namespacearmnn.xhtml#ad605d1661fa0d8c7fea651d82fbe11c9aa94d2fcabc6b001015aeddfa19266e6f">LocalContrast</a> = 1</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
@@ -6278,8 +6331,10 @@ Variables</h2></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00207">207</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
-<div class="fragment"><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; <a class="code" href="namespacearmnn.xhtml#adf2e5515c4c36a3e7e46bb8b83c6754eaf3f6d0343d56ce88ce7958170ed05cb3">Floor</a> = 0,</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <a class="code" href="namespacearmnn.xhtml#adf2e5515c4c36a3e7e46bb8b83c6754ea3237fbc8204064c106cb9080088a17cb">Ceiling</a> = 1</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</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 class="fragment"><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; <a class="code" href="namespacearmnn.xhtml#adf2e5515c4c36a3e7e46bb8b83c6754eaf3f6d0343d56ce88ce7958170ed05cb3">Floor</a> = 0,</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <a class="code" href="namespacearmnn.xhtml#adf2e5515c4c36a3e7e46bb8b83c6754ea3237fbc8204064c106cb9080088a17cb">Ceiling</a> = 1</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
@@ -6313,8 +6368,12 @@ Variables</h2></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00174">174</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
-<div class="fragment"><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;{<span class="comment"></span></div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;<span class="comment"> /// The padding fields count, but are ignored</span></div><div class="line"><a name="l00177"></a><span class="lineno"> 177</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="l00178"></a><span class="lineno"> 178</span>&#160;<span class="comment"> /// The padding fields don&#39;t count and are ignored</span></div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;<span class="comment"></span> <a class="code" href="namespacearmnn.xhtml#a3888429b6ebc79f9a7df549e5e4d9a2fa843f2812f595e7ec7c5036e89fde02d6">Exclude</a> = 1</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</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 class="fragment"><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;{<span class="comment"></span></div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;<span class="comment"> /// The padding fields count, but are ignored</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</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="l00178"></a><span class="lineno"> 178</span>&#160;<span class="comment"> /// The padding fields don&#39;t count and are ignored</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;<span class="comment"></span> <a class="code" href="namespacearmnn.xhtml#a3888429b6ebc79f9a7df549e5e4d9a2fa843f2812f595e7ec7c5036e89fde02d6">Exclude</a> = 1</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
@@ -6346,9 +6405,11 @@ Variables</h2></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;{</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <a class="code" href="namespacearmnn.xhtml#a14d24d90ab4ba2956e92e27890ba4c91acb17869fe51048b5a5c4c6106551a255">Constant</a> = 0,</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <a class="code" href="namespacearmnn.xhtml#a14d24d90ab4ba2956e92e27890ba4c91a74de3e45e4491e956e8dc18d841d9b00">Reflect</a> = 1,</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <a class="code" href="namespacearmnn.xhtml#a14d24d90ab4ba2956e92e27890ba4c91af334649ef5e5d0ffe200751d07012626">Symmetric</a> = 2</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</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 class="fragment"><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; <a class="code" href="namespacearmnn.xhtml#a14d24d90ab4ba2956e92e27890ba4c91acb17869fe51048b5a5c4c6106551a255">Constant</a> = 0,</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <a class="code" href="namespacearmnn.xhtml#a14d24d90ab4ba2956e92e27890ba4c91a74de3e45e4491e956e8dc18d841d9b00">Reflect</a> = 1,</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <a class="code" href="namespacearmnn.xhtml#a14d24d90ab4ba2956e92e27890ba4c91af334649ef5e5d0ffe200751d07012626">Symmetric</a> = 2</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
@@ -6378,9 +6439,11 @@ Variables</h2></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00136">136</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</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; <a class="code" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea6a061313d22e51e0f25b7cd4dc065233">Max</a> = 0,</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <a class="code" href="namespacearmnn.xhtml#a961bbfe1db71a848eff5a1f0ab775718ab1897515d548a960afe49ecf66a29021">Average</a> = 1,</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <a class="code" href="namespacearmnn.xhtml#a961bbfe1db71a848eff5a1f0ab775718a7e6aa2d53f6ee2b1a34b017fa403cb76">L2</a> = 2</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</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 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; <a class="code" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea6a061313d22e51e0f25b7cd4dc065233">Max</a> = 0,</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <a class="code" href="namespacearmnn.xhtml#a961bbfe1db71a848eff5a1f0ab775718ab1897515d548a960afe49ecf66a29021">Average</a> = 1,</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <a class="code" href="namespacearmnn.xhtml#a961bbfe1db71a848eff5a1f0ab775718a7e6aa2d53f6ee2b1a34b017fa403cb76">L2</a> = 2</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
@@ -6412,9 +6475,11 @@ Variables</h2></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00071">71</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</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; <a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a> = 0,</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <a class="code" href="namespacearmnn.xhtml#ae060224135f57f926cbda9d2732a2b1fa497ab261a562e316736c2cb59b839d32">DetailsWithEvents</a> = 1,</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <a class="code" href="namespacearmnn.xhtml#ae060224135f57f926cbda9d2732a2b1fa566666dfc3a9a82da0d7b0816b19f278">DetailsOnly</a> = 2</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</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 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; <a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a> = 0,</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <a class="code" href="namespacearmnn.xhtml#ae060224135f57f926cbda9d2732a2b1fa497ab261a562e316736c2cb59b839d32">DetailsWithEvents</a> = 1,</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <a class="code" href="namespacearmnn.xhtml#ae060224135f57f926cbda9d2732a2b1fa566666dfc3a9a82da0d7b0816b19f278">DetailsOnly</a> = 2</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
@@ -6444,9 +6509,11 @@ Variables</h2></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00079">79</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.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; <a class="code" href="namespacearmnn.xhtml#a8e72227ebe5ac505cf44790f2e6eb488a28d0edd045e05cf5af64e35ae0c4c6ef">Low</a> = 0,</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <a class="code" href="namespacearmnn.xhtml#a8e72227ebe5ac505cf44790f2e6eb488a87f8a6ab85c9ced3702b4ea641ad4bb5">Medium</a> = 1,</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <a class="code" href="namespacearmnn.xhtml#a8e72227ebe5ac505cf44790f2e6eb488a655d20c1ca69519ca647684edbb2db35">High</a> = 2</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</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 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; <a class="code" href="namespacearmnn.xhtml#a8e72227ebe5ac505cf44790f2e6eb488a28d0edd045e05cf5af64e35ae0c4c6ef">Low</a> = 0,</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <a class="code" href="namespacearmnn.xhtml#a8e72227ebe5ac505cf44790f2e6eb488a87f8a6ab85c9ced3702b4ea641ad4bb5">Medium</a> = 1,</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <a class="code" href="namespacearmnn.xhtml#a8e72227ebe5ac505cf44790f2e6eb488a655d20c1ca69519ca647684edbb2db35">High</a> = 2</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
@@ -6478,11 +6545,13 @@ Variables</h2></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00143">143</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</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; <a class="code" href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0aa0ec87054b5e5b7847d0d8780a01a3d5">Sum</a> = 0,</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <a class="code" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea6a061313d22e51e0f25b7cd4dc065233">Max</a> = 1,</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <a class="code" href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0a3d6c9ac08ada31c184094bbc67afe00d">Mean</a> = 2,</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <a class="code" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea78d811e98514cd165dda532286610fd2">Min</a> = 3,</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <a class="code" href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0a362a33c23b08e4a32a4ec53fbb82cccd">Prod</a> = 4</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</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 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; <a class="code" href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0aa0ec87054b5e5b7847d0d8780a01a3d5">Sum</a> = 0,</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <a class="code" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea6a061313d22e51e0f25b7cd4dc065233">Max</a> = 1,</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <a class="code" href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0a3d6c9ac08ada31c184094bbc67afe00d">Mean</a> = 2,</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <a class="code" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea78d811e98514cd165dda532286610fd2">Min</a> = 3,</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <a class="code" href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0a362a33c23b08e4a32a4ec53fbb82cccd">Prod</a> = 4</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
@@ -6511,8 +6580,10 @@ Variables</h2></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00152">152</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
-<div class="fragment"><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; <a class="code" href="namespacearmnn.xhtml#a9a2af2f8c4af4f9efa8e79417d505ac4aaf17c98bbd83c27d6426d2ff3fa81d7f">Bilinear</a> = 0,</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <a class="code" href="namespacearmnn.xhtml#a9a2af2f8c4af4f9efa8e79417d505ac4aaa020331bb30d2fa2ecf7c3a0777823f">NearestNeighbor</a> = 1</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</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 class="fragment"><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; <a class="code" href="namespacearmnn.xhtml#a9a2af2f8c4af4f9efa8e79417d505ac4aaf17c98bbd83c27d6426d2ff3fa81d7f">Bilinear</a> = 0,</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <a class="code" href="namespacearmnn.xhtml#a9a2af2f8c4af4f9efa8e79417d505ac4aaa020331bb30d2fa2ecf7c3a0777823f">NearestNeighbor</a> = 1</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
@@ -6546,8 +6617,12 @@ Variables</h2></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00221">221</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
-<div class="fragment"><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;{<span class="comment"></span></div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;<span class="comment"> /// Validate all output shapes</span></div><div class="line"><a name="l00224"></a><span class="lineno"> 224</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="l00225"></a><span class="lineno"> 225</span>&#160;<span class="comment"> /// Infer missing output shapes and validate all output shapes</span></div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160;<span class="comment"></span> <a class="code" href="namespacearmnn.xhtml#adf57837d00e8352d9b5cc5ab1fb5fee9a5dd7c525cb1500a2181fd4cc079d7acb">InferAndValidate</a> = 1</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</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 class="fragment"><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;{<span class="comment"></span></div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;<span class="comment"> /// Validate all output shapes</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</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="l00225"></a><span class="lineno"> 225</span>&#160;<span class="comment"> /// Infer missing output shapes and validate all output shapes</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160;<span class="comment"></span> <a class="code" href="namespacearmnn.xhtml#adf57837d00e8352d9b5cc5ab1fb5fee9a5dd7c525cb1500a2181fd4cc079d7acb">InferAndValidate</a> = 1</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
@@ -6570,7 +6645,6 @@ Variables</h2></td></tr>
</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>
@@ -6578,8 +6652,10 @@ Variables</h2></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00042">42</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
-<div class="fragment"><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="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70ba505a83f220c02df2f85c3810cd9ceb38">Success</a> = 0,</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70bae139a585510a502bbf1841cf589f5086">Failure</a> = 1</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</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 class="fragment"><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="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70ba505a83f220c02df2f85c3810cd9ceb38">Success</a> = 0,</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70bae139a585510a502bbf1841cf589f5086">Failure</a> = 1</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
@@ -6610,10 +6686,12 @@ Variables</h2></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_arm_compute_tuning_utils_8hpp_source.xhtml#l00018">18</a> of file <a class="el" href="_arm_compute_tuning_utils_8hpp_source.xhtml">ArmComputeTuningUtils.hpp</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#a707090747256af276c389e0cf1cb0a9aa6adf97f83acf6453d4a6a4b1070f3754">None</a>,</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <a class="code" href="namespacearmnn.xhtml#a707090747256af276c389e0cf1cb0a9aab571ef5b2664270d25bea4f4b61ffe68">Rapid</a>,</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <a class="code" href="namespacearmnn.xhtml#a707090747256af276c389e0cf1cb0a9aa960b44c579bc2f6818d2daaf9e4c16f0">Normal</a>,</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <a class="code" href="namespacearmnn.xhtml#a707090747256af276c389e0cf1cb0a9aafaf34f09ea1e93bfbf591e19dc0dfb9f">Exhaustive</a></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</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 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#a707090747256af276c389e0cf1cb0a9aa6adf97f83acf6453d4a6a4b1070f3754">None</a>,</div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <a class="code" href="namespacearmnn.xhtml#a707090747256af276c389e0cf1cb0a9aab571ef5b2664270d25bea4f4b61ffe68">Rapid</a>,</div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <a class="code" href="namespacearmnn.xhtml#a707090747256af276c389e0cf1cb0a9aa960b44c579bc2f6818d2daaf9e4c16f0">Normal</a>,</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <a class="code" href="namespacearmnn.xhtml#a707090747256af276c389e0cf1cb0a9aafaf34f09ea1e93bfbf591e19dc0dfb9f">Exhaustive</a></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;};</div>
</div><!-- fragment -->
</div>
</div>
@@ -6648,33 +6726,47 @@ Variables</h2></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00124">124</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
-<div class="fragment"><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; <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa1e34af023adeb7d5f484f8eb4b9826b6">Abs</a> = 0,</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <a class="code" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8acad39a154bffb61175f674d6eefaf6d0">Exp</a> = 1,</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaaae77f3ad25595e35b327334d89410054">Sqrt</a> = 2,</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <a class="code" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8a09bb7f6e2118c85a6a55bd4bf2beeca4">Rsqrt</a> = 3,</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <a class="code" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8afb278fa5defd7e699fcbc930c3e76ccd">Neg</a> = 4,</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <a class="code" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8a2a25ebd8c909241e3f7818389b804ecc">LogicalNot</a> = 5,</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <a class="code" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8ace0be71e33226e4c1db2bcea5959f16b">Log</a> = 6,</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <a class="code" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8a0986d137604183312e6d3599578bc6cd">Sin</a> = 7</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</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 class="fragment"><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; <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa1e34af023adeb7d5f484f8eb4b9826b6">Abs</a> = 0,</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <a class="code" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8acad39a154bffb61175f674d6eefaf6d0">Exp</a> = 1,</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaaae77f3ad25595e35b327334d89410054">Sqrt</a> = 2,</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <a class="code" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8a09bb7f6e2118c85a6a55bd4bf2beeca4">Rsqrt</a> = 3,</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <a class="code" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8afb278fa5defd7e699fcbc930c3e76ccd">Neg</a> = 4,</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <a class="code" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8a2a25ebd8c909241e3f7818389b804ecc">LogicalNot</a> = 5,</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <a class="code" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8ace0be71e33226e4c1db2bcea5959f16b">Log</a> = 6,</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <a class="code" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8a0986d137604183312e6d3599578bc6cd">Sin</a> = 7</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;};</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>
+<a id="ad10d72a6f8859949bbe6134c638ce171"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad10d72a6f8859949bbe6134c638ce171">&#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 class="memname">void Activation </td>
<td>(</td>
- <td class="paramtype">float&#160;</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>
@@ -6698,41 +6790,39 @@ Variables</h2></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="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>
+<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><!-- fragment -->
+<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>
-<p class="reference">Referenced by <a class="el" href="_activation_8cpp_source.xhtml#l00095">Activation()</a>, and <a class="el" href="_lstm_8cpp_source.xhtml#l00013">LstmImpl()</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>
+<a id="a7636fbbc4f8ea2d0cf9f3ac2d12a4c62"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7636fbbc4f8ea2d0cf9f3ac2d12a4c62">&#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 class="memname">float 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="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="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>
@@ -6756,13 +6846,88 @@ Variables</h2></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>
+<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>
+<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 -->
+<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>, and <a class="el" href="_lstm_8cpp_source.xhtml#l00013">LstmImpl()</a>.</p>
+
</div>
</div>
<a id="ae8dcbb74cf0c855724f12833a55a5684"></a>
@@ -6846,38 +7011,39 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_detection_post_process_8cpp_source.xhtml#l00102">102</a> of file <a class="el" href="_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="_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 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] = armnn::numeric_cast&lt;float&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] = armnn::numeric_cast&lt;float&gt;(numSelected);</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;}</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="_detection_post_process_8cpp_source.xhtml#l00140">DetectionPostProcess()</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>
+<h2 class="memtitle"><span class="permalink"><a href="#a2a0bcfb4df0a03357b4cbb8d9e89a3da">&#9670;&nbsp;</a></span>AllTypesAreEqualImpl() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -6909,14 +7075,43 @@ Variables</h2></td></tr>
</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>
-
+<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><!-- fragment -->
<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>
+</div>
+<a id="a5980f7b42f4df041efebdc6ae242f686"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5980f7b42f4df041efebdc6ae242f686">&#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"></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>
+<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 -->
+<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>
</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>
+<a id="a0c8a28b71e49c04596289ff281e58f1a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0c8a28b71e49c04596289ff281e58f1a">&#9670;&nbsp;</a></span>Append() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -6930,8 +7125,14 @@ Variables</h2></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>
+ <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>
@@ -6941,14 +7142,18 @@ Variables</h2></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="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>
+<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><!-- fragment -->
+<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="_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>
+<a id="a4907f6b88c3e72be6b8ae876de355e0a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4907f6b88c3e72be6b8ae876de355e0a">&#9670;&nbsp;</a></span>Append() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -6962,14 +7167,8 @@ Variables</h2></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>
+ <td class="paramtype">T &amp;&amp;&#160;</td>
+ <td class="paramname"><em>optimization</em>&#160;</td>
</tr>
<tr>
<td></td>
@@ -6979,15 +7178,17 @@ Variables</h2></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>
+<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>
+<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 -->
+<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>
</div>
-<a id="a9f31d956861d8277fa5f8fb877dbbb6c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a9f31d956861d8277fa5f8fb877dbbb6c">&#9670;&nbsp;</a></span>ApplyBackendOptimizations()</h2>
+<a id="ac39f2b15d34d3e2fc74d586fc3e26231"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac39f2b15d34d3e2fc74d586fc3e26231">&#9670;&nbsp;</a></span>ApplyBackendOptimizations()</h2>
<div class="memitem">
<div class="memproto">
@@ -7019,7 +7220,7 @@ Variables</h2></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="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>
@@ -7031,30 +7232,123 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.xhtml#l01040">1040</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#l00898">AssignBackends()</a>, <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea39f8662ca778258e9c6a14f26fec5ec1">CpuAcc</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00277">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#l00308">SubgraphView::GetIConnectableLayers()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00273">Layer::GetType()</a>, <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeafaa4524e3df19ada32643ce9a222362b">GpuAcc</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a324118a6721dd6b8a9b9f4e327df2bf5">Input</a>, <a class="el" href="_network_8hpp_source.xhtml#l00243">OptimizationResult::m_Error</a>, <a class="el" href="_backend_settings_8hpp_source.xhtml#l00022">BackendSettings::m_SelectedBackends</a>, <a class="el" href="_optimizer_8hpp_source.xhtml#l00043">MakeOptimizations()</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a29c2c02a361c9d7028472e5d92cd4a54">Output</a>, <a class="el" href="_optimizer_8cpp_source.xhtml#l00016">Optimizer::Pass()</a>, <a class="el" href="_network_8cpp_source.xhtml#l00544">ReportWarning()</a>, <a class="el" href="_subgraph_view_selector_8cpp_source.xhtml#l00259">SubgraphViewSelector::SelectSubgraphs()</a>, <a class="el" href="_graph_8cpp_source.xhtml#l00435">Graph::SubstituteSubgraph()</a>, and <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a>.</p>
+<div class="fragment"><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; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(optNetObjPtr);</div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</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="l01048"></a><span class="lineno"> 1048</span>&#160; OptimizationResult result;</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; <span class="comment">// Get the optimized graph</span></div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160; Graph&amp; optGraph = optNetObjPtr-&gt;GetGraph();</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; <span class="comment">// Run backend specific optimizations</span></div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160; for (auto&amp;&amp; selectedBackend : backendSettings.m_SelectedBackends)</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; <span class="keyword">auto</span> backendObjPtr = backends.find(selectedBackend)-&gt;second.get();</div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(backendObjPtr);</div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160; </div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160; <span class="keywordflow">if</span> (selectedBackend == <a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeafaa4524e3df19ada32643ce9a222362b">armnn::Compute::GpuAcc</a> || selectedBackend == <a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea39f8662ca778258e9c6a14f26fec5ec1">armnn::Compute::CpuAcc</a>)</div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160; {</div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160; Optimizer::Pass(optGraph, <a class="code" href="namespacearmnn.xhtml#aa7427025a851113a492de0b68b23d22a">MakeOptimizations</a>(<a class="code" href="namespacearmnn_1_1optimizations.xhtml#a58a79c101b088880733afee089a1ec7f">optimizations::PermuteDepthwiseConv2dWeights</a>()));</div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160; Optimizer::Pass(optGraph, <a class="code" href="namespacearmnn.xhtml#aa7427025a851113a492de0b68b23d22a">MakeOptimizations</a>(<a class="code" href="namespacearmnn_1_1optimizations.xhtml#ad668074369437a111649f51296ff8959">optimizations::FusePermuteIntoConstLayer</a>()));</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; </div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160; <span class="comment">// Select sub-graphs based on backend</span></div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160; SubgraphViewSelector::Subgraphs subgraphs =</div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160; SubgraphViewSelector::SelectSubgraphs(optGraph,</div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160; <span class="comment">// Select layers assigned to the requested backend</span></div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160; [&amp;backendObjPtr](<span class="keyword">const</span> Layer&amp; layer)</div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160; {</div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160; </div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160; <span class="keywordflow">return</span> layer.GetType() != LayerType::Input &amp;&amp;</div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160; layer.GetType() != LayerType::Output &amp;&amp;</div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160; layer.GetBackendId() == backendObjPtr-&gt;GetId();</div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160; });</div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160; <span class="keywordflow">if</span> (subgraphs.empty())</div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160; {</div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160; <span class="comment">// No sub-graphs found, try with next selected backend</span></div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160; <span class="keywordflow">continue</span>;</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; </div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160; <span class="comment">// Try to optimize each sub-graph</span></div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; subgraph : subgraphs)</div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160; {</div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160; <span class="comment">// Try to optimize the current sub-graph</span></div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</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="l01087"></a><span class="lineno"> 1087</span>&#160; OptimizationViews optimizationViews = backendObjPtr-&gt;OptimizeSubgraphView(*subgraph, modelOptions);</div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(optimizationViews.Validate(*subgraph));</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; <span class="comment">// Optimization attempted, check the resulting optimized sub-graph</span></div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; substitution : optimizationViews.GetSubstitutions())</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; <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="l01094"></a><span class="lineno"> 1094</span>&#160; SubgraphView&amp; replacementSubgraph = substitution.m_ReplacementSubgraph;</div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160; SubgraphView&amp; substitutableSubgraph = substitution.m_SubstitutableSubgraph;</div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160; optGraph.SubstituteSubgraph(substitutableSubgraph, replacementSubgraph);</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="comment">// Assign the current backend to the optimized sub-graph</span></div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160; <span class="keyword">const</span> SubgraphView::IConnectableLayers&amp; subgraphLayers = replacementSubgraph.GetIConnectableLayers();</div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160; std::for_each(subgraphLayers.begin(), subgraphLayers.end(), [&amp;selectedBackend](IConnectableLayer* l)</div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160; {</div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160; ARMNN_ASSERT(l);</div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160; PolymorphicDowncast&lt;Layer*&gt;(l)-&gt;SetBackendId(selectedBackend);</div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160; });</div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160; }</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; <span class="keywordflow">if</span> (!optimizationViews.GetFailedSubgraphs().empty())</div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160; {</div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160; std::stringstream warningMsg;</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</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="l01111"></a><span class="lineno"> 1111</span>&#160; <a class="code" href="namespacearmnn.xhtml#a070307e9ee0f7969f7d4320145d1dddb">ReportWarning</a>(warningMsg.str(), errMessages);</div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160; </div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</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="l01114"></a><span class="lineno"> 1114</span>&#160; BackendSettings settingsCopy(backendSettings);</div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160; <span class="keywordflow">if</span> (!backendObjPtr-&gt;GetId().IsCpuRef())</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; <span class="comment">// Add the current backend to the list of backends to ignore</span></div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160; settingsCopy.m_IgnoredBackends.insert(backendObjPtr-&gt;GetId());</div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160; }</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; <span class="keywordtype">int</span> count=0;</div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; failedSubgraph : optimizationViews.GetFailedSubgraphs())</div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160; {</div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</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="l01125"></a><span class="lineno"> 1125</span>&#160; std::stringstream subgraphMsg;</div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</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="l01127"></a><span class="lineno"> 1127</span>&#160; &lt;&lt; <span class="stringliteral">&quot; layers inside sub-graph &quot;</span> &lt;&lt; count++;</div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160; <a class="code" href="namespacearmnn.xhtml#a070307e9ee0f7969f7d4320145d1dddb">ReportWarning</a>(subgraphMsg.str(), errMessages);</div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160; </div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160; OptimizationResult reassignmentResult = <a class="code" href="namespacearmnn.xhtml#a0ea4ff80d0075ff847e96dc12e734368">AssignBackends</a>(optNetObjPtr,</div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160; settingsCopy,</div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160; *subgraph,</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; <span class="keywordflow">if</span> (reassignmentResult.m_Error)</div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160; {</div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</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="l01137"></a><span class="lineno"> 1137</span>&#160; result.m_Error = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160; <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160; }</div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160; }</div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160; }</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; }</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; <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160;}</div>
+</div><!-- fragment -->
+<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#l00898">AssignBackends()</a>, <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea39f8662ca778258e9c6a14f26fec5ec1">CpuAcc</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00277">Layer::GetBackendId()</a>, <a class="el" href="include_2armnn_2backends_2_optimization_views_8hpp_source.xhtml#l00055">OptimizationViews::GetFailedSubgraphs()</a>, <a class="el" href="_optimized_network_impl_8hpp_source.xhtml#l00027">OptimizedNetworkImpl::GetGraph()</a>, <a class="el" href="_subgraph_view_8cpp_source.xhtml#l00308">SubgraphView::GetIConnectableLayers()</a>, <a class="el" href="include_2armnn_2backends_2_optimization_views_8hpp_source.xhtml#l00054">OptimizationViews::GetSubstitutions()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00273">Layer::GetType()</a>, <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeafaa4524e3df19ada32643ce9a222362b">GpuAcc</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a324118a6721dd6b8a9b9f4e327df2bf5">Input</a>, <a class="el" href="_network_8hpp_source.xhtml#l00243">OptimizationResult::m_Error</a>, <a class="el" href="_backend_settings_8hpp_source.xhtml#l00023">BackendSettings::m_IgnoredBackends</a>, <a class="el" href="_backend_settings_8hpp_source.xhtml#l00022">BackendSettings::m_SelectedBackends</a>, <a class="el" href="_optimizer_8hpp_source.xhtml#l00043">MakeOptimizations()</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a29c2c02a361c9d7028472e5d92cd4a54">Output</a>, <a class="el" href="_optimizer_8cpp_source.xhtml#l00016">Optimizer::Pass()</a>, <a class="el" href="_network_8cpp_source.xhtml#l00544">ReportWarning()</a>, <a class="el" href="_subgraph_view_selector_8cpp_source.xhtml#l00259">SubgraphViewSelector::SelectSubgraphs()</a>, <a class="el" href="_graph_8cpp_source.xhtml#l00435">Graph::SubstituteSubgraph()</a>, <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a>, and <a class="el" href="_optimization_views_8cpp_source.xhtml#l00011">OptimizationViews::Validate()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.xhtml#l01572">Optimize()</a>.</p>
-<div class="fragment"><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; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(optNetObjPtr);</div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</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="l01048"></a><span class="lineno"> 1048</span>&#160; OptimizationResult result;</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; <span class="comment">// Get the optimized graph</span></div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160; Graph&amp; optGraph = optNetObjPtr-&gt;GetGraph();</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; <span class="comment">// Run backend specific optimizations</span></div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160; for (auto&amp;&amp; selectedBackend : backendSettings.m_SelectedBackends)</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; <span class="keyword">auto</span> backendObjPtr = backends.find(selectedBackend)-&gt;second.get();</div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(backendObjPtr);</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160;</div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160; <span class="keywordflow">if</span> (selectedBackend == <a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeafaa4524e3df19ada32643ce9a222362b">armnn::Compute::GpuAcc</a> || selectedBackend == <a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea39f8662ca778258e9c6a14f26fec5ec1">armnn::Compute::CpuAcc</a>)</div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160; {</div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160; Optimizer::Pass(optGraph, <a class="code" href="namespacearmnn.xhtml#aa7427025a851113a492de0b68b23d22a">MakeOptimizations</a>(<a class="code" href="namespacearmnn_1_1optimizations.xhtml#a58a79c101b088880733afee089a1ec7f">optimizations::PermuteDepthwiseConv2dWeights</a>()));</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160; Optimizer::Pass(optGraph, <a class="code" href="namespacearmnn.xhtml#aa7427025a851113a492de0b68b23d22a">MakeOptimizations</a>(<a class="code" href="namespacearmnn_1_1optimizations.xhtml#ad668074369437a111649f51296ff8959">optimizations::FusePermuteIntoConstLayer</a>()));</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;</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160; <span class="comment">// Select sub-graphs based on backend</span></div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160; SubgraphViewSelector::Subgraphs subgraphs =</div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160; SubgraphViewSelector::SelectSubgraphs(optGraph,</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160; <span class="comment">// Select layers assigned to the requested backend</span></div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160; [&amp;backendObjPtr](<span class="keyword">const</span> Layer&amp; layer)</div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160; {</div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160;</div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160; <span class="keywordflow">return</span> layer.GetType() != LayerType::Input &amp;&amp;</div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160; layer.GetType() != LayerType::Output &amp;&amp;</div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160; layer.GetBackendId() == backendObjPtr-&gt;GetId();</div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160; });</div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160; <span class="keywordflow">if</span> (subgraphs.empty())</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160; {</div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160; <span class="comment">// No sub-graphs found, try with next selected backend</span></div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160; <span class="keywordflow">continue</span>;</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;</div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160; <span class="comment">// Try to optimize each sub-graph</span></div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; subgraph : subgraphs)</div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160; {</div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160; <span class="comment">// Try to optimize the current sub-graph</span></div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</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="l01087"></a><span class="lineno"> 1087</span>&#160; OptimizationViews optimizationViews = backendObjPtr-&gt;OptimizeSubgraphView(*subgraph, modelOptions);</div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(optimizationViews.Validate(*subgraph));</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; <span class="comment">// Optimization attempted, check the resulting optimized sub-graph</span></div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; substitution : optimizationViews.GetSubstitutions())</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; <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="l01094"></a><span class="lineno"> 1094</span>&#160; SubgraphView&amp; replacementSubgraph = substitution.m_ReplacementSubgraph;</div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160; SubgraphView&amp; substitutableSubgraph = substitution.m_SubstitutableSubgraph;</div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160; optGraph.SubstituteSubgraph(substitutableSubgraph, replacementSubgraph);</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="comment">// Assign the current backend to the optimized sub-graph</span></div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160; <span class="keyword">const</span> SubgraphView::IConnectableLayers&amp; subgraphLayers = replacementSubgraph.GetIConnectableLayers();</div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160; std::for_each(subgraphLayers.begin(), subgraphLayers.end(), [&amp;selectedBackend](IConnectableLayer* l)</div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160; {</div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(l);</div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160; PolymorphicDowncast&lt;Layer*&gt;(l)-&gt;SetBackendId(selectedBackend);</div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160; });</div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160; }</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; <span class="keywordflow">if</span> (!optimizationViews.GetFailedSubgraphs().empty())</div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160; {</div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160; std::stringstream warningMsg;</div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</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="l01111"></a><span class="lineno"> 1111</span>&#160; <a class="code" href="namespacearmnn.xhtml#a38e626422579decc13e3ee37da1a84c9">ReportWarning</a>(warningMsg.str(), errMessages);</div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160;</div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</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="l01114"></a><span class="lineno"> 1114</span>&#160; BackendSettings settingsCopy(backendSettings);</div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160; <span class="keywordflow">if</span> (!backendObjPtr-&gt;GetId().IsCpuRef())</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; <span class="comment">// Add the current backend to the list of backends to ignore</span></div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160; settingsCopy.m_IgnoredBackends.insert(backendObjPtr-&gt;GetId());</div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160; }</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; <span class="keywordtype">int</span> count=0;</div><div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; failedSubgraph : optimizationViews.GetFailedSubgraphs())</div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160; {</div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</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="l01125"></a><span class="lineno"> 1125</span>&#160; std::stringstream subgraphMsg;</div><div class="line"><a name="l01126"></a><span class="lineno"> 1126</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="l01127"></a><span class="lineno"> 1127</span>&#160; &lt;&lt; <span class="stringliteral">&quot; layers inside sub-graph &quot;</span> &lt;&lt; count++;</div><div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160; <a class="code" href="namespacearmnn.xhtml#a38e626422579decc13e3ee37da1a84c9">ReportWarning</a>(subgraphMsg.str(), errMessages);</div><div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160;</div><div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160; OptimizationResult reassignmentResult = <a class="code" href="namespacearmnn.xhtml#a48e4d70ae8893f6f1a8ebfced5b03a07">AssignBackends</a>(optNetObjPtr,</div><div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160; settingsCopy,</div><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160; *subgraph,</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; <span class="keywordflow">if</span> (reassignmentResult.m_Error)</div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160; {</div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</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="l01137"></a><span class="lineno"> 1137</span>&#160; result.m_Error = <span class="keyword">true</span>;</div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160; }</div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160; }</div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160; }</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; }</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; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160;}</div><div class="ttc" id="namespacearmnn_1_1optimizations_xhtml_a58a79c101b088880733afee089a1ec7f"><div class="ttname"><a href="namespacearmnn_1_1optimizations.xhtml#a58a79c101b088880733afee089a1ec7f">armnn::optimizations::PermuteDepthwiseConv2dWeights</a></div><div class="ttdeci">OptimizeForType&lt; Layer, PermuteDepthwiseConv2dWeightsImpl &gt; PermuteDepthwiseConv2dWeights</div><div class="ttdef"><b>Definition:</b> <a href="_permute_depthwise_conv2d_weights_8hpp_source.xhtml#l00078">PermuteDepthwiseConv2dWeights.hpp:78</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="_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_ad668074369437a111649f51296ff8959"><div class="ttname"><a href="namespacearmnn_1_1optimizations.xhtml#ad668074369437a111649f51296ff8959">armnn::optimizations::FusePermuteIntoConstLayer</a></div><div class="ttdeci">OptimizeForConnection&lt; ConstantLayer, PermuteLayer, ConvertConstPermuteLayersToConstLayers &gt; FusePermuteIntoConstLayer</div><div class="ttdef"><b>Definition:</b> <a href="_convert_const_permute_layers_to_const_layers_8hpp_source.xhtml#l00124">ConvertConstPermuteLayersToConstLayers.hpp:124</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_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 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#l00544">Network.cpp:544</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#l01007">Network.cpp:1007</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>
+<a id="a1687cef9e4d417595f05519f3b67bf0f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1687cef9e4d417595f05519f3b67bf0f">&#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 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>
@@ -7062,7 +7356,7 @@ Variables</h2></td></tr>
<tr>
<td class="paramkey"></td>
<td></td>
- <td class="paramtype">OUT *&#160;</td>
+ <td class="paramtype">int32_t *&#160;</td>
<td class="paramname"><em>out</em>, </td>
</tr>
<tr>
@@ -7097,21 +7391,10 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="_arg_min_max_8cpp_source.xhtml#l00016">16</a> of file <a class="el" href="_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#l00182">armnnUtils::GetNumElementsBetween()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</a>, <a class="el" href="_tensor_utils_8cpp_source.xhtml#l00196">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>
-<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#l00182">TensorUtils.cpp:182</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#l00196">TensorUtils.cpp:196</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>
+<a id="a4ef59ef40b2161e37f3e5eb990a342ad"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4ef59ef40b2161e37f3e5eb990a342ad">&#9670;&nbsp;</a></span>ArgMinMax() <span class="overload">[2/3]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -7125,7 +7408,7 @@ Variables</h2></td></tr>
<tr>
<td class="paramkey"></td>
<td></td>
- <td class="paramtype">int32_t *&#160;</td>
+ <td class="paramtype">int64_t *&#160;</td>
<td class="paramname"><em>out</em>, </td>
</tr>
<tr>
@@ -7162,14 +7445,14 @@ Variables</h2></td></tr>
</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>
+<a id="ad441be836a142e8935e0413f4a22c9ec"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad441be836a142e8935e0413f4a22c9ec">&#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 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>
@@ -7177,7 +7460,7 @@ Variables</h2></td></tr>
<tr>
<td class="paramkey"></td>
<td></td>
- <td class="paramtype">int64_t *&#160;</td>
+ <td class="paramtype">OUT *&#160;</td>
<td class="paramname"><em>out</em>, </td>
</tr>
<tr>
@@ -7212,6 +7495,40 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
+<p class="definition">Definition at line <a class="el" href="_arg_min_max_8cpp_source.xhtml#l00016">16</a> of file <a class="el" href="_arg_min_max_8cpp_source.xhtml">ArgMinMax.cpp</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] = armnn::numeric_cast&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><!-- fragment -->
+<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#l00182">armnnUtils::GetNumElementsBetween()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</a>, <a class="el" href="_tensor_utils_8cpp_source.xhtml#l00196">armnnUtils::GetUnsignedAxis()</a>, <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused()</a>, <a class="el" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea6a061313d22e51e0f25b7cd4dc065233">Max</a>, and <a class="el" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea78d811e98514cd165dda532286610fd2">Min</a>.</p>
+
</div>
</div>
<a id="a3854dece5adbc9c94f7e460b58b82be9"></a>
@@ -7231,17 +7548,33 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_layer_8cpp_source.xhtml#l00028">28</a> of file <a class="el" href="_layer_8cpp_source.xhtml">Layer.cpp</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">switch</span> (layer.GetType())</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> LayerType::Convolution2d:</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordflow">case</span> LayerType::DepthwiseConvolution2d:</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#a435f9350a94adfbb0d5b9abb5f430914">LayerType::FullyConnected</a>:</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; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer.GetNumInputSlots() == 2 ||</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; layer.GetNumInputSlots() == 3);</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">break</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">default</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; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer.GetNumInputSlots() == 1);</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordflow">break</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="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;}</div>
+</div><!-- fragment -->
<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4adb033d2f81b68f9a17e8f62de69fed4a">Convolution2d</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4af97adbfc88b7012a0243215b1076e7e7">DepthwiseConvolution2d</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4acab78faff25393e9defd1911cb58133e">FullyConnected</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00321">Layer::GetNumInputSlots()</a>, and <a class="el" href="_layer_8hpp_source.xhtml#l00273">Layer::GetType()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_layer_8cpp_source.xhtml#l00048">InputSlot::Insert()</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">switch</span> (layer.GetType())</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> LayerType::Convolution2d:</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordflow">case</span> LayerType::DepthwiseConvolution2d:</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#a435f9350a94adfbb0d5b9abb5f430914">LayerType::FullyConnected</a>:</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; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer.GetNumInputSlots() == 2 ||</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; layer.GetNumInputSlots() == 3);</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">break</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">default</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; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer.GetNumInputSlots() == 1);</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordflow">break</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="line"><a name="l00046"></a><span class="lineno"> 46</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_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="_fully_connected_8cpp_source.xhtml#l00015">FullyConnected.cpp:15</a></div></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>
+<a id="a839ad76f1f52a70b540805b231f05d9c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a839ad76f1f52a70b540805b231f05d9c">&#9670;&nbsp;</a></span>AssignBackends() <span class="overload">[1/3]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -7273,7 +7606,7 @@ Variables</h2></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="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>
@@ -7285,25 +7618,80 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.xhtml#l00898">898</a> of file <a class="el" href="_network_8cpp_source.xhtml">Network.cpp</a>.</p>
-
+<div class="fragment"><div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160;{</div>
+<div class="line"><a name="l00904"></a><span class="lineno"> 904</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="l00905"></a><span class="lineno"> 905</span>&#160; OptimizationResult result;</div>
+<div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160; </div>
+<div class="line"><a name="l00907"></a><span class="lineno"> 907</span>&#160; <span class="keyword">auto</span> availablePreferredBackends = backendSettings.GetAvailablePreferredBackends();</div>
+<div class="line"><a name="l00908"></a><span class="lineno"> 908</span>&#160; <span class="keywordflow">if</span> (availablePreferredBackends.empty())</div>
+<div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160; {</div>
+<div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160; std::stringstream failureMsg;</div>
+<div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160; failureMsg &lt;&lt; <span class="stringliteral">&quot;No preferred backends are available&quot;</span>;</div>
+<div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160; <a class="code" href="namespacearmnn.xhtml#a3cf1cee98e0ed8b54263ec7279f6ec69">ReportError</a>(failureMsg.str(), errMessages);</div>
+<div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160; </div>
+<div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160; result.m_Error = <span class="keyword">true</span>;</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="line"><a name="l00918"></a><span class="lineno"> 918</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = firstLayer; it != lastLayer; ++it)</div>
+<div class="line"><a name="l00919"></a><span class="lineno"> 919</span>&#160; {</div>
+<div class="line"><a name="l00920"></a><span class="lineno"> 920</span>&#160; <span class="keyword">auto</span> layer = PolymorphicDowncast&lt;Layer*&gt;(*it);</div>
+<div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160; std::vector&lt;DataType&gt; inOutDataType = <a class="code" href="namespacearmnn.xhtml#a2b8ec686784330e8f20e4444f1ed7e98">GetLayerInOutDatatype</a>(layer);</div>
+<div class="line"><a name="l00922"></a><span class="lineno"> 922</span>&#160; </div>
+<div class="line"><a name="l00923"></a><span class="lineno"> 923</span>&#160; <span class="comment">// In AttemptBackendAssignment() we check:</span></div>
+<div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160; <span class="comment">// - if input/output datatypes of the layer are float16</span></div>
+<div class="line"><a name="l00925"></a><span class="lineno"> 925</span>&#160; <span class="comment">// - if the layer is supported with these datatypes</span></div>
+<div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160; <span class="comment">// If the layer is not supported (failing on ARM_COMPUTE_RETURN_ERROR_ON_CPU_F16_UNSUPPORTED() in clframework),</span></div>
+<div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160; <span class="comment">// we attempt to insert convertion layers either side of the new fp32 layer.</span></div>
+<div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160; <span class="keywordtype">bool</span> isFloat16 = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> type : inOutDataType)</div>
+<div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160; {</div>
+<div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160; <span class="keywordflow">if</span> (type == DataType::Float16)</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; isFloat16 = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00934"></a><span class="lineno"> 934</span>&#160; <span class="keywordflow">break</span>;</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; }</div>
+<div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160; </div>
+<div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160; <span class="keywordflow">if</span> (layer-&gt;GetBackendId() == <span class="stringliteral">&quot;Unknown&quot;</span> || isFloat16)</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#af52a698836d638d0a71263c6c1496a05">AssignBackendsIConnectable</a>(optNetObjPtr,</div>
+<div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160; *it,</div>
+<div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160; errMessages,</div>
+<div class="line"><a name="l00943"></a><span class="lineno"> 943</span>&#160; result,</div>
+<div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160; backendSettings,</div>
+<div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160; availablePreferredBackends);</div>
+<div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160; }</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; </div>
+<div class="line"><a name="l00949"></a><span class="lineno"> 949</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = firstLayer; it != lastLayer; ++it)</div>
+<div class="line"><a name="l00950"></a><span class="lineno"> 950</span>&#160; {</div>
+<div class="line"><a name="l00951"></a><span class="lineno"> 951</span>&#160; <span class="keyword">auto</span> layer = PolymorphicDowncast&lt;Layer*&gt;(*it);</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; <span class="keywordflow">if</span>(layer-&gt;GetType() == LayerType::Input)</div>
+<div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160; {</div>
+<div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160; BackendId connectedBackendId = layer-&gt;GetOutputSlot(0).GetConnection(0)-&gt;GetOwningLayer().GetBackendId();</div>
+<div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160; layer-&gt;SetBackendId(connectedBackendId);</div>
+<div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160; }</div>
+<div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160; }</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; <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160;}</div>
+</div><!-- fragment -->
<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#l00788">AssignBackendsIConnectable()</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">Float16</a>, <a class="el" href="_backend_settings_8hpp_source.xhtml#l00067">BackendSettings::GetAvailablePreferredBackends()</a>, <a class="el" href="_network_8cpp_source.xhtml#l00777">GetLayerInOutDatatype()</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a324118a6721dd6b8a9b9f4e327df2bf5">Input</a>, <a class="el" href="_network_8hpp_source.xhtml#l00243">OptimizationResult::m_Error</a>, <a class="el" href="_network_8cpp_source.xhtml#l00532">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#l01040">ApplyBackendOptimizations()</a>, <a class="el" href="_network_8cpp_source.xhtml#l01007">AssignBackends()</a>, and <a class="el" href="_network_8cpp_source.xhtml#l01572">Optimize()</a>.</p>
-<div class="fragment"><div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160;{</div><div class="line"><a name="l00904"></a><span class="lineno"> 904</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="l00905"></a><span class="lineno"> 905</span>&#160; OptimizationResult result;</div><div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160;</div><div class="line"><a name="l00907"></a><span class="lineno"> 907</span>&#160; <span class="keyword">auto</span> availablePreferredBackends = backendSettings.GetAvailablePreferredBackends();</div><div class="line"><a name="l00908"></a><span class="lineno"> 908</span>&#160; <span class="keywordflow">if</span> (availablePreferredBackends.empty())</div><div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160; {</div><div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160; std::stringstream failureMsg;</div><div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160; failureMsg &lt;&lt; <span class="stringliteral">&quot;No preferred backends are available&quot;</span>;</div><div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160; <a class="code" href="namespacearmnn.xhtml#a7658f93d899c8646515a29370e6aa994">ReportError</a>(failureMsg.str(), errMessages);</div><div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160;</div><div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160; result.m_Error = <span class="keyword">true</span>;</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="line"><a name="l00918"></a><span class="lineno"> 918</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = firstLayer; it != lastLayer; ++it)</div><div class="line"><a name="l00919"></a><span class="lineno"> 919</span>&#160; {</div><div class="line"><a name="l00920"></a><span class="lineno"> 920</span>&#160; <span class="keyword">auto</span> layer = PolymorphicDowncast&lt;Layer*&gt;(*it);</div><div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160; std::vector&lt;DataType&gt; inOutDataType = <a class="code" href="namespacearmnn.xhtml#a2b8ec686784330e8f20e4444f1ed7e98">GetLayerInOutDatatype</a>(layer);</div><div class="line"><a name="l00922"></a><span class="lineno"> 922</span>&#160;</div><div class="line"><a name="l00923"></a><span class="lineno"> 923</span>&#160; <span class="comment">// In AttemptBackendAssignment() we check:</span></div><div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160; <span class="comment">// - if input/output datatypes of the layer are float16</span></div><div class="line"><a name="l00925"></a><span class="lineno"> 925</span>&#160; <span class="comment">// - if the layer is supported with these datatypes</span></div><div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160; <span class="comment">// If the layer is not supported (failing on ARM_COMPUTE_RETURN_ERROR_ON_CPU_F16_UNSUPPORTED() in clframework),</span></div><div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160; <span class="comment">// we attempt to insert convertion layers either side of the new fp32 layer.</span></div><div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160; <span class="keywordtype">bool</span> isFloat16 = <span class="keyword">false</span>;</div><div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> type : inOutDataType)</div><div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160; {</div><div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160; <span class="keywordflow">if</span> (type == DataType::Float16)</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; isFloat16 = <span class="keyword">true</span>;</div><div class="line"><a name="l00934"></a><span class="lineno"> 934</span>&#160; <span class="keywordflow">break</span>;</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; }</div><div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160;</div><div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160; <span class="keywordflow">if</span> (layer-&gt;GetBackendId() == <span class="stringliteral">&quot;Unknown&quot;</span> || isFloat16)</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#a3a26a0174216ded9353ca943a66709dc">AssignBackendsIConnectable</a>(optNetObjPtr,</div><div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160; *it,</div><div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160; errMessages,</div><div class="line"><a name="l00943"></a><span class="lineno"> 943</span>&#160; result,</div><div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160; backendSettings,</div><div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160; availablePreferredBackends);</div><div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160; }</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;</div><div class="line"><a name="l00949"></a><span class="lineno"> 949</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = firstLayer; it != lastLayer; ++it)</div><div class="line"><a name="l00950"></a><span class="lineno"> 950</span>&#160; {</div><div class="line"><a name="l00951"></a><span class="lineno"> 951</span>&#160; <span class="keyword">auto</span> layer = PolymorphicDowncast&lt;Layer*&gt;(*it);</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; <span class="keywordflow">if</span>(layer-&gt;GetType() == LayerType::Input)</div><div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160; {</div><div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160; BackendId connectedBackendId = layer-&gt;GetOutputSlot(0).GetConnection(0)-&gt;GetOwningLayer().GetBackendId();</div><div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160; layer-&gt;SetBackendId(connectedBackendId);</div><div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160; }</div><div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160; }</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; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l00961"></a><span class="lineno"> 961</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#l00532">Network.cpp:532</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#l00788">Network.cpp:788</a></div></div>
-<div class="ttc" id="namespacearmnn_xhtml_a2b8ec686784330e8f20e4444f1ed7e98"><div class="ttname"><a href="namespacearmnn.xhtml#a2b8ec686784330e8f20e4444f1ed7e98">armnn::GetLayerInOutDatatype</a></div><div class="ttdeci">std::vector&lt; DataType &gt; GetLayerInOutDatatype(const Layer *layer)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.xhtml#l00777">Network.cpp:777</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>
+<a id="a0ea4ff80d0075ff847e96dc12e734368"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0ea4ff80d0075ff847e96dc12e734368">&#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 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>
@@ -7317,19 +7705,13 @@ Variables</h2></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>
+ <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="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>
@@ -7340,23 +7722,29 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.xhtml#l00963">963</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#l00788">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#l00243">OptimizationResult::m_Error</a>, <a class="el" href="_network_8cpp_source.xhtml#l00532">ReportError()</a>, and <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a>.</p>
-<div class="fragment"><div class="line"><a name="l00968"></a><span class="lineno"> 968</span>&#160;{</div><div class="line"><a name="l00969"></a><span class="lineno"> 969</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="l00970"></a><span class="lineno"> 970</span>&#160; OptimizationResult result;</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="keyword">auto</span> availablePreferredBackends = backendSettings.GetAvailablePreferredBackends();</div><div class="line"><a name="l00973"></a><span class="lineno"> 973</span>&#160; <span class="keywordflow">if</span> (availablePreferredBackends.empty())</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; std::stringstream failureMsg;</div><div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160; failureMsg &lt;&lt; <span class="stringliteral">&quot;No preferred backends are available&quot;</span>;</div><div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160; <a class="code" href="namespacearmnn.xhtml#a7658f93d899c8646515a29370e6aa994">ReportError</a>(failureMsg.str(), errMessages);</div><div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160;</div><div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160; result.m_Error = <span class="keyword">true</span>;</div><div class="line"><a name="l00980"></a><span class="lineno"> 980</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l00981"></a><span class="lineno"> 981</span>&#160; }</div><div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160;</div><div class="line"><a name="l00983"></a><span class="lineno"> 983</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = firstLayer; it != lastLayer; ++it)</div><div class="line"><a name="l00984"></a><span class="lineno"> 984</span>&#160; {</div><div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160; <a class="code" href="namespacearmnn.xhtml#a3a26a0174216ded9353ca943a66709dc">AssignBackendsIConnectable</a>(optNetObjPtr,</div><div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160; *it,</div><div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160; errMessages,</div><div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160; result,</div><div class="line"><a name="l00989"></a><span class="lineno"> 989</span>&#160; backendSettings,</div><div class="line"><a name="l00990"></a><span class="lineno"> 990</span>&#160; availablePreferredBackends);</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;</div><div class="line"><a name="l00993"></a><span class="lineno"> 993</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = firstLayer; it != lastLayer; ++it)</div><div class="line"><a name="l00994"></a><span class="lineno"> 994</span>&#160; {</div><div class="line"><a name="l00995"></a><span class="lineno"> 995</span>&#160; <span class="keyword">auto</span> layer = PolymorphicDowncast&lt;Layer*&gt;(*it);</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">if</span>(layer-&gt;GetType() == LayerType::Input)</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; BackendId connectedBackendId = layer-&gt;GetOutputSlot(0).GetConnection(0)-&gt;GetOwningLayer().GetBackendId();</div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160; layer-&gt;SetBackendId(connectedBackendId);</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; }</div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160;</div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</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#l00532">Network.cpp:532</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#l00788">Network.cpp:788</a></div></div>
+<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.xhtml#l01007">1007</a> of file <a class="el" href="_network_8cpp_source.xhtml">Network.cpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160;{</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160; SubgraphView::IConnectableLayerIterator firstLayer = subgraph.beginIConnectable();</div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160; SubgraphView::IConnectableLayerIterator lastLayer = subgraph.endIConnectable();</div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a0ea4ff80d0075ff847e96dc12e734368">AssignBackends</a>(optNetObjPtr,</div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160; backendSettings,</div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160; firstLayer,</div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160; lastLayer,</div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160; errMessages);</div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160;}</div>
</div><!-- fragment -->
+<p class="reference">References <a class="el" href="_network_8cpp_source.xhtml#l00898">AssignBackends()</a>, <a class="el" href="_subgraph_view_8cpp_source.xhtml#l00324">SubgraphView::beginIConnectable()</a>, and <a class="el" href="_subgraph_view_8cpp_source.xhtml#l00329">SubgraphView::endIConnectable()</a>.</p>
+
</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>
+<a id="a4a0c704ab68e6741579b60b681e5d919"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4a0c704ab68e6741579b60b681e5d919">&#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 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>
@@ -7370,13 +7758,19 @@ Variables</h2></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>
+ <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="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>
@@ -7387,15 +7781,52 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.xhtml#l01007">1007</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#l00898">AssignBackends()</a>, <a class="el" href="_subgraph_view_8cpp_source.xhtml#l00324">SubgraphView::beginIConnectable()</a>, and <a class="el" href="_subgraph_view_8cpp_source.xhtml#l00329">SubgraphView::endIConnectable()</a>.</p>
-<div class="fragment"><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160;{</div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160; SubgraphView::IConnectableLayerIterator firstLayer = subgraph.beginIConnectable();</div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160; SubgraphView::IConnectableLayerIterator lastLayer = subgraph.endIConnectable();</div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a48e4d70ae8893f6f1a8ebfced5b03a07">AssignBackends</a>(optNetObjPtr,</div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160; backendSettings,</div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160; firstLayer,</div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160; lastLayer,</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160; errMessages);</div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</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#l01007">Network.cpp:1007</a></div></div>
+<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.xhtml#l00963">963</a> of file <a class="el" href="_network_8cpp_source.xhtml">Network.cpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00968"></a><span class="lineno"> 968</span>&#160;{</div>
+<div class="line"><a name="l00969"></a><span class="lineno"> 969</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="l00970"></a><span class="lineno"> 970</span>&#160; OptimizationResult result;</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="keyword">auto</span> availablePreferredBackends = backendSettings.GetAvailablePreferredBackends();</div>
+<div class="line"><a name="l00973"></a><span class="lineno"> 973</span>&#160; <span class="keywordflow">if</span> (availablePreferredBackends.empty())</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; std::stringstream failureMsg;</div>
+<div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160; failureMsg &lt;&lt; <span class="stringliteral">&quot;No preferred backends are available&quot;</span>;</div>
+<div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160; <a class="code" href="namespacearmnn.xhtml#a3cf1cee98e0ed8b54263ec7279f6ec69">ReportError</a>(failureMsg.str(), errMessages);</div>
+<div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160; </div>
+<div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160; result.m_Error = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00980"></a><span class="lineno"> 980</span>&#160; <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l00981"></a><span class="lineno"> 981</span>&#160; }</div>
+<div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160; </div>
+<div class="line"><a name="l00983"></a><span class="lineno"> 983</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = firstLayer; it != lastLayer; ++it)</div>
+<div class="line"><a name="l00984"></a><span class="lineno"> 984</span>&#160; {</div>
+<div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160; <a class="code" href="namespacearmnn.xhtml#af52a698836d638d0a71263c6c1496a05">AssignBackendsIConnectable</a>(optNetObjPtr,</div>
+<div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160; *it,</div>
+<div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160; errMessages,</div>
+<div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160; result,</div>
+<div class="line"><a name="l00989"></a><span class="lineno"> 989</span>&#160; backendSettings,</div>
+<div class="line"><a name="l00990"></a><span class="lineno"> 990</span>&#160; availablePreferredBackends);</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; </div>
+<div class="line"><a name="l00993"></a><span class="lineno"> 993</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = firstLayer; it != lastLayer; ++it)</div>
+<div class="line"><a name="l00994"></a><span class="lineno"> 994</span>&#160; {</div>
+<div class="line"><a name="l00995"></a><span class="lineno"> 995</span>&#160; <span class="keyword">auto</span> layer = PolymorphicDowncast&lt;Layer*&gt;(*it);</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">if</span>(layer-&gt;GetType() == LayerType::Input)</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; BackendId connectedBackendId = layer-&gt;GetOutputSlot(0).GetConnection(0)-&gt;GetOwningLayer().GetBackendId();</div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160; layer-&gt;SetBackendId(connectedBackendId);</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; }</div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160; </div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160; <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160;}</div>
</div><!-- fragment -->
+<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#l00788">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#l00243">OptimizationResult::m_Error</a>, <a class="el" href="_network_8cpp_source.xhtml#l00532">ReportError()</a>, and <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a>.</p>
+
</div>
</div>
-<a id="a3a26a0174216ded9353ca943a66709dc"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a3a26a0174216ded9353ca943a66709dc">&#9670;&nbsp;</a></span>AssignBackendsIConnectable()</h2>
+<a id="af52a698836d638d0a71263c6c1496a05"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af52a698836d638d0a71263c6c1496a05">&#9670;&nbsp;</a></span>AssignBackendsIConnectable()</h2>
<div class="memitem">
<div class="memproto">
@@ -7415,7 +7846,7 @@ Variables</h2></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="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>
@@ -7445,21 +7876,114 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.xhtml#l00788">788</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#l00608">AttemptBackendAssignment()</a>, <a class="el" href="_network_8cpp_source.xhtml#l00571">CheckScaleSetOnQuantizedType()</a>, <a class="el" href="namespacearmnn.xhtml#a14d24d90ab4ba2956e92e27890ba4c91acb17869fe51048b5a5c4c6106551a255">Constant</a>, <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64">CpuRef</a>, <a class="el" href="_optimized_network_impl_8hpp_source.xhtml#l00027">OptimizedNetworkImpl::GetGraph()</a>, <a class="el" href="_network_8cpp_source.xhtml#l00777">GetLayerInOutDatatype()</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#l00257">OptimizationResult::IsError()</a>, <a class="el" href="_network_8hpp_source.xhtml#l00253">OptimizationResult::IsOk()</a>, <a class="el" href="_network_8hpp_source.xhtml#l00255">OptimizationResult::IsWarningOnly()</a>, <a class="el" href="_network_8hpp_source.xhtml#l00243">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#l00556">ReturnWithError()</a>.</p>
+<div class="fragment"><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="keyword">auto</span> ReturnError = [&amp;](<span class="keyword">const</span> Layer* layer)</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">return</span> <a class="code" href="namespacearmnn.xhtml#aeee4e55e6ad4fe12b2168f9fd1e88141">ReturnWithError</a>(result, layer, backendSettings, errMessages);</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; </div>
+<div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; <span class="keyword">auto</span> layer = PolymorphicDowncast&lt;Layer*&gt;(it);</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; <span class="keywordflow">if</span> (layer-&gt;GetType() == LayerType::Input)</div>
+<div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; {</div>
+<div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; }</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;DataType&gt; inOutDataType = <a class="code" href="namespacearmnn.xhtml#a2b8ec686784330e8f20e4444f1ed7e98">GetLayerInOutDatatype</a>(layer);</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; std::string reasonIfUnsupported;</div>
+<div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; <span class="keywordtype">bool</span> found = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="namespacearmnn.xhtml#a8bf1222ae8931bf663fa076b3e3b6f0e">CheckScaleSetOnQuantizedType</a>(layer, errMessages))</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; <span class="comment">// don&#39;t bomb immediately, find all the quantized outputs</span></div>
+<div class="line"><a name="l00814"></a><span class="lineno"> 814</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="l00815"></a><span class="lineno"> 815</span>&#160; result.m_Error = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; }</div>
+<div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; </div>
+<div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; <span class="comment">// First try assign layer to hint backend</span></div>
+<div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; <span class="keywordflow">if</span> (layer-&gt;GetBackendHint().has_value() &amp;&amp;</div>
+<div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; backendSettings.IsBackendSupported(layer-&gt;GetBackendHint().value()) &amp;&amp;</div>
+<div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; <a class="code" href="namespacearmnn.xhtml#abd660675ae5a9df777dcdb30c50224f6">AttemptBackendAssignment</a>(backendSettings,</div>
+<div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; optNetObjPtr-&gt;GetGraph(),</div>
+<div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; layer,</div>
+<div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; layer-&gt;GetBackendHint().value(),</div>
+<div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; inOutDataType[0],</div>
+<div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; inOutDataType[1],</div>
+<div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; availablePreferredBackends,</div>
+<div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; reasonIfUnsupported,</div>
+<div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; errMessages).<a class="code" href="structarmnn_1_1_optimization_result.xhtml#a955b65059e7f9429a5d6041136bc1487">IsOk</a>())</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; found = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; backendSettings.m_SelectedBackends.insert(layer-&gt;GetBackendHint().value());</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; <span class="keywordflow">else</span></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">// Try assign layer to prefered list of backends</span></div>
+<div class="line"><a name="l00837"></a><span class="lineno"> 837</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="l00838"></a><span class="lineno"> 838</span>&#160; {</div>
+<div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; <span class="keywordflow">if</span> (layer-&gt;GetBackendHint().has_value() &amp;&amp;</div>
+<div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; layer-&gt;GetBackendHint().value() == backend)</div>
+<div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; {</div>
+<div class="line"><a name="l00842"></a><span class="lineno"> 842</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="l00843"></a><span class="lineno"> 843</span>&#160; }</div>
+<div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; </div>
+<div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; OptimizationResult res = <a class="code" href="namespacearmnn.xhtml#abd660675ae5a9df777dcdb30c50224f6">AttemptBackendAssignment</a>(backendSettings,</div>
+<div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; optNetObjPtr-&gt;GetGraph(),</div>
+<div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; layer,</div>
+<div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160; backend,</div>
+<div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; inOutDataType[0],</div>
+<div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; inOutDataType[1],</div>
+<div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; availablePreferredBackends,</div>
+<div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160; reasonIfUnsupported,</div>
+<div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160; errMessages);</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; <span class="keywordflow">if</span> (res.IsOk())</div>
+<div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160; {</div>
+<div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160; found = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160; backendSettings.m_SelectedBackends.insert(backend);</div>
+<div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160; <span class="keywordflow">break</span>;</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (res.IsError())</div>
+<div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160; {</div>
+<div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160; result = res; <span class="comment">// Cannot continue.</span></div>
+<div class="line"><a name="l00864"></a><span class="lineno"> 864</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="l00865"></a><span class="lineno"> 865</span>&#160; <span class="comment">// be logged in AttemptBackendAssignment().</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; <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160; {</div>
+<div class="line"><a name="l00869"></a><span class="lineno"> 869</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="l00870"></a><span class="lineno"> 870</span>&#160; }</div>
+<div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160; }</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; </div>
+<div class="line"><a name="l00874"></a><span class="lineno"> 874</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="l00875"></a><span class="lineno"> 875</span>&#160; <span class="keywordflow">if</span> (!found)</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; <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="l00878"></a><span class="lineno"> 878</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="l00879"></a><span class="lineno"> 879</span>&#160; <span class="comment">// available as accelerated operations, or are only available under certain</span></div>
+<div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160; <span class="comment">// conditions, currently they comprise MemCopy, Constant, Permute)</span></div>
+<div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">armnn::LayerType</a> layerType = layer-&gt;GetType();</div>
+<div class="line"><a name="l00882"></a><span class="lineno"> 882</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="l00883"></a><span class="lineno"> 883</span>&#160; layerType == <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4acb17869fe51048b5a5c4c6106551a255">armnn::LayerType::Constant</a> ||</div>
+<div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; layerType == <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4afa662c6eb71caef475b2b981ce8eccd7">armnn::LayerType::Permute</a>))</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; BackendId cpuBackendId(<a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64">armnn::Compute::CpuRef</a>);</div>
+<div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160; layer-&gt;SetBackendId(cpuBackendId);</div>
+<div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160; backendSettings.m_SelectedBackends.insert(cpuBackendId);</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">else</span></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; result = ReturnError(layer);</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; }</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><!-- fragment -->
+<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#l00608">AttemptBackendAssignment()</a>, <a class="el" href="_network_8cpp_source.xhtml#l00571">CheckScaleSetOnQuantizedType()</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4acb17869fe51048b5a5c4c6106551a255">Constant</a>, <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64">CpuRef</a>, <a class="el" href="_optimized_network_impl_8hpp_source.xhtml#l00027">OptimizedNetworkImpl::GetGraph()</a>, <a class="el" href="_network_8cpp_source.xhtml#l00777">GetLayerInOutDatatype()</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#l00257">OptimizationResult::IsError()</a>, <a class="el" href="_network_8hpp_source.xhtml#l00253">OptimizationResult::IsOk()</a>, <a class="el" href="_network_8hpp_source.xhtml#l00255">OptimizationResult::IsWarningOnly()</a>, <a class="el" href="_network_8hpp_source.xhtml#l00243">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#l00556">ReturnWithError()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.xhtml#l00898">AssignBackends()</a>.</p>
-<div class="fragment"><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="keyword">auto</span> ReturnError = [&amp;](<span class="keyword">const</span> Layer* layer)</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">return</span> <a class="code" href="namespacearmnn.xhtml#ae50fff9aa2a1ce46392d8641c10aa3bc">ReturnWithError</a>(result, layer, backendSettings, errMessages);</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;</div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; <span class="keyword">auto</span> layer = PolymorphicDowncast&lt;Layer*&gt;(it);</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; <span class="keywordflow">if</span> (layer-&gt;GetType() == LayerType::Input)</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; {</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; }</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;DataType&gt; inOutDataType = <a class="code" href="namespacearmnn.xhtml#a2b8ec686784330e8f20e4444f1ed7e98">GetLayerInOutDatatype</a>(layer);</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; std::string reasonIfUnsupported;</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; <span class="keywordtype">bool</span> found = <span class="keyword">false</span>;</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="namespacearmnn.xhtml#af002111f64aee648e3258247075cae36">CheckScaleSetOnQuantizedType</a>(layer, errMessages))</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; <span class="comment">// don&#39;t bomb immediately, find all the quantized outputs</span></div><div class="line"><a name="l00814"></a><span class="lineno"> 814</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="l00815"></a><span class="lineno"> 815</span>&#160; result.m_Error = <span class="keyword">true</span>;</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; }</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160;</div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; <span class="comment">// First try assign layer to hint backend</span></div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; <span class="keywordflow">if</span> (layer-&gt;GetBackendHint().has_value() &amp;&amp;</div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; backendSettings.IsBackendSupported(layer-&gt;GetBackendHint().value()) &amp;&amp;</div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56f168327453ea4461cbc1c0ac7f15b6">AttemptBackendAssignment</a>(backendSettings,</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; optNetObjPtr-&gt;GetGraph(),</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; layer,</div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; layer-&gt;GetBackendHint().value(),</div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; inOutDataType[0],</div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; inOutDataType[1],</div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; availablePreferredBackends,</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; reasonIfUnsupported,</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; errMessages).IsOk())</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; found = <span class="keyword">true</span>;</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; backendSettings.m_SelectedBackends.insert(layer-&gt;GetBackendHint().value());</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; <span class="keywordflow">else</span></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">// Try assign layer to prefered list of backends</span></div><div class="line"><a name="l00837"></a><span class="lineno"> 837</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="l00838"></a><span class="lineno"> 838</span>&#160; {</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; <span class="keywordflow">if</span> (layer-&gt;GetBackendHint().has_value() &amp;&amp;</div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; layer-&gt;GetBackendHint().value() == backend)</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; {</div><div class="line"><a name="l00842"></a><span class="lineno"> 842</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="l00843"></a><span class="lineno"> 843</span>&#160; }</div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160;</div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; OptimizationResult res = <a class="code" href="namespacearmnn.xhtml#a56f168327453ea4461cbc1c0ac7f15b6">AttemptBackendAssignment</a>(backendSettings,</div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; optNetObjPtr-&gt;GetGraph(),</div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; layer,</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160; backend,</div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; inOutDataType[0],</div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; inOutDataType[1],</div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; availablePreferredBackends,</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160; reasonIfUnsupported,</div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160; errMessages);</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; <span class="keywordflow">if</span> (res.IsOk())</div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160; {</div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160; found = <span class="keyword">true</span>;</div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160; backendSettings.m_SelectedBackends.insert(backend);</div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160; <span class="keywordflow">break</span>;</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (res.IsError())</div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160; {</div><div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160; result = res; <span class="comment">// Cannot continue.</span></div><div class="line"><a name="l00864"></a><span class="lineno"> 864</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="l00865"></a><span class="lineno"> 865</span>&#160; <span class="comment">// be logged in AttemptBackendAssignment().</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; <span class="keywordflow">else</span></div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160; {</div><div class="line"><a name="l00869"></a><span class="lineno"> 869</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="l00870"></a><span class="lineno"> 870</span>&#160; }</div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160; }</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;</div><div class="line"><a name="l00874"></a><span class="lineno"> 874</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="l00875"></a><span class="lineno"> 875</span>&#160; <span class="keywordflow">if</span> (!found)</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; <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="l00878"></a><span class="lineno"> 878</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="l00879"></a><span class="lineno"> 879</span>&#160; <span class="comment">// available as accelerated operations, or are only available under certain</span></div><div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160; <span class="comment">// conditions, currently they comprise MemCopy, Constant, Permute)</span></div><div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">armnn::LayerType</a> layerType = layer-&gt;GetType();</div><div class="line"><a name="l00882"></a><span class="lineno"> 882</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="l00883"></a><span class="lineno"> 883</span>&#160; layerType == <a class="code" href="namespacearmnn.xhtml#a14d24d90ab4ba2956e92e27890ba4c91acb17869fe51048b5a5c4c6106551a255">armnn::LayerType::Constant</a> ||</div><div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; layerType == <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4afa662c6eb71caef475b2b981ce8eccd7">armnn::LayerType::Permute</a>))</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; BackendId cpuBackendId(<a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64">armnn::Compute::CpuRef</a>);</div><div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160; layer-&gt;SetBackendId(cpuBackendId);</div><div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160; backendSettings.m_SelectedBackends.insert(cpuBackendId);</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">else</span></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; result = ReturnError(layer);</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; }</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="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_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#l00556">Network.cpp:556</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_a2b8ec686784330e8f20e4444f1ed7e98"><div class="ttname"><a href="namespacearmnn.xhtml#a2b8ec686784330e8f20e4444f1ed7e98">armnn::GetLayerInOutDatatype</a></div><div class="ttdeci">std::vector&lt; DataType &gt; GetLayerInOutDatatype(const Layer *layer)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.xhtml#l00777">Network.cpp:777</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#l00571">Network.cpp:571</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#l00608">Network.cpp:608</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#l00466">Types.hpp:466</a></div></div>
-</div><!-- fragment -->
+
</div>
</div>
<a id="a09ff1f6670d27d3b41e5b5d35a6c9f37"></a>
@@ -7489,16 +8013,78 @@ Variables</h2></td></tr>
</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>
-
+<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><!-- fragment -->
<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>
+<a id="abd660675ae5a9df777dcdb30c50224f6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abd660675ae5a9df777dcdb30c50224f6">&#9670;&nbsp;</a></span>AttemptBackendAssignment()</h2>
<div class="memitem">
<div class="memproto">
@@ -7554,7 +8140,7 @@ Variables</h2></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="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>
@@ -7566,21 +8152,170 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.xhtml#l00608">608</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#a14d24d90ab4ba2956e92e27890ba4c91acb17869fe51048b5a5c4c6106551a255">Constant</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#a56943a0946e5f15e5e58054b8e7a04a4addf4f83b056acd5549949fc0350e9aad">ConvertFp32ToFp16</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">Float16</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">Float32</a>, <a class="el" href="_backend_id_8hpp_source.xhtml#l00138">BackendId::Get()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00277">Layer::GetBackendId()</a>, <a class="el" href="_types_utils_8hpp_source.xhtml#l00206">GetDataTypeName()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00245">Layer::GetInputSlots()</a>, <a class="el" href="_internal_types_8cpp_source.xhtml#l00013">GetLayerTypeAsCString()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00326">Layer::GetOutputSlot()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00273">Layer::GetType()</a>, <a class="el" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>, <a class="el" href="_network_utils_8cpp_source.xhtml#l00040">InsertConvertFp16ToFp32LayersBefore()</a>, <a class="el" href="_network_utils_8cpp_source.xhtml#l00079">InsertConvertFp32ToFp16LayersAfter()</a>, <a class="el" href="_workload_factory_8cpp_source.xhtml#l01518">IWorkloadFactory::IsLayerSupported()</a>, <a class="el" href="_constant_layer_8hpp_source.xhtml#l00044">ConstantLayer::m_LayerOutput</a>, <a class="el" href="_network_8cpp_source.xhtml#l00544">ReportWarning()</a>, <a class="el" href="_network_8cpp_source.xhtml#l00556">ReturnWithError()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00278">Layer::SetBackendId()</a>, and <a class="el" href="_layer_8cpp_source.xhtml#l00087">OutputSlot::SetTensorInfo()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160;{</div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; OptimizationResult result;</div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; </div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; <span class="comment">// Helper lambda to compose meaningful error message before returning with error</span></div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; <span class="keyword">auto</span> ReturnError = [&amp;](<span class="keyword">const</span> Layer* layer)</div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; {</div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#aeee4e55e6ad4fe12b2168f9fd1e88141">ReturnWithError</a>(result, layer, backendSettings, errMessages);</div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; };</div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; </div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; <span class="comment">// need to set the compute device on the layer</span></div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; <span class="comment">// before we can check if it is supported</span></div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; layer-&gt;SetBackendId(backend);</div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; </div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; <span class="comment">// To run FP16 operations on CpuAcc we need at least v8.2 architecture. If the available architecture </span></div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; <span class="comment">// is older than v8.2, we can check if the operator is supported by changing operator inputs &amp; outputs</span></div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; <span class="comment">// to be FP32 and inserting convert layers around the FP32 operator.</span></div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; <span class="keywordtype">bool</span> isLayerSupported = <a class="code" href="namespacearmnn.xhtml#a138ca3929b888fa8d9088c076e9de48c">IWorkloadFactory::IsLayerSupported</a>(*layer, EmptyOptional(), reasonIfUnsupported);</div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; std::string checkStr = <span class="stringliteral">&quot;This CPU architecture does not support F16 data type, you need v8.2 or above&quot;</span>;</div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; <span class="keywordflow">if</span> (!isLayerSupported ||</div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; reasonIfUnsupported.find(checkStr) != std::string::npos)</div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; {</div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; <span class="keywordflow">if</span> (dataTypeIn == DataType::Float16 || dataTypeOut == DataType::Float16)</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; <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.xhtml#a138ca3929b888fa8d9088c076e9de48c">IWorkloadFactory::IsLayerSupported</a>(*layer, DataType::Float32, reasonIfUnsupported)</div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; &amp;&amp; layer-&gt;GetType() != LayerType::ConvertFp32ToFp16</div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; &amp;&amp; layer-&gt;GetType() != LayerType::ConvertFp16ToFp32)</div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; {</div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; <span class="keyword">auto</span> ConstantLayerFromFp16ToFp32 = [](Layer&amp; layer)</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; <span class="keywordflow">if</span> (layer.GetType() == LayerType::Constant)</div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; {</div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; ConstantLayer* constantLayer = PolymorphicDowncast&lt;ConstantLayer*&gt;(&amp;layer);</div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; </div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</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="l00651"></a><span class="lineno"> 651</span>&#160; </div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetDataType() == DataType::Float16)</div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; {</div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; std::vector&lt;float&gt; newValues(<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetNumElements());</div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; </div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</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="l00657"></a><span class="lineno"> 657</span>&#160; constantLayer-&gt;m_LayerOutput-&gt;GetConstTensor&lt;<a class="code" href="namespacearmnn.xhtml#a0b49aa352b84d572942185ce72cef751">Half</a>&gt;(),</div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetNumElements(),</div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; newValues.data());</div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; </div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; TensorInfo newInfo(info);</div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; newInfo.SetDataType(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; constantLayer-&gt;m_LayerOutput.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; layer.GetOutputSlot(0).SetTensorInfo(newInfo);</div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; }</div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; }</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; </div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; <span class="keywordtype">bool</span> checkType = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; </div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> inputSlot : layer-&gt;GetInputSlots())</div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; {</div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; <span class="keyword">auto</span> connectedOutputSlot = inputSlot.GetConnectedOutputSlot();</div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; <span class="keywordflow">if</span> (connectedOutputSlot-&gt;GetOwningLayer().GetType() == LayerType::Constant)</div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; {</div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; <span class="keywordflow">if</span> (connectedOutputSlot-&gt;GetNumConnections() == 1)</div>
+<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; checkType = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; ConstantLayerFromFp16ToFp32(connectedOutputSlot-&gt;GetOwningLayer());</div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; }</div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; }</div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; }</div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; </div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; <span class="comment">// Insert FP16 -&gt; FP32 conversion layer before current layer</span></div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; std::vector&lt;ConvertFp16ToFp32Layer*&gt; convertFp16ToFp32Layers;</div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; <span class="keywordflow">if</span> (dataTypeIn == DataType::Float16)</div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; {</div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; convertFp16ToFp32Layers =</div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad31c56533e4f9f9f51719599fbfcf7bb">InsertConvertFp16ToFp32LayersBefore</a>(graph, *layer, checkType);</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; </div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; <span class="comment">// Insert FP32 -&gt; FP16 conversion layer after current layer</span></div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; std::vector&lt;ConvertFp32ToFp16Layer*&gt; convertFp32ToFp16Layers;</div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; <span class="keywordflow">if</span> (dataTypeOut == DataType::Float16)</div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; {</div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; convertFp32ToFp16Layers =</div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; <a class="code" href="namespacearmnn.xhtml#abf625e50a5eaeafce5b39580dc95a9d3">InsertConvertFp32ToFp16LayersAfter</a>(graph, *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; </div>
+<div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; <span class="comment">// Assign a supported backend to the newly introduced conversion layers</span></div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; <span class="keyword">auto</span> AssignFirstSupportedBackend = [&amp;](Layer* layer, BackendId preferredBackend)</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="keywordtype">bool</span> supportedBackendFound = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; std::string reasonIfUnsupported;</div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; </div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; <span class="comment">// Try preferred backend first</span></div>
+<div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; layer-&gt;SetBackendId(preferredBackend);</div>
+<div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.xhtml#a138ca3929b888fa8d9088c076e9de48c">IWorkloadFactory::IsLayerSupported</a>(*layer,</div>
+<div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; EmptyOptional(),</div>
+<div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; reasonIfUnsupported))</div>
+<div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; {</div>
+<div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; supportedBackendFound = <span class="keyword">true</span>;</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; <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; {</div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; backend : availablePreferredBackends)</div>
+<div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; {</div>
+<div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; <span class="comment">// Skip preferred backend (we already determined that it is not supported)</span></div>
+<div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; <span class="keywordflow">if</span> (backend == preferredBackend)</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; <span class="keywordflow">continue</span>;</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; layer-&gt;SetBackendId(backend);</div>
+<div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.xhtml#a138ca3929b888fa8d9088c076e9de48c">IWorkloadFactory::IsLayerSupported</a>(*layer,</div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; EmptyOptional(),</div>
+<div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; reasonIfUnsupported))</div>
+<div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; {</div>
+<div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; supportedBackendFound = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; }</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; }</div>
+<div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; </div>
+<div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; <span class="keywordflow">return</span> supportedBackendFound;</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; <span class="keywordflow">for</span> (ConvertFp16ToFp32Layer* convertLayer : convertFp16ToFp32Layers)</div>
+<div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; {</div>
+<div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; <span class="keywordflow">if</span> (!AssignFirstSupportedBackend(convertLayer, backend))</div>
+<div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; {</div>
+<div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; <span class="keywordflow">return</span> ReturnError(convertLayer);</div>
+<div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; }</div>
+<div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; }</div>
+<div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; </div>
+<div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; <span class="keywordflow">for</span> (ConvertFp32ToFp16Layer* convertLayer : convertFp32ToFp16Layers)</div>
+<div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; {</div>
+<div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; <span class="keywordflow">if</span> (!AssignFirstSupportedBackend(convertLayer, backend))</div>
+<div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; {</div>
+<div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; <span class="keywordflow">return</span> ReturnError(convertLayer);</div>
+<div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; }</div>
+<div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; }</div>
+<div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; </div>
+<div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; }</div>
+<div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; }</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; std::stringstream warningMsg;</div>
+<div class="line"><a name="l00761"></a><span class="lineno"> 761</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="l00762"></a><span class="lineno"> 762</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="l00763"></a><span class="lineno"> 763</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="l00764"></a><span class="lineno"> 764</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="l00765"></a><span class="lineno"> 765</span>&#160; &lt;&lt; <span class="stringliteral">&quot; (reason: &quot;</span> &lt;&lt; reasonIfUnsupported</div>
+<div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; &lt;&lt; <span class="stringliteral">&quot;), falling back to the next backend.&quot;</span>;</div>
+<div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; <a class="code" href="namespacearmnn.xhtml#a070307e9ee0f7969f7d4320145d1dddb">ReportWarning</a>(warningMsg.str(), errMessages);</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; <span class="keywordflow">return</span> OptimizationResult(<span class="keyword">true</span>, <span class="keyword">false</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">return</span> result;</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;}</div>
+</div><!-- fragment -->
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4acb17869fe51048b5a5c4c6106551a255">Constant</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#a56943a0946e5f15e5e58054b8e7a04a4addf4f83b056acd5549949fc0350e9aad">ConvertFp32ToFp16</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">Float16</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">Float32</a>, <a class="el" href="_backend_id_8hpp_source.xhtml#l00138">BackendId::Get()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00277">Layer::GetBackendId()</a>, <a class="el" href="_types_utils_8hpp_source.xhtml#l00206">GetDataTypeName()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00245">Layer::GetInputSlots()</a>, <a class="el" href="_internal_types_8cpp_source.xhtml#l00013">GetLayerTypeAsCString()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00326">Layer::GetOutputSlot()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00273">Layer::GetType()</a>, <a class="el" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>, <a class="el" href="_network_utils_8cpp_source.xhtml#l00040">InsertConvertFp16ToFp32LayersBefore()</a>, <a class="el" href="_network_utils_8cpp_source.xhtml#l00079">InsertConvertFp32ToFp16LayersAfter()</a>, <a class="el" href="_workload_factory_8cpp_source.xhtml#l01518">IWorkloadFactory::IsLayerSupported()</a>, <a class="el" href="_constant_layer_8hpp_source.xhtml#l00044">ConstantLayer::m_LayerOutput</a>, <a class="el" href="_network_8cpp_source.xhtml#l00544">ReportWarning()</a>, <a class="el" href="_network_8cpp_source.xhtml#l00556">ReturnWithError()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00278">Layer::SetBackendId()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00199">TensorInfo::SetDataType()</a>, and <a class="el" href="_layer_8cpp_source.xhtml#l00087">OutputSlot::SetTensorInfo()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.xhtml#l00788">AssignBackendsIConnectable()</a>.</p>
-<div class="fragment"><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160;{</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; OptimizationResult result;</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160;</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; <span class="comment">// Helper lambda to compose meaningful error message before returning with error</span></div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; <span class="keyword">auto</span> ReturnError = [&amp;](<span class="keyword">const</span> Layer* layer)</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; {</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</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="l00624"></a><span class="lineno"> 624</span>&#160; };</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160;</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; <span class="comment">// need to set the compute device on the layer</span></div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; <span class="comment">// before we can check if it is supported</span></div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; layer-&gt;SetBackendId(backend);</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160;</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; <span class="comment">// To run FP16 operations on CpuAcc we need at least v8.2 architecture. If the available architecture </span></div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; <span class="comment">// is older than v8.2, we can check if the operator is supported by changing operator inputs &amp; outputs</span></div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; <span class="comment">// to be FP32 and inserting convert layers around the FP32 operator.</span></div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; <span class="keywordtype">bool</span> isLayerSupported = <a class="code" href="namespacearmnn.xhtml#a138ca3929b888fa8d9088c076e9de48c">IWorkloadFactory::IsLayerSupported</a>(*layer, EmptyOptional(), reasonIfUnsupported);</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; std::string checkStr = <span class="stringliteral">&quot;This CPU architecture does not support F16 data type, you need v8.2 or above&quot;</span>;</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; <span class="keywordflow">if</span> (!isLayerSupported ||</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; reasonIfUnsupported.find(checkStr) != std::string::npos)</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; {</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; <span class="keywordflow">if</span> (dataTypeIn == DataType::Float16 || dataTypeOut == DataType::Float16)</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; <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.xhtml#a138ca3929b888fa8d9088c076e9de48c">IWorkloadFactory::IsLayerSupported</a>(*layer, DataType::Float32, reasonIfUnsupported)</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; &amp;&amp; layer-&gt;GetType() != LayerType::ConvertFp32ToFp16</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; &amp;&amp; layer-&gt;GetType() != LayerType::ConvertFp16ToFp32)</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; {</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; <span class="keyword">auto</span> ConstantLayerFromFp16ToFp32 = [](Layer&amp; layer)</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; <span class="keywordflow">if</span> (layer.GetType() == LayerType::Constant)</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; {</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; ConstantLayer* constantLayer = PolymorphicDowncast&lt;ConstantLayer*&gt;(&amp;layer);</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160;</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</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="l00651"></a><span class="lineno"> 651</span>&#160;</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; <span class="keywordflow">if</span> (info.GetDataType() == DataType::Float16)</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; {</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; std::vector&lt;float&gt; newValues(info.GetNumElements());</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160;</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</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="l00657"></a><span class="lineno"> 657</span>&#160; constantLayer-&gt;m_LayerOutput-&gt;GetConstTensor&lt;<a class="code" href="namespacearmnn.xhtml#a0b49aa352b84d572942185ce72cef751">Half</a>&gt;(),</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; info.GetNumElements(),</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; newValues.data());</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160;</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; TensorInfo newInfo(info);</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; newInfo.SetDataType(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; constantLayer-&gt;m_LayerOutput.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; layer.GetOutputSlot(0).SetTensorInfo(newInfo);</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; }</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; }</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;</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; <span class="keywordtype">bool</span> checkType = <span class="keyword">false</span>;</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160;</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> inputSlot : layer-&gt;GetInputSlots())</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; {</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; <span class="keyword">auto</span> connectedOutputSlot = inputSlot.GetConnectedOutputSlot();</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; <span class="keywordflow">if</span> (connectedOutputSlot-&gt;GetOwningLayer().GetType() == LayerType::Constant)</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; {</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; <span class="keywordflow">if</span> (connectedOutputSlot-&gt;GetNumConnections() == 1)</div><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; checkType = <span class="keyword">true</span>;</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; ConstantLayerFromFp16ToFp32(connectedOutputSlot-&gt;GetOwningLayer());</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; }</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; }</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; }</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160;</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; <span class="comment">// Insert FP16 -&gt; FP32 conversion layer before current layer</span></div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; std::vector&lt;ConvertFp16ToFp32Layer*&gt; convertFp16ToFp32Layers;</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; <span class="keywordflow">if</span> (dataTypeIn == DataType::Float16)</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; {</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; convertFp16ToFp32Layers =</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad31c56533e4f9f9f51719599fbfcf7bb">InsertConvertFp16ToFp32LayersBefore</a>(graph, *layer, checkType);</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;</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; <span class="comment">// Insert FP32 -&gt; FP16 conversion layer after current layer</span></div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; std::vector&lt;ConvertFp32ToFp16Layer*&gt; convertFp32ToFp16Layers;</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; <span class="keywordflow">if</span> (dataTypeOut == DataType::Float16)</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; {</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; convertFp32ToFp16Layers =</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; <a class="code" href="namespacearmnn.xhtml#abf625e50a5eaeafce5b39580dc95a9d3">InsertConvertFp32ToFp16LayersAfter</a>(graph, *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;</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; <span class="comment">// Assign a supported backend to the newly introduced conversion layers</span></div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; <span class="keyword">auto</span> AssignFirstSupportedBackend = [&amp;](Layer* layer, BackendId preferredBackend)</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="keywordtype">bool</span> supportedBackendFound = <span class="keyword">false</span>;</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; std::string reasonIfUnsupported;</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160;</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; <span class="comment">// Try preferred backend first</span></div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; layer-&gt;SetBackendId(preferredBackend);</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.xhtml#a138ca3929b888fa8d9088c076e9de48c">IWorkloadFactory::IsLayerSupported</a>(*layer,</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; EmptyOptional(),</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; reasonIfUnsupported))</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; {</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; supportedBackendFound = <span class="keyword">true</span>;</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; <span class="keywordflow">else</span></div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; {</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; backend : availablePreferredBackends)</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; {</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; <span class="comment">// Skip preferred backend (we already determined that it is not supported)</span></div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; <span class="keywordflow">if</span> (backend == preferredBackend)</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; <span class="keywordflow">continue</span>;</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; layer-&gt;SetBackendId(backend);</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.xhtml#a138ca3929b888fa8d9088c076e9de48c">IWorkloadFactory::IsLayerSupported</a>(*layer,</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; EmptyOptional(),</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; reasonIfUnsupported))</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; {</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; supportedBackendFound = <span class="keyword">true</span>;</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; }</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; }</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160;</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; <span class="keywordflow">return</span> supportedBackendFound;</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; <span class="keywordflow">for</span> (ConvertFp16ToFp32Layer* convertLayer : convertFp16ToFp32Layers)</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; {</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; <span class="keywordflow">if</span> (!AssignFirstSupportedBackend(convertLayer, backend))</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; {</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; <span class="keywordflow">return</span> ReturnError(convertLayer);</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; }</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; }</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160;</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; <span class="keywordflow">for</span> (ConvertFp32ToFp16Layer* convertLayer : convertFp32ToFp16Layers)</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; {</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; <span class="keywordflow">if</span> (!AssignFirstSupportedBackend(convertLayer, backend))</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; {</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; <span class="keywordflow">return</span> ReturnError(convertLayer);</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; }</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; }</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160;</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; }</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; }</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; std::stringstream warningMsg;</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</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="l00762"></a><span class="lineno"> 762</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="l00763"></a><span class="lineno"> 763</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="l00764"></a><span class="lineno"> 764</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="l00765"></a><span class="lineno"> 765</span>&#160; &lt;&lt; <span class="stringliteral">&quot; (reason: &quot;</span> &lt;&lt; reasonIfUnsupported</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; &lt;&lt; <span class="stringliteral">&quot;), falling back to the next backend.&quot;</span>;</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; <a class="code" href="namespacearmnn.xhtml#a38e626422579decc13e3ee37da1a84c9">ReportWarning</a>(warningMsg.str(), errMessages);</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; <span class="keywordflow">return</span> OptimizationResult(<span class="keyword">true</span>, <span class="keyword">false</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">return</span> result;</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;}</div><div class="ttc" id="namespacearmnn_xhtml_a138ca3929b888fa8d9088c076e9de48c"><div class="ttname"><a href="namespacearmnn.xhtml#a138ca3929b888fa8d9088c076e9de48c">armnn::IsLayerSupported</a></div><div class="ttdeci">bool IsLayerSupported(const armnn::Layer *layer)</div><div class="ttdef"><b>Definition:</b> <a href="_mock_backend_8cpp_source.xhtml#l00060">MockBackend.cpp:60</a></div></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#l00079">NetworkUtils.cpp:79</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#l00040">NetworkUtils.cpp:40</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#l00556">Network.cpp:556</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#l00206">TypesUtils.hpp:206</a></div></div>
-<div class="ttc" id="namespacearmnn_xhtml_a0b49aa352b84d572942185ce72cef751"><div class="ttname"><a href="namespacearmnn.xhtml#a0b49aa352b84d572942185ce72cef751">armnn::Half</a></div><div class="ttdeci">half_float::half Half</div><div class="ttdef"><b>Definition:</b> <a href="_half_8hpp_source.xhtml#l00022">Half.hpp:22</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_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#l00544">Network.cpp:544</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="ac2807505b850738bc8a1991ce669dd47"></a>
@@ -7599,9 +8334,13 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_backend_registry_8cpp_source.xhtml#l00015">15</a> of file <a class="el" href="_backend_registry_8cpp_source.xhtml">BackendRegistry.cpp</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">static</span> BackendRegistry instance;</div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; <span class="keywordflow">return</span> instance;</div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;}</div>
+</div><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_common_test_utils_8cpp_source.xhtml#l00072">CreateBackendObject()</a>, <a class="el" href="_network_8cpp_source.xhtml#l01021">CreateSupportedBackends()</a>, <a class="el" href="_dynamic_backend_utils_8cpp_source.xhtml#l00320">DynamicBackendUtils::DeregisterDynamicBackends()</a>, <a class="el" href="_backend_helper_8cpp_source.xhtml#l00051">GetCapability()</a>, <a class="el" href="_backend_helper_8cpp_source.xhtml#l00023">GetILayerSupportByBackendId()</a>, <a class="el" href="_backend_helper_8cpp_source.xhtml#l00120">GetNumberOfCacheFiles()</a>, <a class="el" href="_backend_helper_8cpp_source.xhtml#l00107">HasCapability()</a>, <a class="el" href="_arm_n_n_profiling_service_initialiser_8cpp_source.xhtml#l00017">ArmNNProfilingServiceInitialiser::InitialiseProfilingService()</a>, <a class="el" href="_dynamic_backend_utils_8cpp_source.xhtml#l00332">DynamicBackendUtils::RegisterDynamicBackends()</a>, <a class="el" href="_runtime_8cpp_source.xhtml#l00323">RuntimeImpl::RuntimeImpl()</a>, and <a class="el" href="_runtime_8cpp_source.xhtml#l00548">RuntimeImpl::~RuntimeImpl()</a>.</p>
-<p class="reference">Referenced by <a class="el" href="_common_test_utils_8cpp_source.xhtml#l00072">CreateBackendObject()</a>, <a class="el" href="_network_8cpp_source.xhtml#l01021">CreateSupportedBackends()</a>, <a class="el" href="_dynamic_backend_utils_8cpp_source.xhtml#l00320">DynamicBackendUtils::DeregisterDynamicBackends()</a>, <a class="el" href="_backend_helper_8cpp_source.xhtml#l00051">GetCapability()</a>, <a class="el" href="_backend_helper_8cpp_source.xhtml#l00023">GetILayerSupportByBackendId()</a>, <a class="el" href="_backend_helper_8cpp_source.xhtml#l00120">GetNumberOfCacheFiles()</a>, <a class="el" href="_backend_helper_8cpp_source.xhtml#l00107">HasCapability()</a>, <a class="el" href="_arm_n_n_profiling_service_initialiser_8cpp_source.xhtml#l00017">ArmNNProfilingServiceInitialiser::InitialiseProfilingService()</a>, <a class="el" href="_mock_backend_8cpp_source.xhtml#l00096">IsLayerOptimizable()</a>, <a class="el" href="_loaded_network_8cpp_source.xhtml#l00170">LoadedNetwork::MakeLoadedNetwork()</a>, <a class="el" href="_loaded_network_8cpp_source.xhtml#l02197">LoadedNetwork::RegisterDebugCallback()</a>, <a class="el" href="_dynamic_backend_utils_8cpp_source.xhtml#l00332">DynamicBackendUtils::RegisterDynamicBackends()</a>, <a class="el" href="_runtime_8cpp_source.xhtml#l00323">RuntimeImpl::RuntimeImpl()</a>, and <a class="el" href="_runtime_8cpp_source.xhtml#l00548">RuntimeImpl::~RuntimeImpl()</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">static</span> BackendRegistry instance;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; <span class="keywordflow">return</span> instance;</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;}</div></div><!-- fragment -->
</div>
</div>
<a id="adc251e65d99405496d503811589e9a20"></a>
@@ -7661,15 +8400,49 @@ Variables</h2></td></tr>
</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>
-
+<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><!-- fragment -->
<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#l00027">GetTensorInfo()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00025">DataLayoutIndexed::GetWidthIndex()</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00811">BatchNormalizationDescriptor::m_DataLayout</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00809">BatchNormalizationDescriptor::m_Eps</a>, <a class="el" href="_workload_data_8hpp_source.xhtml#l00026">QueueDescriptor::m_Inputs</a>, <a class="el" href="_workload_data_8hpp_source.xhtml#l00066">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>
@@ -7729,21 +8502,71 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_batch_to_space_nd_8cpp_source.xhtml#l00035">35</a> of file <a class="el" href="_batch_to_space_nd_8cpp_source.xhtml">BatchToSpaceNd.cpp</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.<a class="code" href="classarmnn_1_1_tensor_shape.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>() == 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><!-- fragment -->
<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00015">ARMNN_ASSERT_MSG</a>, <a class="el" href="_batch_to_space_nd_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="_batch_to_space_nd_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="_batch_to_space_nd_8cpp_source.xhtml#l00035">BatchToSpaceNd()</a>, and <a class="el" href="_batch_to_space_nd_layer_8cpp_source.xhtml#l00026">BatchToSpaceNdLayer::BatchToSpaceNdLayer()</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="_batch_to_space_nd_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>
@@ -7763,11 +8586,20 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<p class="reference">References <a class="el" href="_profiling_event_8cpp_source.xhtml#l00084">Event::GetParentEvent()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_profiling_8cpp_source.xhtml#l00481">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>
@@ -7821,12 +8653,92 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.xhtml#l01413">1413</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#l00277">Layer::GetBackendId()</a>, <a class="el" href="include_2armnn_2backends_2_i_tensor_handle_factory_8hpp_source.xhtml#l00093">ITensorHandleFactory::GetCapabilities()</a>, <a class="el" href="include_2armnn_2backends_2_i_tensor_handle_factory_8hpp_source.xhtml#l00090">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#l00091">ITensorHandleFactory::GetImportFlags()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00273">Layer::GetType()</a>, <a class="el" href="include_2armnn_2backends_2_i_tensor_handle_factory_8hpp_source.xhtml#l00050">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#l00088">ITensorHandleFactory::SupportsMapUnmap()</a>, and <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a>.</p>
+<div class="fragment"><div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>&#160;{</div>
+<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>&#160; <span class="keyword">auto</span> toBackend = backends.find(connectedLayer.GetBackendId());</div>
+<div class="line"><a name="l01421"></a><span class="lineno"> 1421</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="l01422"></a><span class="lineno"> 1422</span>&#160; </div>
+<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>&#160; <span class="keyword">auto</span> dstPrefs = toBackend-&gt;second.get()-&gt;GetHandleFactoryPreferences();</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; <span class="comment">// Legacy API check for backward compatibility</span></div>
+<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>&#160; <span class="keywordflow">if</span> (srcFactoryId == ITensorHandleFactory::LegacyFactoryId || dstPrefs.empty())</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">if</span> (layer.GetBackendId() != connectedLayer.GetBackendId())</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="keywordflow">return</span> EdgeStrategy::CopyToTarget;</div>
+<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>&#160; }</div>
+<div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>&#160; <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>&#160; {</div>
+<div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>&#160; <span class="keywordflow">return</span> EdgeStrategy::DirectCompatibility;</div>
+<div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>&#160; }</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; </div>
+<div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>&#160; <span class="comment">// TensorHandleFactory API present, so perform more sophisticated strategies.</span></div>
+<div class="line"><a name="l01439"></a><span class="lineno"> 1439</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="l01440"></a><span class="lineno"> 1440</span>&#160; <span class="keywordflow">if</span> (connectedLayer.GetType() == LayerType::Output)</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">return</span> EdgeStrategy::DirectCompatibility;</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; </div>
+<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>&#160; <span class="comment">// Search for direct match in prefs</span></div>
+<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; pref : dstPrefs)</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="keywordflow">if</span> (pref == srcFactoryId)</div>
+<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>&#160; {</div>
+<div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>&#160; <span class="keywordflow">return</span> EdgeStrategy::DirectCompatibility;</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="comment">// Search for export/import options</span></div>
+<div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>&#160; ITensorHandleFactory* srcFactory = registry.GetFactory(srcFactoryId);</div>
+<div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>&#160; <span class="keywordflow">if</span> (srcFactory-&gt;GetExportFlags() != 0 &amp;&amp; importEnabled)</div>
+<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>&#160; {</div>
+<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; pref : dstPrefs)</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; ITensorHandleFactory* dstFactory = registry.GetFactory(pref);</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">// Handles cases when a destPref is not listed in TensorHandleFactoryRegistry</span></div>
+<div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>&#160; <span class="keywordflow">if</span> (!dstFactory) {</div>
+<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>&#160; <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>&#160; }</div>
+<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>&#160; <span class="keywordflow">if</span> ((dstFactory-&gt;GetImportFlags() &amp; srcFactory-&gt;GetExportFlags()) != 0)</div>
+<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>&#160; {</div>
+<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160; <span class="keyword">auto</span> srcCapability = srcFactory-&gt;GetCapabilities(&amp;layer, &amp;layer, CapabilityClass::PaddingRequired);</div>
+<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>&#160; <span class="keyword">auto</span> dstCapability = dstFactory-&gt;GetCapabilities(&amp;connectedLayer,</div>
+<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>&#160; &amp;connectedLayer,</div>
+<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>&#160; CapabilityClass::PaddingRequired);</div>
+<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>&#160; <span class="keyword">auto</span> srcFallback = srcFactory-&gt;GetCapabilities(&amp;layer, &amp;layer, CapabilityClass::FallbackImportDisabled);</div>
+<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>&#160; <span class="keyword">auto</span> dstFallback = dstFactory-&gt;GetCapabilities(&amp;connectedLayer,</div>
+<div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>&#160; &amp;connectedLayer,</div>
+<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>&#160; CapabilityClass::FallbackImportDisabled);</div>
+<div class="line"><a name="l01476"></a><span class="lineno"> 1476</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="l01477"></a><span class="lineno"> 1477</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="l01478"></a><span class="lineno"> 1478</span>&#160; {</div>
+<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>&#160; <span class="keywordflow">return</span> EdgeStrategy::ExportToTarget;</div>
+<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>&#160; }</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; }</div>
+<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>&#160; }</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; <span class="comment">// Search for copy options via map/unmap</span></div>
+<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160; <span class="keywordflow">if</span> (srcFactory-&gt;SupportsMapUnmap())</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; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; pref : dstPrefs)</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; ITensorHandleFactory* dstFactory = registry.GetFactory(pref);</div>
+<div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>&#160; <span class="keywordflow">if</span> (dstFactory &amp;&amp; dstFactory-&gt;SupportsMapUnmap())</div>
+<div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>&#160; {</div>
+<div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>&#160; <span class="keywordflow">return</span> EdgeStrategy::CopyToTarget;</div>
+<div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>&#160; }</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; </div>
+<div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>&#160; <span class="keywordflow">return</span> EdgeStrategy::Undefined;</div>
+<div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>&#160;}</div>
+</div><!-- fragment -->
+<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#l00277">Layer::GetBackendId()</a>, <a class="el" href="include_2armnn_2backends_2_i_tensor_handle_factory_8hpp_source.xhtml#l00093">ITensorHandleFactory::GetCapabilities()</a>, <a class="el" href="include_2armnn_2backends_2_i_tensor_handle_factory_8hpp_source.xhtml#l00090">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#l00091">ITensorHandleFactory::GetImportFlags()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00273">Layer::GetType()</a>, <a class="el" href="include_2armnn_2backends_2_i_tensor_handle_factory_8hpp_source.xhtml#l00050">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#l00088">ITensorHandleFactory::SupportsMapUnmap()</a>, and <a class="el" href="namespacearmnn.xhtml#aff209afc1dc598da399e3e78617ce016aec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a>.</p>
<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.xhtml#l01502">SelectTensorHandleStrategy()</a>.</p>
-<div class="fragment"><div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>&#160;{</div><div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>&#160; <span class="keyword">auto</span> toBackend = backends.find(connectedLayer.GetBackendId());</div><div class="line"><a name="l01421"></a><span class="lineno"> 1421</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="l01422"></a><span class="lineno"> 1422</span>&#160;</div><div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>&#160; <span class="keyword">auto</span> dstPrefs = toBackend-&gt;second.get()-&gt;GetHandleFactoryPreferences();</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; <span class="comment">// Legacy API check for backward compatibility</span></div><div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>&#160; <span class="keywordflow">if</span> (srcFactoryId == ITensorHandleFactory::LegacyFactoryId || dstPrefs.empty())</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">if</span> (layer.GetBackendId() != connectedLayer.GetBackendId())</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="keywordflow">return</span> EdgeStrategy::CopyToTarget;</div><div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>&#160; }</div><div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>&#160; {</div><div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>&#160; <span class="keywordflow">return</span> EdgeStrategy::DirectCompatibility;</div><div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>&#160; }</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;</div><div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>&#160; <span class="comment">// TensorHandleFactory API present, so perform more sophisticated strategies.</span></div><div class="line"><a name="l01439"></a><span class="lineno"> 1439</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="l01440"></a><span class="lineno"> 1440</span>&#160; <span class="keywordflow">if</span> (connectedLayer.GetType() == LayerType::Output)</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">return</span> EdgeStrategy::DirectCompatibility;</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;</div><div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>&#160; <span class="comment">// Search for direct match in prefs</span></div><div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; pref : dstPrefs)</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="keywordflow">if</span> (pref == srcFactoryId)</div><div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>&#160; {</div><div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>&#160; <span class="keywordflow">return</span> EdgeStrategy::DirectCompatibility;</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="comment">// Search for export/import options</span></div><div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>&#160; ITensorHandleFactory* srcFactory = registry.GetFactory(srcFactoryId);</div><div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>&#160; <span class="keywordflow">if</span> (srcFactory-&gt;GetExportFlags() != 0 &amp;&amp; importEnabled)</div><div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>&#160; {</div><div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; pref : dstPrefs)</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; ITensorHandleFactory* dstFactory = registry.GetFactory(pref);</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">// Handles cases when a destPref is not listed in TensorHandleFactoryRegistry</span></div><div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>&#160; <span class="keywordflow">if</span> (!dstFactory) {</div><div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>&#160; }</div><div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>&#160; <span class="keywordflow">if</span> ((dstFactory-&gt;GetImportFlags() &amp; srcFactory-&gt;GetExportFlags()) != 0)</div><div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>&#160; {</div><div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160; <span class="keyword">auto</span> srcCapability = srcFactory-&gt;GetCapabilities(&amp;layer, &amp;layer, CapabilityClass::PaddingRequired);</div><div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>&#160; <span class="keyword">auto</span> dstCapability = dstFactory-&gt;GetCapabilities(&amp;connectedLayer,</div><div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>&#160; &amp;connectedLayer,</div><div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>&#160; CapabilityClass::PaddingRequired);</div><div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>&#160; <span class="keyword">auto</span> srcFallback = srcFactory-&gt;GetCapabilities(&amp;layer, &amp;layer, CapabilityClass::FallbackImportDisabled);</div><div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>&#160; <span class="keyword">auto</span> dstFallback = dstFactory-&gt;GetCapabilities(&amp;connectedLayer,</div><div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>&#160; &amp;connectedLayer,</div><div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>&#160; CapabilityClass::FallbackImportDisabled);</div><div class="line"><a name="l01476"></a><span class="lineno"> 1476</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="l01477"></a><span class="lineno"> 1477</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="l01478"></a><span class="lineno"> 1478</span>&#160; {</div><div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>&#160; <span class="keywordflow">return</span> EdgeStrategy::ExportToTarget;</div><div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>&#160; }</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; }</div><div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>&#160; }</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; <span class="comment">// Search for copy options via map/unmap</span></div><div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160; <span class="keywordflow">if</span> (srcFactory-&gt;SupportsMapUnmap())</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; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; pref : dstPrefs)</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; ITensorHandleFactory* dstFactory = registry.GetFactory(pref);</div><div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>&#160; <span class="keywordflow">if</span> (dstFactory &amp;&amp; dstFactory-&gt;SupportsMapUnmap())</div><div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>&#160; {</div><div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>&#160; <span class="keywordflow">return</span> EdgeStrategy::CopyToTarget;</div><div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>&#160; }</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;</div><div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>&#160; <span class="keywordflow">return</span> EdgeStrategy::Undefined;</div><div class="line"><a name="l01499"></a><span class="lineno"> 1499</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="ac40d3e4035af5fbe68d9e126a8d6367c"></a>
@@ -7866,11 +8778,53 @@ Variables</h2></td></tr>
<dl class="section return"><dt>Returns</dt><dd>- A map with names and values for N, ND, K, W, C </dd></dl>
<p class="definition">Definition at line <a class="el" href="_workload_utils_8cpp_source.xhtml#l00300">300</a> of file <a class="el" href="_workload_utils_8cpp_source.xhtml">WorkloadUtils.cpp</a>.</p>
-
+<div class="fragment"><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; std::vector&lt;unsigned int&gt; paramsShape;</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</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="l00304"></a><span class="lineno"> 304</span>&#160; {</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; paramsShape.push_back(inputInfo0.GetShape()[i]);</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="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; std::vector&lt;unsigned int&gt; indicesShape;</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; inputInfo1.GetNumDimensions(); ++i)</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; indicesShape.push_back(inputInfo1.GetShape()[i]);</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; std::map&lt;std::string, unsigned int&gt; keyIndices;</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">// N: number of batches</span></div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; keyIndices[<span class="stringliteral">&quot;N&quot;</span>] = 1;</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; <span class="comment">// ND: number of dimensions that are sliced from params</span></div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; keyIndices[<span class="stringliteral">&quot;ND&quot;</span>] = indicesShape.back();</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="comment">// W: number of indices in each batch (all but the last dimension)</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; keyIndices[<span class="stringliteral">&quot;W&quot;</span>] =</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(std::accumulate(std::begin(indicesShape),</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; std::end(indicesShape) - 1,</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; 1,</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; std::multiplies&lt;&gt;() ));</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <span class="comment">// K: range of each index</span></div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; keyIndices[<span class="stringliteral">&quot;K&quot;</span>] =</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(std::accumulate(std::begin(paramsShape),</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; std::begin(paramsShape) + <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(keyIndices[<span class="stringliteral">&quot;ND&quot;</span>]),</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; 1,</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; std::multiplies&lt;&gt;() ));</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="comment">// C: number of channels for each index</span></div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; keyIndices[<span class="stringliteral">&quot;C&quot;</span>] =</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(std::accumulate(std::begin(paramsShape) + <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(keyIndices[<span class="stringliteral">&quot;ND&quot;</span>]),</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; std::end(paramsShape),</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; 1,</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; std::multiplies&lt;&gt;() ));</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; </div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <span class="keywordflow">return</span> keyIndices;</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160;}</div>
+</div><!-- fragment -->
<p class="reference">References <a class="el" href="_tensor_8hpp_source.xhtml#l00195">TensorInfo::GetNumDimensions()</a>, and <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</a>.</p>
-<p class="reference">Referenced by <a class="el" href="_cl_gather_nd_workload_8cpp_source.xhtml#l00099">ClGatherNdWorkload::ClGatherNdWorkload()</a>, <a class="el" href="_cl_gather_nd_workload_8cpp_source.xhtml#l00016">ClGatherNdWorkloadValidate()</a>, <a class="el" href="_ref_gather_nd_workload_8cpp_source.xhtml#l00021">RefGatherNdWorkload::ExecuteAsync()</a>, <a class="el" href="_workload_utils_8hpp_source.xhtml#l00189">GatherTensorHandlePairs()</a>, <a class="el" href="_neon_gather_nd_workload_8cpp_source.xhtml#l00097">NeonGatherNdWorkload::NeonGatherNdWorkload()</a>, and <a class="el" href="_neon_gather_nd_workload_8cpp_source.xhtml#l00014">NeonGatherNdWorkloadValidate()</a>.</p>
-<div class="fragment"><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; std::vector&lt;unsigned int&gt; paramsShape;</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</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="l00304"></a><span class="lineno"> 304</span>&#160; {</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; paramsShape.push_back(inputInfo0.GetShape()[i]);</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="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; std::vector&lt;unsigned int&gt; indicesShape;</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; inputInfo1.GetNumDimensions(); ++i)</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; indicesShape.push_back(inputInfo1.GetShape()[i]);</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; std::map&lt;std::string, unsigned int&gt; keyIndices;</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">// N: number of batches</span></div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; keyIndices[<span class="stringliteral">&quot;N&quot;</span>] = 1;</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; <span class="comment">// ND: number of dimensions that are sliced from params</span></div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; keyIndices[<span class="stringliteral">&quot;ND&quot;</span>] = indicesShape.back();</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="comment">// W: number of indices in each batch (all but the last dimension)</span></div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; keyIndices[<span class="stringliteral">&quot;W&quot;</span>] =</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(std::accumulate(std::begin(indicesShape),</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; std::end(indicesShape) - 1,</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; 1,</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; std::multiplies&lt;&gt;() ));</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <span class="comment">// K: range of each index</span></div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; keyIndices[<span class="stringliteral">&quot;K&quot;</span>] =</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(std::accumulate(std::begin(paramsShape),</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; std::begin(paramsShape) + static_cast&lt;int&gt;(keyIndices[<span class="stringliteral">&quot;ND&quot;</span>]),</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; 1,</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; std::multiplies&lt;&gt;() ));</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="comment">// C: number of channels for each index</span></div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; keyIndices[<span class="stringliteral">&quot;C&quot;</span>] =</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(std::accumulate(std::begin(paramsShape) + static_cast&lt;int&gt;(keyIndices[<span class="stringliteral">&quot;ND&quot;</span>]),</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; std::end(paramsShape),</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; 1,</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; std::multiplies&lt;&gt;() ));</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160;</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <span class="keywordflow">return</span> keyIndices;</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160;}</div></div><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_cl_gather_nd_workload_8cpp_source.xhtml#l00099">ClGatherNdWorkload::ClGatherNdWorkload()</a>, <a class="el" href="_cl_gather_nd_workload_8cpp_source.xhtml#l00016">ClGatherNdWorkloadValidate()</a>, <a class="el" href="_neon_gather_nd_workload_8cpp_source.xhtml#l00097">NeonGatherNdWorkload::NeonGatherNdWorkload()</a>, and <a class="el" href="_neon_gather_nd_workload_8cpp_source.xhtml#l00014">NeonGatherNdWorkloadValidate()</a>.</p>
+
</div>
</div>
<a id="ad52508167694d6d259525b3eec1a4267"></a>
@@ -7912,13 +8866,156 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.xhtml#l01263">1263</a> of file <a class="el" href="_network_8cpp_source.xhtml">Network.cpp</a>.</p>
-
+<div class="fragment"><div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160;{</div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160; <span class="comment">// First ensure the from backends can support the TensorHandeAPI</span></div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160; Layer&amp; layer = outputSlot.GetOwningLayer();</div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160; <span class="keyword">auto</span> frmBackend = backends.find(layer.GetBackendId());</div>
+<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160; <span class="keywordflow">if</span> (frmBackend == backends.end() ||</div>
+<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160; !frmBackend-&gt;second-&gt;SupportsTensorAllocatorAPI())</div>
+<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160; {</div>
+<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160; <span class="keywordflow">return</span> ITensorHandleFactory::LegacyFactoryId;</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; </div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160; <span class="keywordtype">bool</span> outputConnection = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; connection : outputSlot.GetConnections())</div>
+<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160; {</div>
+<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160; <span class="keyword">const</span> Layer&amp; connectedLayer = connection-&gt;GetOwningLayer();</div>
+<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160; <span class="keywordflow">if</span> (connectedLayer.GetType() == LayerType::Output)</div>
+<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160; {</div>
+<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160; outputConnection = <span class="keyword">true</span>;</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; }</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; IBackendInternal* srcBackend = frmBackend-&gt;second.get();</div>
+<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160; <span class="keyword">auto</span> srcPrefs = srcBackend-&gt;GetHandleFactoryPreferences();</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">// Initialize the scores</span></div>
+<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160; std::map&lt;ITensorHandleFactory::FactoryId, int&gt; factoryScores;</div>
+<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; pref : srcPrefs)</div>
+<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160; {</div>
+<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160; <span class="keywordflow">if</span> (exportEnabled)</div>
+<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160; {</div>
+<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160; ITensorHandleFactory* factory = registry.GetFactory(pref);</div>
+<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160; <span class="keywordflow">if</span> (outputConnection)</div>
+<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160; {</div>
+<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160; <span class="comment">// Check if this is fallback case</span></div>
+<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160; <span class="keywordtype">bool</span> fallbackConnection = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; inputSlot : layer.GetInputSlots())</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">if</span> (inputSlot.GetConnectedOutputSlot()-&gt;GetOwningLayer().GetBackendId() != layer.GetBackendId())</div>
+<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160; {</div>
+<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160; fallbackConnection = <span class="keyword">true</span>;</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; }</div>
+<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160; <span class="keywordflow">if</span> (fallbackConnection)</div>
+<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160; {</div>
+<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160; <span class="keyword">auto</span> factoryCap = factory-&gt;GetCapabilities(&amp;layer, &amp;layer, CapabilityClass::FallbackImportDisabled);</div>
+<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160; <span class="comment">// Cannot use factory import if fallback import is not supported.</span></div>
+<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160; <span class="keywordflow">if</span> (!factoryCap.empty())</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="keywordflow">continue</span>;</div>
+<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160; }</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (factory-&gt;GetExportFlags() == 0)</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; <span class="keywordflow">continue</span>;</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; }</div>
+<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>&#160; <span class="keywordflow">if</span> (!outputConnection)</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; <span class="keyword">auto</span> factoryCap = factory-&gt;GetCapabilities(&amp;layer, &amp;layer, CapabilityClass::FallbackImportDisabled);</div>
+<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160; <span class="comment">// Cannot use factory import if fallback import is not supported.</span></div>
+<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160; <span class="keywordflow">if</span> (!factoryCap.empty())</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">continue</span>;</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; }</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="keywordflow">else</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; <span class="comment">// Only consider factories that support map/unmap</span></div>
+<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160; ITensorHandleFactory* factory = registry.GetFactory(pref);</div>
+<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160; <span class="keywordflow">if</span> (!factory-&gt;SupportsMapUnmap())</div>
+<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160; {</div>
+<div class="line"><a name="l01339"></a><span class="lineno"> 1339</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="l01340"></a><span class="lineno"> 1340</span>&#160; <span class="keywordflow">continue</span>;</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; </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="keyword">auto</span> it = factoryScores.find(pref);</div>
+<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>&#160; <span class="keywordflow">if</span> (it == factoryScores.end())</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">// Add new score to the table</span></div>
+<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>&#160; factoryScores[pref] = 0;</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; }</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; <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="l01354"></a><span class="lineno"> 1354</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; connection : outputSlot.GetConnections())</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; <span class="keyword">const</span> Layer&amp; connectedLayer = connection-&gt;GetOwningLayer();</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="keyword">auto</span> toBackend = backends.find(connectedLayer.GetBackendId());</div>
+<div class="line"><a name="l01359"></a><span class="lineno"> 1359</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="l01360"></a><span class="lineno"> 1360</span>&#160; </div>
+<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>&#160; <span class="keyword">auto</span> dstPrefs = toBackend-&gt;second.get()-&gt;GetHandleFactoryPreferences();</div>
+<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; src : srcPrefs)</div>
+<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>&#160; {</div>
+<div class="line"><a name="l01364"></a><span class="lineno"> 1364</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="l01365"></a><span class="lineno"> 1365</span>&#160; {</div>
+<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>&#160; <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>&#160; }</div>
+<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>&#160; </div>
+<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; dst : dstPrefs)</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; <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.xhtml#a5ee4a1cca55f69b31e625c786655ed1a">RequiresCopy</a>(src, dst, registry))</div>
+<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>&#160; {</div>
+<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>&#160; <span class="comment">// Copy avoided, increase the score</span></div>
+<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>&#160; factoryScores[src]++;</div>
+<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>&#160; <span class="keywordflow">break</span>;</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; }</div>
+<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160; }</div>
+<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>&#160; }</div>
+<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>&#160; </div>
+<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160; <span class="comment">// Find the lowest score</span></div>
+<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160; <span class="keywordtype">int</span> minScore = std::numeric_limits&lt;int&gt;::max();</div>
+<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it : factoryScores)</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; minScore = std::min(minScore, it.second);</div>
+<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>&#160; }</div>
+<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>&#160; </div>
+<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160; <span class="comment">// Collect factories matching the best(lowest) score</span></div>
+<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>&#160; std::vector&lt;ITensorHandleFactory::FactoryId&gt; optimalFactories;</div>
+<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it : factoryScores)</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; <span class="keywordflow">if</span> (it.second == minScore)</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; optimalFactories.push_back(it.first);</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; }</div>
+<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160; </div>
+<div class="line"><a name="l01398"></a><span class="lineno"> 1398</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="l01399"></a><span class="lineno"> 1399</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; srcPref : srcPrefs)</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; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; comp : optimalFactories)</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> (comp == srcPref)</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; <span class="keywordflow">return</span> comp;</div>
+<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>&#160; }</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; }</div>
+<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>&#160; </div>
+<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>&#160; <span class="keywordflow">return</span> ITensorHandleFactory::LegacyFactoryId;</div>
+<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>&#160;}</div>
+</div><!-- fragment -->
<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#l00277">Layer::GetBackendId()</a>, <a class="el" href="include_2armnn_2backends_2_i_tensor_handle_factory_8hpp_source.xhtml#l00093">ITensorHandleFactory::GetCapabilities()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00132">OutputSlot::GetConnections()</a>, <a class="el" href="include_2armnn_2backends_2_i_tensor_handle_factory_8hpp_source.xhtml#l00090">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#l00245">Layer::GetInputSlots()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00119">OutputSlot::GetOwningLayer()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00273">Layer::GetType()</a>, <a class="el" href="include_2armnn_2backends_2_i_tensor_handle_factory_8hpp_source.xhtml#l00050">ITensorHandleFactory::LegacyFactoryId</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a29c2c02a361c9d7028472e5d92cd4a54">Output</a>, <a class="el" href="_network_8cpp_source.xhtml#l01148">RequiresCopy()</a>, and <a class="el" href="include_2armnn_2backends_2_i_tensor_handle_factory_8hpp_source.xhtml#l00088">ITensorHandleFactory::SupportsMapUnmap()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.xhtml#l01502">SelectTensorHandleStrategy()</a>.</p>
-<div class="fragment"><div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160;{</div><div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160; <span class="comment">// First ensure the from backends can support the TensorHandeAPI</span></div><div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160; Layer&amp; layer = outputSlot.GetOwningLayer();</div><div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160; <span class="keyword">auto</span> frmBackend = backends.find(layer.GetBackendId());</div><div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160; <span class="keywordflow">if</span> (frmBackend == backends.end() ||</div><div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160; !frmBackend-&gt;second-&gt;SupportsTensorAllocatorAPI())</div><div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160; {</div><div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160; <span class="keywordflow">return</span> ITensorHandleFactory::LegacyFactoryId;</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;</div><div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160; <span class="keywordtype">bool</span> outputConnection = <span class="keyword">false</span>;</div><div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; connection : outputSlot.GetConnections())</div><div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160; {</div><div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160; <span class="keyword">const</span> Layer&amp; connectedLayer = connection-&gt;GetOwningLayer();</div><div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160; <span class="keywordflow">if</span> (connectedLayer.GetType() == LayerType::Output)</div><div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160; {</div><div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160; outputConnection = <span class="keyword">true</span>;</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; }</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; IBackendInternal* srcBackend = frmBackend-&gt;second.get();</div><div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160; <span class="keyword">auto</span> srcPrefs = srcBackend-&gt;GetHandleFactoryPreferences();</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">// Initialize the scores</span></div><div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160; std::map&lt;ITensorHandleFactory::FactoryId, int&gt; factoryScores;</div><div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; pref : srcPrefs)</div><div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160; {</div><div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160; <span class="keywordflow">if</span> (exportEnabled)</div><div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160; {</div><div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160; ITensorHandleFactory* factory = registry.GetFactory(pref);</div><div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160; <span class="keywordflow">if</span> (outputConnection)</div><div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160; {</div><div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160; <span class="comment">// Check if this is fallback case</span></div><div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160; <span class="keywordtype">bool</span> fallbackConnection = <span class="keyword">false</span>;</div><div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; inputSlot : layer.GetInputSlots())</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">if</span> (inputSlot.GetConnectedOutputSlot()-&gt;GetOwningLayer().GetBackendId() != layer.GetBackendId())</div><div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160; {</div><div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160; fallbackConnection = <span class="keyword">true</span>;</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; }</div><div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160; <span class="keywordflow">if</span> (fallbackConnection)</div><div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160; {</div><div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160; <span class="keyword">auto</span> factoryCap = factory-&gt;GetCapabilities(&amp;layer, &amp;layer, CapabilityClass::FallbackImportDisabled);</div><div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160; <span class="comment">// Cannot use factory import if fallback import is not supported.</span></div><div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160; <span class="keywordflow">if</span> (!factoryCap.empty())</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="keywordflow">continue</span>;</div><div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160; }</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (factory-&gt;GetExportFlags() == 0)</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; <span class="keywordflow">continue</span>;</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; }</div><div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>&#160; <span class="keywordflow">if</span> (!outputConnection)</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; <span class="keyword">auto</span> factoryCap = factory-&gt;GetCapabilities(&amp;layer, &amp;layer, CapabilityClass::FallbackImportDisabled);</div><div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160; <span class="comment">// Cannot use factory import if fallback import is not supported.</span></div><div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160; <span class="keywordflow">if</span> (!factoryCap.empty())</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">continue</span>;</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; }</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="keywordflow">else</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; <span class="comment">// Only consider factories that support map/unmap</span></div><div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160; ITensorHandleFactory* factory = registry.GetFactory(pref);</div><div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160; <span class="keywordflow">if</span> (!factory-&gt;SupportsMapUnmap())</div><div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160; {</div><div class="line"><a name="l01339"></a><span class="lineno"> 1339</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="l01340"></a><span class="lineno"> 1340</span>&#160; <span class="keywordflow">continue</span>;</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;</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="keyword">auto</span> it = factoryScores.find(pref);</div><div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>&#160; <span class="keywordflow">if</span> (it == factoryScores.end())</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">// Add new score to the table</span></div><div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>&#160; factoryScores[pref] = 0;</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; }</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; <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="l01354"></a><span class="lineno"> 1354</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; connection : outputSlot.GetConnections())</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; <span class="keyword">const</span> Layer&amp; connectedLayer = connection-&gt;GetOwningLayer();</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="keyword">auto</span> toBackend = backends.find(connectedLayer.GetBackendId());</div><div class="line"><a name="l01359"></a><span class="lineno"> 1359</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="l01360"></a><span class="lineno"> 1360</span>&#160;</div><div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>&#160; <span class="keyword">auto</span> dstPrefs = toBackend-&gt;second.get()-&gt;GetHandleFactoryPreferences();</div><div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; src : srcPrefs)</div><div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>&#160; {</div><div class="line"><a name="l01364"></a><span class="lineno"> 1364</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="l01365"></a><span class="lineno"> 1365</span>&#160; {</div><div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>&#160; }</div><div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>&#160;</div><div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; dst : dstPrefs)</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; <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.xhtml#a5ee4a1cca55f69b31e625c786655ed1a">RequiresCopy</a>(src, dst, registry))</div><div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>&#160; {</div><div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>&#160; <span class="comment">// Copy avoided, increase the score</span></div><div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>&#160; factoryScores[src]++;</div><div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>&#160; <span class="keywordflow">break</span>;</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; }</div><div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160; }</div><div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>&#160; }</div><div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>&#160;</div><div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160; <span class="comment">// Find the lowest score</span></div><div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160; <span class="keywordtype">int</span> minScore = std::numeric_limits&lt;int&gt;::max();</div><div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it : factoryScores)</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; minScore = std::min(minScore, it.second);</div><div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>&#160; }</div><div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>&#160;</div><div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160; <span class="comment">// Collect factories matching the best(lowest) score</span></div><div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>&#160; std::vector&lt;ITensorHandleFactory::FactoryId&gt; optimalFactories;</div><div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it : factoryScores)</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; <span class="keywordflow">if</span> (it.second == minScore)</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; optimalFactories.push_back(it.first);</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; }</div><div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160;</div><div class="line"><a name="l01398"></a><span class="lineno"> 1398</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="l01399"></a><span class="lineno"> 1399</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; srcPref : srcPrefs)</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; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; comp : optimalFactories)</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> (comp == srcPref)</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; <span class="keywordflow">return</span> comp;</div><div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>&#160; }</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; }</div><div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>&#160;</div><div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>&#160; <span class="keywordflow">return</span> ITensorHandleFactory::LegacyFactoryId;</div><div class="line"><a name="l01411"></a><span class="lineno"> 1411</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#l01148">Network.cpp:1148</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>
@@ -7960,14 +9057,90 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.xhtml#l01168">1168</a> of file <a class="el" href="_network_8cpp_source.xhtml">Network.cpp</a>.</p>
-
+<div class="fragment"><div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160;{</div>
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160; Layer&amp; layer = slot.GetOwningLayer();</div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer.GetType() == LayerType::Input);</div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160; </div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</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="l01177"></a><span class="lineno"> 1177</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="l01178"></a><span class="lineno"> 1178</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="l01179"></a><span class="lineno"> 1179</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="l01180"></a><span class="lineno"> 1180</span>&#160; </div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160; <span class="comment">// First ensure the from backends can support the TensorHandeAPI</span></div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160; <span class="keyword">auto</span> frmBackend = backends.find(layer.GetBackendId());</div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160; <span class="keywordflow">if</span> (frmBackend == backends.end() ||</div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160; !frmBackend-&gt;second-&gt;SupportsTensorAllocatorAPI())</div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160; {</div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160; <span class="keywordflow">return</span> ITensorHandleFactory::LegacyFactoryId;</div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160; }</div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160; </div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</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="l01190"></a><span class="lineno"> 1190</span>&#160; <span class="comment">// fewest copies.</span></div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160; std::map&lt;ITensorHandleFactory::FactoryId, int&gt; factoryScores;</div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160; <span class="keywordtype">int</span> topScore = 0;</div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160; <a class="code" href="namespacearmnn.xhtml#a947e07902b1b5d98b57eeae34053146b">ITensorHandleFactory::FactoryId</a> topChoice = ITensorHandleFactory::LegacyFactoryId;</div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160; </div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; connection : slot.GetConnections())</div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160; {</div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160; </div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160; <span class="keyword">const</span> Layer&amp; connectedLayer = connection-&gt;GetOwningLayer();</div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160; </div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160; <span class="keyword">auto</span> toBackend = backends.find(connectedLayer.GetBackendId());</div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</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="l01202"></a><span class="lineno"> 1202</span>&#160; </div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160; <span class="keywordflow">if</span> (!toBackend-&gt;second.get()-&gt;SupportsTensorAllocatorAPI())</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; <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="l01206"></a><span class="lineno"> 1206</span>&#160; <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160; }</div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160; </div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160; <span class="keyword">auto</span> dstPrefs = toBackend-&gt;second.get()-&gt;GetHandleFactoryPreferences();</div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; dst : dstPrefs)</div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160; {</div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</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="l01213"></a><span class="lineno"> 1213</span>&#160; <span class="comment">// support either the map/unmap API or Import API</span></div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160; ITensorHandleFactory* factory = registry.GetFactory(dst);</div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160; <span class="keywordflow">if</span> (importEnabled &amp;&amp; factory-&gt;GetImportFlags() == 0)</div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160; {</div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160; <span class="keywordflow">continue</span>;</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!importEnabled &amp;&amp; !factory-&gt;SupportsMapUnmap())</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; <span class="keywordflow">continue</span>;</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; </div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160; <span class="keyword">auto</span> it = factoryScores.find(dst);</div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160; <span class="keywordflow">if</span> (it == factoryScores.end())</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">// Add new score to the table</span></div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160; factoryScores[dst] = 0;</div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160; <span class="keywordflow">if</span> (topChoice == ITensorHandleFactory::LegacyFactoryId)</div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160; {</div>
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160; topChoice = dst;</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; }</div>
+<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160; <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160; {</div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160; <span class="comment">// Increase the score</span></div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160; factoryScores[dst]++;</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; <span class="comment">// Track the best option</span></div>
+<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160; <span class="keywordflow">if</span> (factoryScores[dst] &gt; topScore)</div>
+<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160; {</div>
+<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160; topScore = factoryScores[dst];</div>
+<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160; topChoice = dst;</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; }</div>
+<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160; }</div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160; }</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; <span class="keywordflow">return</span> topChoice;</div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160;}</div>
+</div><!-- fragment -->
<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#l00277">Layer::GetBackendId()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00132">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#l00091">ITensorHandleFactory::GetImportFlags()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00119">OutputSlot::GetOwningLayer()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00273">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#l00050">ITensorHandleFactory::LegacyFactoryId</a>, and <a class="el" href="include_2armnn_2backends_2_i_tensor_handle_factory_8hpp_source.xhtml#l00088">ITensorHandleFactory::SupportsMapUnmap()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.xhtml#l01502">SelectTensorHandleStrategy()</a>.</p>
-<div class="fragment"><div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160;{</div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160; Layer&amp; layer = slot.GetOwningLayer();</div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer.GetType() == LayerType::Input);</div><div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160;</div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</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="l01177"></a><span class="lineno"> 1177</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="l01178"></a><span class="lineno"> 1178</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="l01179"></a><span class="lineno"> 1179</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="l01180"></a><span class="lineno"> 1180</span>&#160;</div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160; <span class="comment">// First ensure the from backends can support the TensorHandeAPI</span></div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160; <span class="keyword">auto</span> frmBackend = backends.find(layer.GetBackendId());</div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160; <span class="keywordflow">if</span> (frmBackend == backends.end() ||</div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160; !frmBackend-&gt;second-&gt;SupportsTensorAllocatorAPI())</div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160; {</div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160; <span class="keywordflow">return</span> ITensorHandleFactory::LegacyFactoryId;</div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160; }</div><div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160;</div><div class="line"><a name="l01189"></a><span class="lineno"> 1189</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="l01190"></a><span class="lineno"> 1190</span>&#160; <span class="comment">// fewest copies.</span></div><div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160; std::map&lt;ITensorHandleFactory::FactoryId, int&gt; factoryScores;</div><div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160; <span class="keywordtype">int</span> topScore = 0;</div><div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160; <a class="code" href="namespacearmnn.xhtml#a947e07902b1b5d98b57eeae34053146b">ITensorHandleFactory::FactoryId</a> topChoice = ITensorHandleFactory::LegacyFactoryId;</div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160;</div><div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; connection : slot.GetConnections())</div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160; {</div><div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160;</div><div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160; <span class="keyword">const</span> Layer&amp; connectedLayer = connection-&gt;GetOwningLayer();</div><div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160;</div><div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160; <span class="keyword">auto</span> toBackend = backends.find(connectedLayer.GetBackendId());</div><div class="line"><a name="l01201"></a><span class="lineno"> 1201</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="l01202"></a><span class="lineno"> 1202</span>&#160;</div><div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160; <span class="keywordflow">if</span> (!toBackend-&gt;second.get()-&gt;SupportsTensorAllocatorAPI())</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; <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="l01206"></a><span class="lineno"> 1206</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160; }</div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160;</div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160; <span class="keyword">auto</span> dstPrefs = toBackend-&gt;second.get()-&gt;GetHandleFactoryPreferences();</div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; dst : dstPrefs)</div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160; {</div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</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="l01213"></a><span class="lineno"> 1213</span>&#160; <span class="comment">// support either the map/unmap API or Import API</span></div><div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160; ITensorHandleFactory* factory = registry.GetFactory(dst);</div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160; <span class="keywordflow">if</span> (importEnabled &amp;&amp; factory-&gt;GetImportFlags() == 0)</div><div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160; {</div><div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160; <span class="keywordflow">continue</span>;</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!importEnabled &amp;&amp; !factory-&gt;SupportsMapUnmap())</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; <span class="keywordflow">continue</span>;</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;</div><div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160; <span class="keyword">auto</span> it = factoryScores.find(dst);</div><div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160; <span class="keywordflow">if</span> (it == factoryScores.end())</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">// Add new score to the table</span></div><div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160; factoryScores[dst] = 0;</div><div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160; <span class="keywordflow">if</span> (topChoice == ITensorHandleFactory::LegacyFactoryId)</div><div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160; {</div><div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160; topChoice = dst;</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; }</div><div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160; {</div><div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160; <span class="comment">// Increase the score</span></div><div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160; factoryScores[dst]++;</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; <span class="comment">// Track the best option</span></div><div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160; <span class="keywordflow">if</span> (factoryScores[dst] &gt; topScore)</div><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160; {</div><div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160; topScore = factoryScores[dst];</div><div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160; topChoice = dst;</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; }</div><div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160; }</div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160; }</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; <span class="keywordflow">return</span> topChoice;</div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160;}</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>
@@ -8003,12 +9176,15 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.xhtml#l01253">1253</a> of file <a class="el" href="_network_8cpp_source.xhtml">Network.cpp</a>.</p>
-
+<div class="fragment"><div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160;{</div>
+<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(backends, slot, registry);</div>
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160; <span class="keywordflow">return</span> ITensorHandleFactory::DeferredFactoryId;</div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160;}</div>
+</div><!-- fragment -->
<p class="reference">References <a class="el" href="include_2armnn_2backends_2_i_tensor_handle_factory_8hpp_source.xhtml#l00051">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#l01502">SelectTensorHandleStrategy()</a>.</p>
-<div class="fragment"><div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160;{</div><div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(backends, slot, registry);</div><div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160; <span class="keywordflow">return</span> ITensorHandleFactory::DeferredFactoryId;</div><div class="line"><a name="l01259"></a><span class="lineno"> 1259</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>
@@ -8044,11 +9220,67 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00250">250</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="_network_8cpp_source.xhtml#l00245">INetwork::AddReduceLayer()</a>, <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>, <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00352">ComputeReductionTensorShape()</a>, <a class="el" href="include_2armnn_2backends_2_optimization_views_8hpp_source.xhtml#l00067">OptimizationViews::GetINetwork()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00324">Layer::GetInputSlot()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00326">Layer::GetOutputSlot()</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01501">ReduceDescriptor::m_KeepDims</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01503">ReduceDescriptor::m_vAxis</a>, and <a class="el" href="_layer_8cpp_source.xhtml#l00087">OutputSlot::SetTensorInfo()</a>.</p>
-<div class="fragment"><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">// Vector of new chained layers, used for substitution.</span></div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; std::vector&lt;IConnectableLayer*&gt; layers;</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="comment">// Vector of axes so each layer is reshaped correctly.</span></div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; std::vector&lt;uint32_t&gt; axes;</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> recalulatedAxis = 0;</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; <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="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">// Get TensorInfo from base layer and reduce shape using axis.</span></div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; TensorInfo layerInfo = baseLayer-&gt;GetInputSlot(0).GetConnectedOutputSlot()-&gt;GetTensorInfo();</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; axes.emplace_back(desc.m_vAxis[i]);</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="keyword">const</span> TensorInfo&amp; reducedTensorInfo = <a class="code" href="namespacearmnn.xhtml#a9d43aa01b882d8776ab9403eea3cf779">ComputeReductionTensorShape</a>(layerInfo,</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; axes,</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; desc.m_KeepDims);</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">// Create a vector for the single axis to be assigned to the descriptor.</span></div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="comment">// Update axis if keepDims is set reduce layers correctly.</span></div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; std::vector&lt;uint32_t&gt; singleAxis(1, desc.m_vAxis[i] - recalulatedAxis);</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">// Create a descriptor and assign single axis.</span></div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; ReduceDescriptor newReduceDescriptor = baseLayer-&gt;GetParameters();</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; newReduceDescriptor.m_vAxis.assign(singleAxis.begin(), singleAxis.end());</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="comment">// Add new layer to graph.</span></div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; std::string layerName = <span class="stringliteral">&quot;reduce_layer_&quot;</span> + std::to_string(i);</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; Layer* replacementLayer = PolymorphicDowncast&lt;Layer*&gt;(</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; optimizationViews.GetINetwork()-&gt;AddReduceLayer(newReduceDescriptor,</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; layerName.c_str()));</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">// Connect previous layer with new layer.</span></div><div class="line"><a name="l00288"></a><span class="lineno"> 288</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="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keywordflow">if</span> (!layers.empty())</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; layers[i - 1]-&gt;GetOutputSlot(0).Connect(replacementLayer-&gt;GetInputSlot(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="comment">// Set updated tensorInfo for new layer.</span></div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; replacementLayer-&gt;GetOutputSlot(0).SetTensorInfo(reducedTensorInfo);</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; <span class="keywordflow">if</span> (!desc.m_KeepDims)</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; recalulatedAxis++;</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; layers.emplace_back(replacementLayer);</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;</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</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="l00306"></a><span class="lineno"> 306</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(baseLayer-&gt;GetOutputSlot(0).GetTensorInfo() ==</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; PolymorphicDowncast&lt;Layer*&gt;(layers.back())-&gt;GetOutputSlot().GetTensorInfo());</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">return</span> layers;</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</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_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#l00352">ArmComputeUtils.hpp:352</a></div></div>
+<div class="fragment"><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">// Vector of new chained layers, used for substitution.</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; std::vector&lt;IConnectableLayer*&gt; layers;</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="comment">// Vector of axes so each layer is reshaped correctly.</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; std::vector&lt;uint32_t&gt; axes;</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> recalulatedAxis = 0;</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; <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="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">// Get TensorInfo from base layer and reduce shape using axis.</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; TensorInfo layerInfo = baseLayer-&gt;GetInputSlot(0).GetConnectedOutputSlot()-&gt;GetTensorInfo();</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; axes.emplace_back(desc.m_vAxis[i]);</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="keyword">const</span> TensorInfo&amp; reducedTensorInfo = <a class="code" href="namespacearmnn.xhtml#a9d43aa01b882d8776ab9403eea3cf779">ComputeReductionTensorShape</a>(layerInfo,</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; axes,</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; desc.m_KeepDims);</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">// Create a vector for the single axis to be assigned to the descriptor.</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="comment">// Update axis if keepDims is set reduce layers correctly.</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; std::vector&lt;uint32_t&gt; singleAxis(1, desc.m_vAxis[i] - recalulatedAxis);</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">// Create a descriptor and assign single axis.</span></div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; ReduceDescriptor newReduceDescriptor = baseLayer-&gt;GetParameters();</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; newReduceDescriptor.m_vAxis.assign(singleAxis.begin(), singleAxis.end());</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="comment">// Add new layer to graph.</span></div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; std::string layerName = <span class="stringliteral">&quot;reduce_layer_&quot;</span> + std::to_string(i);</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; Layer* replacementLayer = PolymorphicDowncast&lt;Layer*&gt;(</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; optimizationViews.GetINetwork()-&gt;AddReduceLayer(newReduceDescriptor,</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; layerName.c_str()));</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">// Connect previous layer with new layer.</span></div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</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="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keywordflow">if</span> (!layers.empty())</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; layers[i - 1]-&gt;GetOutputSlot(0).Connect(replacementLayer-&gt;GetInputSlot(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="comment">// Set updated tensorInfo for new layer.</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; replacementLayer-&gt;GetOutputSlot(0).SetTensorInfo(reducedTensorInfo);</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; <span class="keywordflow">if</span> (!desc.m_KeepDims)</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; recalulatedAxis++;</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; layers.emplace_back(replacementLayer);</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; </div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</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="l00306"></a><span class="lineno"> 306</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(baseLayer-&gt;GetOutputSlot(0).GetTensorInfo() ==</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; PolymorphicDowncast&lt;Layer*&gt;(layers.back())-&gt;GetOutputSlot().GetTensorInfo());</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">return</span> layers;</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160;}</div>
</div><!-- fragment -->
+<p class="reference">References <a class="el" href="_network_8cpp_source.xhtml#l00245">INetwork::AddReduceLayer()</a>, <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>, <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00352">ComputeReductionTensorShape()</a>, <a class="el" href="include_2armnn_2backends_2_optimization_views_8hpp_source.xhtml#l00067">OptimizationViews::GetINetwork()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00324">Layer::GetInputSlot()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00326">Layer::GetOutputSlot()</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01501">ReduceDescriptor::m_KeepDims</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01503">ReduceDescriptor::m_vAxis</a>, and <a class="el" href="_layer_8cpp_source.xhtml#l00087">OutputSlot::SetTensorInfo()</a>.</p>
+
</div>
</div>
<a id="a84f86b4de5adf0b164e811c87051a0ee"></a>
@@ -8086,13 +9318,16 @@ Variables</h2></td></tr>
</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>
+<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> (<span class="keyword">static_cast&lt;</span><a class="code" href="namespacearmnn.xhtml#a5b05f3b7208ec7cea3338e30057c0bac">MemorySourceFlags</a><span class="keyword">&gt;</span>(source) &amp; flags) != 0;</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;}</div>
+</div><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_loaded_network_8cpp_source.xhtml#l01418">LoadedNetwork::ImportInputs()</a>, and <a class="el" href="_loaded_network_8cpp_source.xhtml#l01560">LoadedNetwork::ImportOutputs()</a>.</p>
-<p class="reference">Referenced by <a class="el" href="_loaded_network_8cpp_source.xhtml#l01222">LoadedNetwork::FreeWorkingMemory()</a>, <a class="el" href="_loaded_network_8cpp_source.xhtml#l01418">LoadedNetwork::ImportInputs()</a>, and <a class="el" href="_loaded_network_8cpp_source.xhtml#l01560">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="af002111f64aee648e3258247075cae36"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#af002111f64aee648e3258247075cae36">&#9670;&nbsp;</a></span>CheckScaleSetOnQuantizedType()</h2>
+<a id="a8bf1222ae8931bf663fa076b3e3b6f0e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8bf1222ae8931bf663fa076b3e3b6f0e">&#9670;&nbsp;</a></span>CheckScaleSetOnQuantizedType()</h2>
<div class="memitem">
<div class="memproto">
@@ -8106,7 +9341,7 @@ Variables</h2></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="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>
@@ -8118,20 +9353,50 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.xhtml#l00571">571</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#l00212">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#l00227">Layer::GetNameStr()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00322">Layer::GetNumOutputSlots()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00326">Layer::GetOutputSlot()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00478">TensorInfo::GetQuantizationOffset()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00461">TensorInfo::GetQuantizationScale()</a>, <a class="el" href="_layer_8cpp_source.xhtml#l00092">OutputSlot::GetTensorInfo()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00273">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#l00532">ReportError()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00489">TensorInfo::SetQuantizationOffset()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00473">TensorInfo::SetQuantizationScale()</a>, <a class="el" href="_layer_8cpp_source.xhtml#l00087">OutputSlot::SetTensorInfo()</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a31d953b9d49a6b4378f45097047976d0">Softmax</a>, and <a class="el" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407a7b83d3f08fa392b79e3f553b585971cd">warning</a>.</p>
+<div class="fragment"><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160;{</div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; <span class="keywordtype">bool</span> noErrors = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numOutputs = layer-&gt;GetNumOutputSlots();</div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</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="l00576"></a><span class="lineno"> 576</span>&#160; OutputSlot&amp; outputSlot = layer-&gt;GetOutputSlot(i);</div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; TensorInfo <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a> = outputSlot.GetTensorInfo();</div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; <span class="keywordflow">if</span> (DataType::QAsymmU8 == <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetDataType())</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; <span class="keywordflow">if</span> (0.f == <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale())</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; noErrors = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; std::stringstream ss;</div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</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="l00585"></a><span class="lineno"> 585</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="l00586"></a><span class="lineno"> 586</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="l00587"></a><span class="lineno"> 587</span>&#160; <a class="code" href="namespacearmnn.xhtml#a3cf1cee98e0ed8b54263ec7279f6ec69">ReportError</a>(ss.str(), errMessages);</div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; }</div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</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="l00590"></a><span class="lineno"> 590</span>&#160; <span class="keywordflow">if</span> ((<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale() != (1.0f / 256.0f) ||</div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset() != 0) &amp;&amp;</div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; layer-&gt;GetType() == <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a31d953b9d49a6b4378f45097047976d0">armnn::LayerType::Softmax</a>)</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; std::stringstream ss;</div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</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="l00596"></a><span class="lineno"> 596</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale() &lt;&lt; <span class="stringliteral">&quot; and Offset: &quot;</span> &lt;&lt; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset() &lt;&lt;</div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</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="l00598"></a><span class="lineno"> 598</span>&#160; <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(warning) &lt;&lt; ss.str();</div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.SetQuantizationScale((1.0f /256.0f));</div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.SetQuantizationOffset(0);</div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; outputSlot.SetTensorInfo(info);</div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; }</div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; }</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; <span class="keywordflow">return</span> noErrors;</div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160;}</div>
+</div><!-- fragment -->
+<p class="reference">References <a class="el" href="_logging_8hpp_source.xhtml#l00212">ARMNN_LOG</a>, <a class="el" href="_internal_types_8cpp_source.xhtml#l00013">GetLayerTypeAsCString()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00227">Layer::GetNameStr()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00322">Layer::GetNumOutputSlots()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00326">Layer::GetOutputSlot()</a>, <a class="el" href="_layer_8cpp_source.xhtml#l00092">OutputSlot::GetTensorInfo()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00273">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#l00532">ReportError()</a>, <a class="el" href="_layer_8cpp_source.xhtml#l00087">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#l00788">AssignBackendsIConnectable()</a>.</p>
-<div class="fragment"><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160;{</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; <span class="keywordtype">bool</span> noErrors = <span class="keyword">true</span>;</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numOutputs = layer-&gt;GetNumOutputSlots();</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</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="l00576"></a><span class="lineno"> 576</span>&#160; OutputSlot&amp; outputSlot = layer-&gt;GetOutputSlot(i);</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; TensorInfo <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a> = outputSlot.GetTensorInfo();</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; <span class="keywordflow">if</span> (DataType::QAsymmU8 == info.GetDataType())</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; <span class="keywordflow">if</span> (0.f == info.GetQuantizationScale())</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; noErrors = <span class="keyword">false</span>;</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; std::stringstream ss;</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</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="l00585"></a><span class="lineno"> 585</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="l00586"></a><span class="lineno"> 586</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="l00587"></a><span class="lineno"> 587</span>&#160; <a class="code" href="namespacearmnn.xhtml#a7658f93d899c8646515a29370e6aa994">ReportError</a>(ss.str(), errMessages);</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; }</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</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="l00590"></a><span class="lineno"> 590</span>&#160; <span class="keywordflow">if</span> ((info.GetQuantizationScale() != (1.0f / 256.0f) ||</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; info.GetQuantizationOffset() != 0) &amp;&amp;</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; layer-&gt;GetType() == <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a31d953b9d49a6b4378f45097047976d0">armnn::LayerType::Softmax</a>)</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; std::stringstream ss;</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</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="l00596"></a><span class="lineno"> 596</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="l00597"></a><span class="lineno"> 597</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="l00598"></a><span class="lineno"> 598</span>&#160; <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(warning) &lt;&lt; ss.str();</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; info.SetQuantizationScale((1.0f /256.0f));</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; info.SetQuantizationOffset(0);</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; outputSlot.SetTensorInfo(info);</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; }</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; }</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; <span class="keywordflow">return</span> noErrors;</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</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#l00532">Network.cpp:532</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#l00212">Logging.hpp:212</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>
+<a id="aa588395c0d3b0074091b497835aaa309"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa588395c0d3b0074091b497835aaa309">&#9670;&nbsp;</a></span>CheckSupportRule()</h2>
<div class="memitem">
<div class="memproto">
@@ -8145,7 +9410,7 @@ Variables</h2></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="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>
@@ -8163,11 +9428,19 @@ Variables</h2></td></tr>
</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>
+<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 -->
+<p class="reference">References <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="_ref_layer_support_8cpp_source.xhtml#l00508">RefLayerSupport::IsActivationSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00575">RefLayerSupport::IsAdditionSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00612">RefLayerSupport::IsArgMinMaxSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00644">RefLayerSupport::IsBatchMatMulSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00689">RefLayerSupport::IsBatchNormalizationSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00735">RefLayerSupport::IsBatchToSpaceNdSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00784">RefLayerSupport::IsCastSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00813">RefLayerSupport::IsChannelShuffleSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00845">RefLayerSupport::IsComparisonSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00876">RefLayerSupport::IsConcatSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00909">RefLayerSupport::IsConstantSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00967">RefLayerSupport::IsConvolution2dSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01036">RefLayerSupport::IsConvolution3dSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01104">RefLayerSupport::IsDebugSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01134">RefLayerSupport::IsDepthToSpaceSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01163">RefLayerSupport::IsDepthwiseConvolutionSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01232">RefLayerSupport::IsDequantizeSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01267">RefLayerSupport::IsDetectionPostProcessSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01309">RefLayerSupport::IsDivisionSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01346">RefLayerSupport::IsElementwiseUnarySupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01397">RefLayerSupport::IsFakeQuantizationSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01415">RefLayerSupport::IsFillSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01440">RefLayerSupport::IsFloorSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01462">RefLayerSupport::IsFullyConnectedSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01528">RefLayerSupport::IsGatherNdSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01559">RefLayerSupport::IsGatherSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01598">RefLayerSupport::IsInstanceNormalizationSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01629">RefLayerSupport::IsL2NormalizationSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01663">RefLayerSupport::IsLogicalBinarySupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01688">RefLayerSupport::IsLogSoftmaxSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01714">RefLayerSupport::IsLstmSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01825">RefLayerSupport::IsMaximumSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01862">RefLayerSupport::IsMeanSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01924">RefLayerSupport::IsMemCopySupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01953">RefLayerSupport::IsMinimumSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01990">RefLayerSupport::IsMultiplicationSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02027">RefLayerSupport::IsNormalizationSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02065">RefLayerSupport::IsPadSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02095">RefLayerSupport::IsPermuteSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02126">RefLayerSupport::IsPooling2dSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02156">RefLayerSupport::IsPooling3dSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02604">RefLayerSupport::IsPreluSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02211">RefLayerSupport::IsQuantizeSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02246">RefLayerSupport::IsRankSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02261">RefLayerSupport::IsReduceSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02290">RefLayerSupport::IsReshapeSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02314">RefLayerSupport::IsResizeSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02343">RefLayerSupport::IsShapeSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02361">RefLayerSupport::IsSliceSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02389">RefLayerSupport::IsSoftmaxSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02418">RefLayerSupport::IsSpaceToBatchNdSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02446">RefLayerSupport::IsSpaceToDepthSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02476">RefLayerSupport::IsSplitterSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02506">RefLayerSupport::IsStackSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02539">RefLayerSupport::IsStridedSliceSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02567">RefLayerSupport::IsSubtractionSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02638">RefLayerSupport::IsTransposeConvolution2dSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02706">RefLayerSupport::IsTransposeSupported()</a>, and <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02737">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>
@@ -8197,9 +9470,15 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00938">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>
@@ -8235,10 +9514,20 @@ Variables</h2></td></tr>
</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#l00612">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 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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00612">ClLayerSupport::IsActivationSupported()</a>.</p>
+
</div>
</div>
<a id="a24fc3e8e29d3fa56cc6b2d81e48625d1"></a>
@@ -8280,11 +9569,25 @@ Variables</h2></td></tr>
</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#l00624">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#l00042">Types.hpp:42</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 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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00624">ClLayerSupport::IsAdditionSupported()</a>, and <a class="el" href="_cl_backend_8cpp_source.xhtml#l00276">ClBackend::OptimizeSubgraphView()</a>.</p>
+
</div>
</div>
<a id="ab80423b306d8e0436b9a316922911d4d"></a>
@@ -8320,11 +9623,28 @@ Variables</h2></td></tr>
</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#l00637">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#l00196">TensorUtils.cpp:196</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="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 = armnn::numeric_cast&lt;int&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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00637">ClLayerSupport::IsArgMinMaxSupported()</a>.</p>
+
</div>
</div>
<a id="adfe10e7086e3e3b98927cf84aee03dd0"></a>
@@ -8332,6 +9652,9 @@ Variables</h2></td></tr>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr const char* armnn::ClBackendId </td>
@@ -8340,12 +9663,18 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
-
+<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 -->
<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="a2a57e49fbc4e44cfa0300229627d04ff"></a>
@@ -8387,18 +9716,92 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_batch_mat_mul_workload_8cpp_source.xhtml#l00029">29</a> of file <a class="el" href="_cl_batch_mat_mul_workload_8cpp_source.xhtml">ClBatchMatMulWorkload.cpp</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="keywordflow">if</span> (descriptor.m_AdjointX || descriptor.m_AdjointY )</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">throw</span> Exception(<span class="stringliteral">&quot;Support for adjoint not implemented.&quot;</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_DataLayoutX != <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a> || descriptor.m_DataLayoutY != <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a> )</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">throw</span> Exception(<span class="stringliteral">&quot;Only supported the MatMul in the last 2 dimensions&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="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusGEMM = <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK);</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusPermuteX = <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK);</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusPermuteY = <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK);</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">// ClGemmMatrixMultiplyNativeKernel used by CLGEMM can only support 3 dimensional</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="comment">// tensors so try to reduce the dimensions to 3</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> aclInputXInfo = armcomputetensorutils::BuildArmComputeTensorInfo(inputX, descriptor.m_DataLayoutX, 3);</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> aclInputYInfo = armcomputetensorutils::BuildArmComputeTensorInfo(inputY, descriptor.m_DataLayoutY, 3);</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output, descriptor.m_DataLayoutY, 3);</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; arm_compute::TensorInfo aclPermutedXInfo = arm_compute::TensorInfo();</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; arm_compute::TensorInfo aclPermutedYInfo = arm_compute::TensorInfo();</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> (descriptor.m_TransposeX == <span class="keyword">true</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; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputXStripped = <a class="code" href="namespacearmnn_utils.xhtml#a2bff2aae3ae824ff74ba550488373886">armnnUtils::ReduceDims</a>(inputX, 3);</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">auto</span> permutationXVector = <a class="code" href="namespacearmnn.xhtml#a15e2ba06d2ecd7ff6013118838e5d1be">GeneratePermutationVectorOnLastTwoDimensions</a>(inputXStripped.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>());</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> aclPermutationXVector = armcomputetensorutils::BuildArmComputePermutationVector(permutationXVector);</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keyword">const</span> TensorInfo permutedXInfo = <a class="code" href="namespacearmnn_utils.xhtml#abeaf4f6785039866fd075f4569ba8e84">armnnUtils::Permuted</a>(inputXStripped, permutationXVector);</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; aclPermutedXInfo = armcomputetensorutils::BuildArmComputeTensorInfo(permutedXInfo, 3);</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; statusPermuteX = arm_compute::CLPermute::validate(&amp;aclInputXInfo,</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; &amp;aclPermutedXInfo,</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; aclPermutationXVector);</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> (descriptor.m_TransposeY == <span class="keyword">true</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; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputYStripped = <a class="code" href="namespacearmnn_utils.xhtml#a2bff2aae3ae824ff74ba550488373886">armnnUtils::ReduceDims</a>(inputY, 3);</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">auto</span> permutationYVector = <a class="code" href="namespacearmnn.xhtml#a15e2ba06d2ecd7ff6013118838e5d1be">GeneratePermutationVectorOnLastTwoDimensions</a>(inputYStripped.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>());</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> aclPermutationYVector = armcomputetensorutils::BuildArmComputePermutationVector(permutationYVector);</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keyword">const</span> TensorInfo permutedYInfo = <a class="code" href="namespacearmnn_utils.xhtml#abeaf4f6785039866fd075f4569ba8e84">armnnUtils::Permuted</a>(inputYStripped, permutationYVector);</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; aclPermutedYInfo = armcomputetensorutils::BuildArmComputeTensorInfo(permutedYInfo, 3);</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; statusPermuteY = arm_compute::CLPermute::validate(&amp;aclInputYInfo,</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; &amp;aclPermutedYInfo,</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; aclPermutationYVector);</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; <span class="keyword">const</span> arm_compute::GEMMInfo&amp; gemm_info = arm_compute::GEMMInfo(<span class="keyword">false</span>, <span class="comment">// is inputX reshaped</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keyword">false</span>, <span class="comment">// is inputY reshaped</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keyword">false</span>); <span class="comment">// is inputY reshaped only 1st run</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; statusGEMM = arm_compute::CLGEMM::validate(descriptor.m_TransposeX ? &amp;aclPermutedXInfo : &amp;aclInputXInfo,</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; descriptor.m_TransposeY ? &amp;aclPermutedYInfo : &amp;aclInputYInfo,</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keyword">nullptr</span>,</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; &amp;aclOutputInfo,</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; 1.0,</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; 0,</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; gemm_info);</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">if</span> (statusPermuteX.error_code() == arm_compute::ErrorCode::OK &amp;&amp;</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; statusPermuteY.error_code() == arm_compute::ErrorCode::OK &amp;&amp;</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; statusGEMM.error_code() == arm_compute::ErrorCode::OK)</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> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="stringliteral">&quot;All Batch Mat Mul layers validate status OK.&quot;</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; <span class="keywordflow">else</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; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::RUNTIME_ERROR,</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="stringliteral">&quot;BatchMatMul layer validate status failed.&quot;</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; + statusGEMM.error_description()</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; + statusPermuteX.error_description()</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; + statusPermuteY.error_description());</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;}</div>
+</div><!-- fragment -->
<p class="reference">References <a class="el" href="_descriptors_8hpp_source.xhtml#l01564">BatchMatMulDescriptor::m_AdjointX</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01565">BatchMatMulDescriptor::m_AdjointY</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01568">BatchMatMulDescriptor::m_DataLayoutX</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01569">BatchMatMulDescriptor::m_DataLayoutY</a>, and <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">NCHW</a>.</p>
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00650">ClLayerSupport::IsBatchMatMulSupported()</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="keywordflow">if</span> (descriptor.m_AdjointX || descriptor.m_AdjointY )</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">throw</span> Exception(<span class="stringliteral">&quot;Support for adjoint not implemented.&quot;</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_DataLayoutX != <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a> || descriptor.m_DataLayoutY != <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a> )</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">throw</span> Exception(<span class="stringliteral">&quot;Only supported the MatMul in the last 2 dimensions&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="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusGEMM = <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK);</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusPermuteX = <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK);</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusPermuteY = <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK);</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">// ClGemmMatrixMultiplyNativeKernel used by CLGEMM can only support 3 dimensional</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="comment">// tensors so try to reduce the dimensions to 3</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> aclInputXInfo = armcomputetensorutils::BuildArmComputeTensorInfo(inputX, descriptor.m_DataLayoutX, 3);</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> aclInputYInfo = armcomputetensorutils::BuildArmComputeTensorInfo(inputY, descriptor.m_DataLayoutY, 3);</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output, descriptor.m_DataLayoutY, 3);</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; arm_compute::TensorInfo aclPermutedXInfo = arm_compute::TensorInfo();</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; arm_compute::TensorInfo aclPermutedYInfo = arm_compute::TensorInfo();</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> (descriptor.m_TransposeX == <span class="keyword">true</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; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputXStripped = <a class="code" href="namespacearmnn_utils.xhtml#a2bff2aae3ae824ff74ba550488373886">armnnUtils::ReduceDims</a>(inputX, 3);</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">auto</span> permutationXVector = <a class="code" href="namespacearmnn.xhtml#a15e2ba06d2ecd7ff6013118838e5d1be">GeneratePermutationVectorOnLastTwoDimensions</a>(inputXStripped.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>());</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> aclPermutationXVector = armcomputetensorutils::BuildArmComputePermutationVector(permutationXVector);</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keyword">const</span> TensorInfo permutedXInfo = <a class="code" href="namespacearmnn_utils.xhtml#abeaf4f6785039866fd075f4569ba8e84">armnnUtils::Permuted</a>(inputXStripped, permutationXVector);</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; aclPermutedXInfo = armcomputetensorutils::BuildArmComputeTensorInfo(permutedXInfo, 3);</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; statusPermuteX = arm_compute::CLPermute::validate(&amp;aclInputXInfo,</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; &amp;aclPermutedXInfo,</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; aclPermutationXVector);</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> (descriptor.m_TransposeY == <span class="keyword">true</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; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputYStripped = <a class="code" href="namespacearmnn_utils.xhtml#a2bff2aae3ae824ff74ba550488373886">armnnUtils::ReduceDims</a>(inputY, 3);</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">auto</span> permutationYVector = <a class="code" href="namespacearmnn.xhtml#a15e2ba06d2ecd7ff6013118838e5d1be">GeneratePermutationVectorOnLastTwoDimensions</a>(inputYStripped.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>());</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> aclPermutationYVector = armcomputetensorutils::BuildArmComputePermutationVector(permutationYVector);</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keyword">const</span> TensorInfo permutedYInfo = <a class="code" href="namespacearmnn_utils.xhtml#abeaf4f6785039866fd075f4569ba8e84">armnnUtils::Permuted</a>(inputYStripped, permutationYVector);</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; aclPermutedYInfo = armcomputetensorutils::BuildArmComputeTensorInfo(permutedYInfo, 3);</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; statusPermuteY = arm_compute::CLPermute::validate(&amp;aclInputYInfo,</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; &amp;aclPermutedYInfo,</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; aclPermutationYVector);</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; <span class="keyword">const</span> arm_compute::GEMMInfo&amp; gemm_info = arm_compute::GEMMInfo(<span class="keyword">false</span>, <span class="comment">// is inputX reshaped</span></div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keyword">false</span>, <span class="comment">// is inputY reshaped</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keyword">false</span>); <span class="comment">// is inputY reshaped only 1st run</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; statusGEMM = arm_compute::CLGEMM::validate(descriptor.m_TransposeX ? &amp;aclPermutedXInfo : &amp;aclInputXInfo,</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; descriptor.m_TransposeY ? &amp;aclPermutedYInfo : &amp;aclInputYInfo,</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keyword">nullptr</span>,</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; &amp;aclOutputInfo,</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; 1.0,</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; 0,</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; gemm_info);</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">if</span> (statusPermuteX.error_code() == arm_compute::ErrorCode::OK &amp;&amp;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; statusPermuteY.error_code() == arm_compute::ErrorCode::OK &amp;&amp;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; statusGEMM.error_code() == arm_compute::ErrorCode::OK)</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> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="stringliteral">&quot;All Batch Mat Mul layers validate status OK.&quot;</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; <span class="keywordflow">else</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; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::RUNTIME_ERROR,</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="stringliteral">&quot;BatchMatMul layer validate status failed.&quot;</span></div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; + statusGEMM.error_description()</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; + statusPermuteX.error_description()</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; + statusPermuteY.error_description());</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;}</div><div class="ttc" id="namespacearmnn_xhtml_a15e2ba06d2ecd7ff6013118838e5d1be"><div class="ttname"><a href="namespacearmnn.xhtml#a15e2ba06d2ecd7ff6013118838e5d1be">armnn::GeneratePermutationVectorOnLastTwoDimensions</a></div><div class="ttdeci">armnn::PermutationVector GeneratePermutationVectorOnLastTwoDimensions(unsigned int rank)</div><div class="ttdoc">Generates a permutation vector of size rank that permutes the 2 most right dimensions. </div><div class="ttdef"><b>Definition:</b> <a href="_workload_utils_8cpp_source.xhtml#l00344">WorkloadUtils.cpp:344</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="namespacearmnn_utils_xhtml_a2bff2aae3ae824ff74ba550488373886"><div class="ttname"><a href="namespacearmnn_utils.xhtml#a2bff2aae3ae824ff74ba550488373886">armnnUtils::ReduceDims</a></div><div class="ttdeci">armnn::TensorShape ReduceDims(const armnn::TensorShape &amp;tensorInfo, unsigned int dimensions)</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_utils_8cpp_source.xhtml#l00106">TensorUtils.cpp:106</a></div></div>
-<div class="ttc" id="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70b"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">armnn::Status</a></div><div class="ttdeci">Status</div><div class="ttdoc">enumeration </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00042">Types.hpp:42</a></div></div>
-<div class="ttc" id="namespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a></div></div>
-<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a157e27d41e9f6b21f0d3c025fa47dc24"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">armnn::TensorInfo::GetNumDimensions</a></div><div class="ttdeci">unsigned int GetNumDimensions() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00195">Tensor.hpp:195</a></div></div>
-<div class="ttc" id="namespacearmnn_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="a29bd65c1ec4ff9f75b636ec8e7b038be"></a>
@@ -8464,10 +9867,35 @@ Variables</h2></td></tr>
</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#l00664">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 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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00664">ClLayerSupport::IsBatchNormalizationSupported()</a>, and <a class="el" href="_cl_backend_8cpp_source.xhtml#l00276">ClBackend::OptimizeSubgraphView()</a>.</p>
+
</div>
</div>
<a id="ae87476befb36d9cc4fb926337ba65b5d"></a>
@@ -8503,14 +9931,27 @@ Variables</h2></td></tr>
</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>
-
+<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 = armnn::numeric_cast&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 = armnn::numeric_cast&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><!-- fragment -->
<p class="reference">References <a class="el" href="_descriptors_8hpp_source.xhtml#l00870">BatchToSpaceNdDescriptor::m_DataLayout</a>.</p>
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00685">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#l00062">Types.hpp:62</a></div></div>
-<div class="ttc" id="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70b"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">armnn::Status</a></div><div class="ttdeci">Status</div><div class="ttdoc">enumeration </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00042">Types.hpp:42</a></div></div>
-<div class="ttc" id="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>
@@ -8540,9 +9981,15 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00697">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>
@@ -8578,13 +10025,39 @@ Variables</h2></td></tr>
</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#l00707">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#l00062">Types.hpp:62</a></div></div>
-<div class="ttc" id="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70b"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">armnn::Status</a></div><div class="ttdeci">Status</div><div class="ttdoc">enumeration </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00042">Types.hpp:42</a></div></div>
-<div class="ttc" id="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 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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00707">ClLayerSupport::IsChannelShuffleSupported()</a>.</p>
+
</div>
</div>
<a id="af6f6476c5d1c4c85153020f5229ebd14"></a>
@@ -8626,16 +10099,26 @@ Variables</h2></td></tr>
</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#l00719">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#l00108">Types.hpp:108</a></div></div>
-<div class="ttc" id="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70b"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">armnn::Status</a></div><div class="ttdeci">Status</div><div class="ttdoc">enumeration </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00042">Types.hpp:42</a></div></div>
-<div class="ttc" id="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#l00139">ArmComputeUtils.hpp:139</a></div></div>
+<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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00719">ClLayerSupport::IsComparisonSupported()</a>.</p>
+
</div>
</div>
-<a id="a7782f0809076f14363eacb4a38964b9f"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a7782f0809076f14363eacb4a38964b9f">&#9670;&nbsp;</a></span>ClConcatWorkloadValidate()</h2>
+<a id="a0784b1fdac2844c5d6f331ab6e9af547"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0784b1fdac2844c5d6f331ab6e9af547">&#9670;&nbsp;</a></span>ClConcatWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
@@ -8643,7 +10126,7 @@ Variables</h2></td></tr>
<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="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>
@@ -8667,10 +10150,26 @@ Variables</h2></td></tr>
</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#l00733">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 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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00733">ClLayerSupport::IsConcatSupported()</a>.</p>
+
</div>
</div>
<a id="a2f5c2e8794174361f2308f4a0d3f9c73"></a>
@@ -8690,10 +10189,33 @@ Variables</h2></td></tr>
</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#l00774">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#l00042">Types.hpp:42</a></div></div>
+<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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00774">ClLayerSupport::IsConstantSupported()</a>.</p>
+
</div>
</div>
<a id="a744cd226e45f7c948e0533abbd166b1f"></a>
@@ -8721,10 +10243,13 @@ Variables</h2></td></tr>
</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 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><!-- fragment -->
+<p class="reference">References <a class="el" href="_cl_context_schema__generated_8h_source.xhtml#l00148">ClContextIdentifier()</a>.</p>
+
</div>
</div>
<a id="ab4e35e40c433e5fb0a0b89ca7c89988d"></a>
@@ -8751,7 +10276,10 @@ Variables</h2></td></tr>
</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 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>
@@ -8778,9 +10306,12 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<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>
@@ -8810,12 +10341,29 @@ Variables</h2></td></tr>
</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>
-
+<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><!-- fragment -->
<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#l00782">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#l00042">Types.hpp:42</a></div></div>
-</div><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00782">ClLayerSupport::IsConvertFp16ToFp32Supported()</a>.</p>
+
</div>
</div>
<a id="a37f6946bfb7a9c7d64881b7a2e13945f"></a>
@@ -8845,12 +10393,29 @@ Variables</h2></td></tr>
</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>
-
+<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><!-- fragment -->
<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#l00792">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#l00042">Types.hpp:42</a></div></div>
-</div><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00792">ClLayerSupport::IsConvertFp32ToFp16Supported()</a>.</p>
+
</div>
</div>
<a id="a61cf0886d4c1a6e24c101a57ccb2ec31"></a>
@@ -8910,12 +10475,50 @@ Variables</h2></td></tr>
</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#l00802">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; arm_compute::TensorInfo aclWeightsInfo = BuildArmComputeTensorInfo(weights, descriptor.m_DataLayout);</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; aclWeightsInfo.set_are_values_constant(weights.IsConstant());</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; <span class="comment">// Same for bias as weights. We don&#39;t currently support non const.</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">if</span> (!biases.value().IsConstant())</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,</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="stringliteral">&quot;ArmNN ClConvolution2dWorkload does not support non constant bias.&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; aclBiasesInfo = BuildArmComputeTensorInfo(biases.value(), descriptor.m_DataLayout);</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; aclBiasesInfo.set_are_values_constant(biases.value().IsConstant());</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; arm_compute::PadStrideInfo layerInfo = BuildArmComputePadStrideInfo(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="keyword">const</span> arm_compute::ActivationLayerInfo activationInfo = <a class="code" href="namespacearmnn.xhtml#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; activationDescriptor);</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> arm_compute::CLConvolutionLayer::validate(&amp;aclInputInfo,</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; &amp;aclWeightsInfo,</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; optionalAclBiasesInfo,</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; &amp;aclOutputInfo,</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; layerInfo,</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; arm_compute::WeightsInfo(),</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; aclDilationInfo,</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; activationInfo,</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; isFastMathEnabled);</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</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#l00042">Types.hpp:42</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_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 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; arm_compute::TensorInfo aclWeightsInfo = BuildArmComputeTensorInfo(weights, descriptor.m_DataLayout);</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; aclWeightsInfo.set_are_values_constant(weights.IsConstant());</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; <span class="comment">// Same for bias as weights. We don&#39;t currently support non const.</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">if</span> (!biases.value().IsConstant())</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,</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="stringliteral">&quot;ArmNN ClConvolution2dWorkload does not support non constant bias.&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; aclBiasesInfo = BuildArmComputeTensorInfo(biases.value(), descriptor.m_DataLayout);</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; aclBiasesInfo.set_are_values_constant(biases.value().IsConstant());</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; arm_compute::PadStrideInfo layerInfo = BuildArmComputePadStrideInfo(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="keyword">const</span> arm_compute::ActivationLayerInfo activationInfo = <a class="code" href="namespacearmnn.xhtml#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; activationDescriptor);</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> arm_compute::CLConvolutionLayer::validate(&amp;aclInputInfo,</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; &amp;aclWeightsInfo,</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; optionalAclBiasesInfo,</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; &amp;aclOutputInfo,</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; layerInfo,</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; arm_compute::WeightsInfo(),</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; aclDilationInfo,</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; activationInfo,</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; isFastMathEnabled);</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;}</div>
</div><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00802">ClLayerSupport::IsConvolution2dSupported()</a>, and <a class="el" href="_cl_backend_8cpp_source.xhtml#l00276">ClBackend::OptimizeSubgraphView()</a>.</p>
+
</div>
</div>
<a id="ae387b3587bcce82eb33623b300097a8c"></a>
@@ -8975,11 +10578,34 @@ Variables</h2></td></tr>
</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#l00835">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#l00293">ArmComputeUtils.hpp:293</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="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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00835">ClLayerSupport::IsConvolution3dSupported()</a>.</p>
+
</div>
</div>
<a id="ab3624c723d9a0ec93722b19060b76115"></a>
@@ -9015,14 +10641,24 @@ Variables</h2></td></tr>
</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>
-
+<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 = armnn::numeric_cast&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><!-- fragment -->
<p class="reference">References <a class="el" href="_descriptors_8hpp_source.xhtml#l01042">SpaceToDepthDescriptor::m_DataLayout</a>.</p>
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00878">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#l00062">Types.hpp:62</a></div></div>
-<div class="ttc" id="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70b"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">armnn::Status</a></div><div class="ttdeci">Status</div><div class="ttdoc">enumeration </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00042">Types.hpp:42</a></div></div>
-<div class="ttc" id="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>
@@ -9076,13 +10712,64 @@ Variables</h2></td></tr>
</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#l00890">ClLayerSupport::IsDepthwiseConvolutionSupported()</a>, <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00907">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 format for weights for depthwise is [1, H, W, C] independently of the input/output layout</span></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">// ACL format for weights for depthwise is:</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="comment">// - [1, H, W, C] for [N, H, W, C] input/output layout (matches with ArmNN)</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="comment">// - [1, C, H, W] for [N, C, H, W] input/output layout</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">// Therefore ArmNN weights have to be permuted when input/output layout is [N, C, H, W] to pass them to ACL.</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="comment">// The PermuteDepthwiseConv2dWeights backend optimization takes care of this, but it has not been performed yet,</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="comment">// so we do the permute here for the TensorInfo weights.</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> aclDepthMultiplier;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; TensorInfo weightsPermuted;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</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="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">// Convert the weights into the compute library format</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; arm_compute::TensorInfo aclWeightsInfo = BuildArmComputeTensorInfo(weightsPermuted, descriptor.m_DataLayout);</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; aclWeightsInfo.set_are_values_constant(weights.IsConstant());</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; arm_compute::TensorInfo aclBiasesInfo;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; arm_compute::TensorInfo* optionalAclBiasesInfo = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordflow">if</span> (descriptor.m_BiasEnabled)</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; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(biases.has_value());</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="comment">// Same for bias as weights. We don&#39;t currently support non const.</span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">if</span> (!biases.value().IsConstant())</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> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>{arm_compute::ErrorCode::RUNTIME_ERROR,</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="stringliteral">&quot;ArmNN ClDepthwiseConv2dWorkload does not support non constant bias.&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; aclBiasesInfo = BuildArmComputeTensorInfo(biases.value(), descriptor.m_DataLayout);</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; aclBiasesInfo.set_are_values_constant(biases.value().IsConstant());</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; optionalAclBiasesInfo = &amp;aclBiasesInfo;</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; <span class="keyword">const</span> arm_compute::PadStrideInfo aclPadStrideInfo = BuildArmComputePadStrideInfo(descriptor);</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keyword">const</span> arm_compute::Size2D aclDilationInfo = BuildArmComputeSize2D(</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; descriptor.m_DilationX,</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; descriptor.m_DilationY);</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> arm_compute::ActivationLayerInfo activationInfo = <a class="code" href="namespacearmnn.xhtml#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; activationDescriptor);</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> arm_compute::CLDepthwiseConvolutionLayer::validate(&amp;aclInputInfo,</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; &amp;aclWeightsInfo,</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; optionalAclBiasesInfo,</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; &amp;aclOutputInfo,</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; aclPadStrideInfo,</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; aclDepthMultiplier,</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; activationInfo,</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; aclDilationInfo);</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="ttc" id="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70b"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">armnn::Status</a></div><div class="ttdeci">Status</div><div class="ttdoc">enumeration </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00042">Types.hpp:42</a></div></div>
-<div class="ttc" id="_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#l00170">WorkloadUtils.cpp:170</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 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 format for weights for depthwise is [1, H, W, C] independently of the input/output layout</span></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">// ACL format for weights for depthwise is:</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="comment">// - [1, H, W, C] for [N, H, W, C] input/output layout (matches with ArmNN)</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="comment">// - [1, C, H, W] for [N, C, H, W] input/output layout</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">// Therefore ArmNN weights have to be permuted when input/output layout is [N, C, H, W] to pass them to ACL.</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="comment">// The PermuteDepthwiseConv2dWeights backend optimization takes care of this, but it has not been performed yet,</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="comment">// so we do the permute here for the TensorInfo weights.</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> aclDepthMultiplier;</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; TensorInfo weightsPermuted;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</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="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">// Convert the weights into the compute library format</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; arm_compute::TensorInfo aclWeightsInfo = BuildArmComputeTensorInfo(weightsPermuted, descriptor.m_DataLayout);</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; aclWeightsInfo.set_are_values_constant(weights.IsConstant());</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; arm_compute::TensorInfo aclBiasesInfo;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; arm_compute::TensorInfo* optionalAclBiasesInfo = <span class="keyword">nullptr</span>;</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordflow">if</span> (descriptor.m_BiasEnabled)</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; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(biases.has_value());</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="comment">// Same for bias as weights. We don&#39;t currently support non const.</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">if</span> (!biases.value().IsConstant())</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> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>{arm_compute::ErrorCode::RUNTIME_ERROR,</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="stringliteral">&quot;ArmNN ClDepthwiseConv2dWorkload does not support non constant bias.&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; aclBiasesInfo = BuildArmComputeTensorInfo(biases.value(), descriptor.m_DataLayout);</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; aclBiasesInfo.set_are_values_constant(biases.value().IsConstant());</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; optionalAclBiasesInfo = &amp;aclBiasesInfo;</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; <span class="keyword">const</span> arm_compute::PadStrideInfo aclPadStrideInfo = BuildArmComputePadStrideInfo(descriptor);</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keyword">const</span> arm_compute::Size2D aclDilationInfo = BuildArmComputeSize2D(</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; descriptor.m_DilationX,</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; descriptor.m_DilationY);</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> arm_compute::ActivationLayerInfo activationInfo = <a class="code" href="namespacearmnn.xhtml#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; activationDescriptor);</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> arm_compute::CLDepthwiseConvolutionLayer::validate(&amp;aclInputInfo,</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; &amp;aclWeightsInfo,</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; optionalAclBiasesInfo,</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; &amp;aclOutputInfo,</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; aclPadStrideInfo,</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; aclDepthMultiplier,</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; activationInfo,</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; aclDilationInfo);</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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00890">ClLayerSupport::IsDepthwiseConvolutionSupported()</a>, <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00907">ClLayerSupport::IsDilatedDepthwiseConvolutionSupported()</a>, and <a class="el" href="_cl_backend_8cpp_source.xhtml#l00276">ClBackend::OptimizeSubgraphView()</a>.</p>
+
</div>
</div>
<a id="a75045734c29d7d6635342c05adbc151b"></a>
@@ -9112,9 +10799,15 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00868">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>
@@ -9156,10 +10849,19 @@ Variables</h2></td></tr>
</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#l00925">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 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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00925">ClLayerSupport::IsDivisionSupported()</a>, and <a class="el" href="_cl_backend_8cpp_source.xhtml#l00276">ClBackend::OptimizeSubgraphView()</a>.</p>
+
</div>
</div>
<a id="a9831849c09391e90e50de46e2ee16403"></a>
@@ -9189,9 +10891,15 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00938">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>
@@ -9221,9 +10929,15 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01002">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>
@@ -9277,12 +10991,39 @@ Variables</h2></td></tr>
</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#l01012">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; arm_compute::TensorInfo aclWeights = BuildArmComputeTensorInfo(weights);</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; aclWeights.set_are_values_constant(weights.IsConstant());</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::TensorInfo aclBiases;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; arm_compute::TensorInfo* optionalAclBiases = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordflow">if</span> (descriptor.m_BiasEnabled)</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; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(biases.has_value());</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="comment">// Same for bias as weights. We don&#39;t currently support non const.</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">if</span> (!biases.value().IsConstant())</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>{arm_compute::ErrorCode::RUNTIME_ERROR,</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="stringliteral">&quot;Arm NN ClFullyConnectedWorkload does not support non constant bias.&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; aclBiases = BuildArmComputeTensorInfo(biases.value());</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; aclBiases.set_are_values_constant(biases.value().IsConstant());</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; optionalAclBiases = &amp;aclBiases;</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; <span class="keyword">const</span> arm_compute::FullyConnectedLayerInfo fullyConnectedLayerInfo =</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <a class="code" href="namespacearmnn.xhtml#ae2e0c1d8160fadce44d479379790718e">ConvertFullyConnectedDescriptorToAclFullyConnectedLayerInfo</a>(descriptor, activationDescriptor);</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">return</span> arm_compute::CLFullyConnectedLayer::validate(&amp;aclInput,</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; &amp;aclWeights,</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; optionalAclBiases,</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; &amp;aclOutput,</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; fullyConnectedLayerInfo);</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</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#l00192">ArmComputeUtils.hpp:192</a></div></div>
-<div class="ttc" id="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70b"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">armnn::Status</a></div><div class="ttdeci">Status</div><div class="ttdoc">enumeration </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00042">Types.hpp:42</a></div></div>
-<div class="ttc" id="_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="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; arm_compute::TensorInfo aclWeights = BuildArmComputeTensorInfo(weights);</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; aclWeights.set_are_values_constant(weights.IsConstant());</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::TensorInfo aclBiases;</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; arm_compute::TensorInfo* optionalAclBiases = <span class="keyword">nullptr</span>;</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordflow">if</span> (descriptor.m_BiasEnabled)</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; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(biases.has_value());</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="comment">// Same for bias as weights. We don&#39;t currently support non const.</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">if</span> (!biases.value().IsConstant())</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>{arm_compute::ErrorCode::RUNTIME_ERROR,</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="stringliteral">&quot;Arm NN ClFullyConnectedWorkload does not support non constant bias.&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; aclBiases = BuildArmComputeTensorInfo(biases.value());</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; aclBiases.set_are_values_constant(biases.value().IsConstant());</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; optionalAclBiases = &amp;aclBiases;</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; <span class="keyword">const</span> arm_compute::FullyConnectedLayerInfo fullyConnectedLayerInfo =</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <a class="code" href="namespacearmnn.xhtml#ae2e0c1d8160fadce44d479379790718e">ConvertFullyConnectedDescriptorToAclFullyConnectedLayerInfo</a>(descriptor, activationDescriptor);</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">return</span> arm_compute::CLFullyConnectedLayer::validate(&amp;aclInput,</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; &amp;aclWeights,</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; optionalAclBiases,</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; &amp;aclOutput,</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; fullyConnectedLayerInfo);</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;}</div>
</div><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01012">ClLayerSupport::IsFullyConnectedSupported()</a>, and <a class="el" href="_cl_backend_8cpp_source.xhtml#l00276">ClBackend::OptimizeSubgraphView()</a>.</p>
+
</div>
</div>
<a id="adc7c6ed4375eb58ea8fa20d6ec704a27"></a>
@@ -9320,21 +11061,93 @@ Variables</h2></td></tr>
<p>Validate ReduceSum</p>
<p>Validate Gather</p>
<p>Validate Reshape</p>
-<p>Return OK if all the layers are valid </p>
+<p>Return OK if all the layers are valid</p>
<p class="definition">Definition at line <a class="el" href="_cl_gather_nd_workload_8cpp_source.xhtml#l00016">16</a> of file <a class="el" href="_cl_gather_nd_workload_8cpp_source.xhtml">ClGatherNdWorkload.cpp</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="comment">// Calculate ND, K, W, C.</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; std::map&lt;std::string, unsigned int&gt; keyIndices = <a class="code" href="namespacearmnn.xhtml#ac40d3e4035af5fbe68d9e126a8d6367c">CalculateGatherNdKeyIndices</a>(paramsInfo, indicesInfo);</div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="comment"></span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment"> /// Validate Mul</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment"></span> <span class="comment">// Indices with shape { W, ND }</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> indices_W_ND_Info = indicesInfo;</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; indices_W_ND_Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ keyIndices[<span class="stringliteral">&quot;W&quot;</span>], keyIndices[<span class="stringliteral">&quot;ND&quot;</span>] });</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclIndicesInfo = BuildArmComputeTensorInfo(indices_W_ND_Info);</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="comment">// Flattened coefficients with shape { ND }</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> flattenedCoeff_Info = indicesInfo;</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; flattenedCoeff_Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ keyIndices[<span class="stringliteral">&quot;ND&quot;</span>] });</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclFlattenedCoeffInfo = BuildArmComputeTensorInfo(flattenedCoeff_Info);</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">// Output of Mul with shape { W, ND }</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputMulInfo = BuildArmComputeTensorInfo(indices_W_ND_Info);</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">auto</span> statusMul = arm_compute::CLPixelWiseMultiplication::validate(&amp;aclIndicesInfo,</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; &amp;aclFlattenedCoeffInfo,</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; &amp;aclOutputMulInfo,</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; arm_compute::ConvertPolicy::WRAP,</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; arm_compute::ActivationLayerInfo());</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"> /// Validate ReduceSum</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="comment"></span> <span class="comment">// Flattened indices with shape { W }</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> flattenedIndices_Info = indicesInfo;</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; flattenedIndices_Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ keyIndices[<span class="stringliteral">&quot;W&quot;</span>] });</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclFlattenedIndicesInfo = BuildArmComputeTensorInfo(flattenedIndices_Info);</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> std::vector&lt;unsigned int&gt; armnnReduceAxes(1, 1);</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <a class="code" href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> coords = BuildArmComputeReductionCoordinates(aclOutputMulInfo.num_dimensions(),</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; indices_W_ND_Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>(),</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; armnnReduceAxes);</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">auto</span> statusReduceSum = arm_compute::CLReductionOperation::validate(&amp;aclOutputMulInfo,</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; &amp;aclFlattenedIndicesInfo,</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(coords[0]),</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; arm_compute::ReductionOperation::SUM,</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keyword">false</span>);</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"> /// Validate Gather</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="comment"></span> <span class="comment">// Params with shape { K, C }</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> params_K_C_Info = paramsInfo;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; params_K_C_Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ keyIndices[<span class="stringliteral">&quot;K&quot;</span>], keyIndices[<span class="stringliteral">&quot;C&quot;</span>] });</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclParamsInfo = BuildArmComputeTensorInfo(params_K_C_Info);</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">// Output of gather with shape { W, C }</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputGather_Info = outputInfo;</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; outputGather_Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ keyIndices[<span class="stringliteral">&quot;W&quot;</span>], keyIndices[<span class="stringliteral">&quot;C&quot;</span>] });</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputGatherInfo = BuildArmComputeTensorInfo(outputGather_Info);</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="keyword">auto</span> aclAxis = <a class="code" href="namespacearmnn.xhtml#a44a3b98b37a25c995aa9e4dae7d7b456">ComputeAclAxis</a>(0, params_K_C_Info);</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keyword">auto</span> statusGather =</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; arm_compute::CLGather::validate(&amp;aclParamsInfo, &amp;aclFlattenedIndicesInfo, &amp;aclOutputGatherInfo, aclAxis);</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="comment"></span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;<span class="comment"> /// Validate Reshape</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;<span class="comment"></span> <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(outputInfo);</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="keyword">auto</span> statusReshape = arm_compute::CLReshapeLayer::validate(&amp;aclOutputGatherInfo, &amp;aclOutputInfo);</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="comment"></span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="comment"> /// Return OK if all the layers are valid</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="comment"></span> <span class="keyword">auto</span> okCode = arm_compute::ErrorCode::OK;</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">if</span> (statusMul.error_code() == okCode &amp;&amp;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; statusReduceSum.error_code() == okCode &amp;&amp;</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; statusGather.error_code() == okCode &amp;&amp;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; statusReshape.error_code() == okCode)</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> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="stringliteral">&quot;All GatherND layers validate status OK.&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="keywordflow">else</span></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> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::RUNTIME_ERROR,</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="stringliteral">&quot;GatherND layer validate status failed.&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;}</div>
+</div><!-- fragment -->
<p class="reference">References <a class="el" href="_workload_utils_8cpp_source.xhtml#l00300">CalculateGatherNdKeyIndices()</a>, and <a class="el" href="_tensor_8hpp_source.xhtml#l00193">TensorInfo::SetShape()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01043">ClLayerSupport::IsGatherNdSupported()</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="comment">// Calculate ND, K, W, C.</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; std::map&lt;std::string, unsigned int&gt; keyIndices = <a class="code" href="namespacearmnn.xhtml#ac40d3e4035af5fbe68d9e126a8d6367c">CalculateGatherNdKeyIndices</a>(paramsInfo, indicesInfo);</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment"> /// Validate Mul</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment"></span> <span class="comment">// Indices with shape { W, ND }</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> indices_W_ND_Info = indicesInfo;</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; indices_W_ND_Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ keyIndices[<span class="stringliteral">&quot;W&quot;</span>], keyIndices[<span class="stringliteral">&quot;ND&quot;</span>] });</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclIndicesInfo = BuildArmComputeTensorInfo(indices_W_ND_Info);</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="comment">// Flattened coefficients with shape { ND }</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> flattenedCoeff_Info = indicesInfo;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; flattenedCoeff_Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ keyIndices[<span class="stringliteral">&quot;ND&quot;</span>] });</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclFlattenedCoeffInfo = BuildArmComputeTensorInfo(flattenedCoeff_Info);</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">// Output of Mul with shape { W, ND }</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputMulInfo = BuildArmComputeTensorInfo(indices_W_ND_Info);</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">auto</span> statusMul = arm_compute::CLPixelWiseMultiplication::validate(&amp;aclIndicesInfo,</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; &amp;aclFlattenedCoeffInfo,</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; &amp;aclOutputMulInfo,</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; arm_compute::ConvertPolicy::WRAP,</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; arm_compute::ActivationLayerInfo());</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"> /// Validate ReduceSum</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="comment"></span> <span class="comment">// Flattened indices with shape { W }</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> flattenedIndices_Info = indicesInfo;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; flattenedIndices_Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ keyIndices[<span class="stringliteral">&quot;W&quot;</span>] });</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclFlattenedIndicesInfo = BuildArmComputeTensorInfo(flattenedIndices_Info);</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> std::vector&lt;unsigned int&gt; armnnReduceAxes(1, 1);</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <a class="code" href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> coords = BuildArmComputeReductionCoordinates(aclOutputMulInfo.num_dimensions(),</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; indices_W_ND_Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>(),</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; armnnReduceAxes);</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">auto</span> statusReduceSum = arm_compute::CLReductionOperation::validate(&amp;aclOutputMulInfo,</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; &amp;aclFlattenedIndicesInfo,</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; static_cast&lt;unsigned int&gt;(coords[0]),</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; arm_compute::ReductionOperation::SUM,</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keyword">false</span>);</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"> /// Validate Gather</span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="comment"></span> <span class="comment">// Params with shape { K, C }</span></div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> params_K_C_Info = paramsInfo;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; params_K_C_Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ keyIndices[<span class="stringliteral">&quot;K&quot;</span>], keyIndices[<span class="stringliteral">&quot;C&quot;</span>] });</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclParamsInfo = BuildArmComputeTensorInfo(params_K_C_Info);</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">// Output of gather with shape { W, C }</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputGather_Info = outputInfo;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; outputGather_Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ keyIndices[<span class="stringliteral">&quot;W&quot;</span>], keyIndices[<span class="stringliteral">&quot;C&quot;</span>] });</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputGatherInfo = BuildArmComputeTensorInfo(outputGather_Info);</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="keyword">auto</span> aclAxis = <a class="code" href="namespacearmnn.xhtml#a44a3b98b37a25c995aa9e4dae7d7b456">ComputeAclAxis</a>(0, params_K_C_Info);</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keyword">auto</span> statusGather =</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; arm_compute::CLGather::validate(&amp;aclParamsInfo, &amp;aclFlattenedIndicesInfo, &amp;aclOutputGatherInfo, aclAxis);</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;<span class="comment"> /// Validate Reshape</span></div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;<span class="comment"></span> <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(outputInfo);</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="keyword">auto</span> statusReshape = arm_compute::CLReshapeLayer::validate(&amp;aclOutputGatherInfo, &amp;aclOutputInfo);</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="comment"> /// Return OK if all the layers are valid</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="comment"></span> <span class="keyword">auto</span> okCode = arm_compute::ErrorCode::OK;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">if</span> (statusMul.error_code() == okCode &amp;&amp;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; statusReduceSum.error_code() == okCode &amp;&amp;</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; statusGather.error_code() == okCode &amp;&amp;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; statusReshape.error_code() == okCode)</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> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="stringliteral">&quot;All GatherND layers validate status OK.&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="keywordflow">else</span></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> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::RUNTIME_ERROR,</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="stringliteral">&quot;GatherND layer validate status failed.&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;}</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#l00264">ArmComputeUtils.hpp:264</a></div></div>
-<div class="ttc" id="namespacearmnn_xhtml_ac40d3e4035af5fbe68d9e126a8d6367c"><div class="ttname"><a href="namespacearmnn.xhtml#ac40d3e4035af5fbe68d9e126a8d6367c">armnn::CalculateGatherNdKeyIndices</a></div><div class="ttdeci">std::map&lt; std::string, unsigned int &gt; CalculateGatherNdKeyIndices(TensorInfo inputInfo0, TensorInfo inputInfo1)</div><div class="ttdoc">Calculates the key index values needed for GatherNd: N, ND, K, W, C (N is always 1) ...</div><div class="ttdef"><b>Definition:</b> <a href="_workload_utils_8cpp_source.xhtml#l00300">WorkloadUtils.cpp:300</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="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="classarmnn_1_1_tensor_info_xhtml_abe8889e8150beef5fd204b2d87b49298"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">armnn::TensorInfo::SetShape</a></div><div class="ttdeci">void SetShape(const TensorShape &amp;newShape)</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00193">Tensor.hpp:193</a></div></div>
-<div class="ttc" id="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70b"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">armnn::Status</a></div><div class="ttdeci">Status</div><div class="ttdoc">enumeration </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00042">Types.hpp:42</a></div></div>
-<div class="ttc" id="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="aff9e3b78a938c14a4420ce6365b997fb"></a>
@@ -9376,10 +11189,18 @@ Variables</h2></td></tr>
</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#l01029">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#l00264">ArmComputeUtils.hpp:264</a></div></div>
+<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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01029">ClLayerSupport::IsGatherSupported()</a>.</p>
+
</div>
</div>
<a id="ab1545eea543ad790732f0722ce35cc80"></a>
@@ -9387,6 +11208,9 @@ Variables</h2></td></tr>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr const char* armnn::ClImportTensorHandleFactoryId </td>
@@ -9395,12 +11219,20 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
-
+<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 -->
<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>
@@ -9436,9 +11268,19 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01061">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>
@@ -9474,9 +11316,17 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01073">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>
@@ -9512,10 +11362,19 @@ Variables</h2></td></tr>
</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#l01085">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#l00042">Types.hpp:42</a></div></div>
+<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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01085">ClLayerSupport::IsLogicalBinarySupported()</a>.</p>
+
</div>
</div>
<a id="ace776a194a715c709136a9966ada1a48"></a>
@@ -9545,10 +11404,17 @@ Variables</h2></td></tr>
</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#l00938">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#l00042">Types.hpp:42</a></div></div>
+<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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00938">ClLayerSupport::IsElementwiseUnarySupported()</a>.</p>
+
</div>
</div>
<a id="a89391e63f7a679b023e6bd1798186db6"></a>
@@ -9584,10 +11450,19 @@ Variables</h2></td></tr>
</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#l01085">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#l00042">Types.hpp:42</a></div></div>
+<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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01085">ClLayerSupport::IsLogicalBinarySupported()</a>.</p>
+
</div>
</div>
<a id="a7071f5d6693d3014ddcb34c886ffc734"></a>
@@ -9623,10 +11498,16 @@ Variables</h2></td></tr>
</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#l01113">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#l00264">ArmComputeUtils.hpp:264</a></div></div>
+<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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01113">ClLayerSupport::IsLogSoftmaxSupported()</a>.</p>
+
</div>
</div>
<a id="a64806be3c31d35b75546da7c6b6b46d0"></a>
@@ -9656,9 +11537,15 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00938">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>
@@ -9730,10 +11617,129 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_lstm_float_workload_8cpp_source.xhtml#l00244">244</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#l01125">ClLayerSupport::IsLstmSupported()</a>.</p>
-<div class="fragment"><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; arm_compute::LSTMParams&lt;arm_compute::ITensorInfo&gt; lstm_params_info;</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">// The inputs and the outputs</span></div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateInInfo = BuildArmComputeTensorInfo(outputStateIn);</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateInInfo = BuildArmComputeTensorInfo(cellStateIn);</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclScratchBufferInfo = BuildArmComputeTensorInfo(scratchBuffer);</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateOutInfo = BuildArmComputeTensorInfo(outputStateOut);</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateOutInfo = BuildArmComputeTensorInfo(cellStateOut);</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</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; <span class="comment">// Basic parameters</span></div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToForgetWeightsInfo</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToForgetWeights());</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToCellWeightsInfo</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToCellWeights());</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToOutputWeightsInfo</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToOutputWeights());</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToForgetWeightsInfo</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToForgetWeights());</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToCellWeightsInfo</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToCellWeights());</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToOutputWeightsInfo</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToOutputWeights());</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclForgetGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetForgetGateBias());</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellBias());</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetOutputGateBias());</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; arm_compute::TensorInfo aclInputToInputWeightsInfo;</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; arm_compute::TensorInfo aclRecurrentToInputWeightsInfo;</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; arm_compute::TensorInfo aclCellToInputWeightsInfo;</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; arm_compute::TensorInfo aclInputGateBiasInfo;</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; arm_compute::TensorInfo aclProjectionWeightsInfo;</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; arm_compute::TensorInfo aclProjectionBiasInfo;</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; arm_compute::TensorInfo aclCellToForgetWeightsInfo;</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; arm_compute::TensorInfo aclCellToOutputWeightsInfo;</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; arm_compute::TensorInfo aclInputLayerNormWeightsInfo;</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; arm_compute::TensorInfo aclForgetLayerNormWeightsInfo;</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; arm_compute::TensorInfo aclCellLayerNormWeightsInfo;</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; arm_compute::TensorInfo aclOutputLayerNormWeightsInfo;</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160;</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</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; aclInputToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputToInputWeights());</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; aclRecurrentToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToInputWeights());</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">if</span> (paramsInfo.m_CellToInputWeights != <span class="keyword">nullptr</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; aclCellToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToInputWeights());</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; aclInputGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputGateBias());</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; lstm_params_info.set_cifg_params(&amp;aclInputToInputWeightsInfo, &amp;aclRecurrentToInputWeightsInfo,</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; paramsInfo.m_CellToInputWeights != <span class="keyword">nullptr</span> ?</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; &amp;aclCellToInputWeightsInfo: <span class="keyword">nullptr</span>,</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; &amp;aclInputGateBiasInfo);</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="keywordflow">if</span> (descriptor.m_ProjectionEnabled)</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; aclProjectionWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionWeights());</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; <span class="keywordflow">if</span> (paramsInfo.m_ProjectionBias != <span class="keyword">nullptr</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; aclProjectionBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionBias());</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; lstm_params_info.set_projection_params(&amp;aclProjectionWeightsInfo,</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; paramsInfo.m_ProjectionBias != <span class="keyword">nullptr</span> ?</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; &amp;aclProjectionBiasInfo: <span class="keyword">nullptr</span>);</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">if</span> (descriptor.m_PeepholeEnabled)</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; aclCellToForgetWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToForgetWeights());</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; aclCellToOutputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToOutputWeights());</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; lstm_params_info.set_peephole_params(&amp;aclCellToForgetWeightsInfo, &amp;aclCellToOutputWeightsInfo);</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; <span class="keywordtype">float</span> cell_threshold = descriptor.m_ClippingThresCell;</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <span class="keywordtype">float</span> projection_threshold = descriptor.m_ClippingThresProj;</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">// for preparing the object for the class ActivationLayerInfo, we need to consider 5 situations</span></div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; arm_compute::ActivationLayerInfo activationLayerInfo =</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <a class="code" href="namespacearmnn.xhtml#aa1e93ef5f9ee3dbb5e7faa9578f180ae">ConvertLstmActivationFuncToAclLayerInfo</a>(descriptor.m_ActivationFunc);</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_LayerNormEnabled)</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; aclInputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputLayerNormWeights());</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;</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; aclForgetLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetForgetLayerNormWeights());</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; aclCellLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellLayerNormWeights());</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; 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; lstm_params_info.set_layer_normalization_params(descriptor.m_CifgEnabled ?</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <span class="keyword">nullptr</span> : &amp;aclInputLayerNormWeightsInfo,</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; &amp;aclForgetLayerNormWeightsInfo,</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; &amp;aclCellLayerNormWeightsInfo,</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; &amp;aclOutputLayerNormWeightsInfo);</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; <span class="keywordflow">return</span> arm_compute::CLLSTMLayer::validate(&amp;aclInputInfo, &amp;aclInputToForgetWeightsInfo,</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; &amp;aclInputToCellWeightsInfo,</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; &amp;aclInputToOutputWeightsInfo,</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; &amp;aclRecurrentToForgetWeightsInfo,</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; &amp;aclRecurrentToCellWeightsInfo,</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; &amp;aclRecurrentToOutputWeightsInfo,</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; &amp;aclForgetGateBiasInfo,</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; &amp;aclCellBiasInfo,</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; &amp;aclOutputGateBiasInfo,</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; &amp;aclOutputStateInInfo, &amp;aclCellStateInInfo,</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; &amp;aclScratchBufferInfo, &amp;aclOutputStateOutInfo,</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; &amp;aclCellStateOutInfo, &amp;aclOutputInfo,</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; lstm_params_info, activationLayerInfo,</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; cell_threshold, projection_threshold);</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_aa1e93ef5f9ee3dbb5e7faa9578f180ae"><div class="ttname"><a href="namespacearmnn.xhtml#aa1e93ef5f9ee3dbb5e7faa9578f180ae">armnn::ConvertLstmActivationFuncToAclLayerInfo</a></div><div class="ttdeci">arm_compute::ActivationLayerInfo ConvertLstmActivationFuncToAclLayerInfo(uint32_t activationFunction)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.xhtml#l00116">ArmComputeUtils.hpp:116</a></div></div>
+<div class="fragment"><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; arm_compute::LSTMParams&lt;arm_compute::ITensorInfo&gt; lstm_params_info;</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">// The inputs and the outputs</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateInInfo = BuildArmComputeTensorInfo(outputStateIn);</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateInInfo = BuildArmComputeTensorInfo(cellStateIn);</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclScratchBufferInfo = BuildArmComputeTensorInfo(scratchBuffer);</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateOutInfo = BuildArmComputeTensorInfo(outputStateOut);</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateOutInfo = BuildArmComputeTensorInfo(cellStateOut);</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</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; <span class="comment">// Basic parameters</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToForgetWeightsInfo</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToForgetWeights());</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToCellWeightsInfo</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToCellWeights());</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToOutputWeightsInfo</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToOutputWeights());</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToForgetWeightsInfo</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToForgetWeights());</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToCellWeightsInfo</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToCellWeights());</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToOutputWeightsInfo</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToOutputWeights());</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclForgetGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetForgetGateBias());</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellBias());</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetOutputGateBias());</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; arm_compute::TensorInfo aclInputToInputWeightsInfo;</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; arm_compute::TensorInfo aclRecurrentToInputWeightsInfo;</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; arm_compute::TensorInfo aclCellToInputWeightsInfo;</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; arm_compute::TensorInfo aclInputGateBiasInfo;</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; arm_compute::TensorInfo aclProjectionWeightsInfo;</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; arm_compute::TensorInfo aclProjectionBiasInfo;</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; arm_compute::TensorInfo aclCellToForgetWeightsInfo;</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; arm_compute::TensorInfo aclCellToOutputWeightsInfo;</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; arm_compute::TensorInfo aclInputLayerNormWeightsInfo;</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; arm_compute::TensorInfo aclForgetLayerNormWeightsInfo;</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; arm_compute::TensorInfo aclCellLayerNormWeightsInfo;</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; arm_compute::TensorInfo aclOutputLayerNormWeightsInfo;</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; </div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</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; aclInputToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputToInputWeights());</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; aclRecurrentToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToInputWeights());</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">if</span> (paramsInfo.m_CellToInputWeights != <span class="keyword">nullptr</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; aclCellToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToInputWeights());</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; aclInputGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputGateBias());</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; lstm_params_info.set_cifg_params(&amp;aclInputToInputWeightsInfo, &amp;aclRecurrentToInputWeightsInfo,</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; paramsInfo.m_CellToInputWeights != <span class="keyword">nullptr</span> ?</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; &amp;aclCellToInputWeightsInfo: <span class="keyword">nullptr</span>,</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; &amp;aclInputGateBiasInfo);</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="keywordflow">if</span> (descriptor.m_ProjectionEnabled)</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; aclProjectionWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionWeights());</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; <span class="keywordflow">if</span> (paramsInfo.m_ProjectionBias != <span class="keyword">nullptr</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; aclProjectionBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionBias());</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; lstm_params_info.set_projection_params(&amp;aclProjectionWeightsInfo,</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; paramsInfo.m_ProjectionBias != <span class="keyword">nullptr</span> ?</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; &amp;aclProjectionBiasInfo: <span class="keyword">nullptr</span>);</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">if</span> (descriptor.m_PeepholeEnabled)</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; aclCellToForgetWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToForgetWeights());</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; aclCellToOutputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToOutputWeights());</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; lstm_params_info.set_peephole_params(&amp;aclCellToForgetWeightsInfo, &amp;aclCellToOutputWeightsInfo);</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; <span class="keywordtype">float</span> cell_threshold = descriptor.m_ClippingThresCell;</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <span class="keywordtype">float</span> projection_threshold = descriptor.m_ClippingThresProj;</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">// for preparing the object for the class ActivationLayerInfo, we need to consider 5 situations</span></div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; arm_compute::ActivationLayerInfo activationLayerInfo =</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <a class="code" href="namespacearmnn.xhtml#aa1e93ef5f9ee3dbb5e7faa9578f180ae">ConvertLstmActivationFuncToAclLayerInfo</a>(descriptor.m_ActivationFunc);</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_LayerNormEnabled)</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; aclInputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputLayerNormWeights());</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; </div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; aclForgetLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetForgetLayerNormWeights());</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; aclCellLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellLayerNormWeights());</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; 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; lstm_params_info.set_layer_normalization_params(descriptor.m_CifgEnabled ?</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <span class="keyword">nullptr</span> : &amp;aclInputLayerNormWeightsInfo,</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; &amp;aclForgetLayerNormWeightsInfo,</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; &amp;aclCellLayerNormWeightsInfo,</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; &amp;aclOutputLayerNormWeightsInfo);</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; <span class="keywordflow">return</span> arm_compute::CLLSTMLayer::validate(&amp;aclInputInfo, &amp;aclInputToForgetWeightsInfo,</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; &amp;aclInputToCellWeightsInfo,</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; &amp;aclInputToOutputWeightsInfo,</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; &amp;aclRecurrentToForgetWeightsInfo,</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; &amp;aclRecurrentToCellWeightsInfo,</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; &amp;aclRecurrentToOutputWeightsInfo,</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; &amp;aclForgetGateBiasInfo,</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; &amp;aclCellBiasInfo,</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; &amp;aclOutputGateBiasInfo,</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; &amp;aclOutputStateInInfo, &amp;aclCellStateInInfo,</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; &amp;aclScratchBufferInfo, &amp;aclOutputStateOutInfo,</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; &amp;aclCellStateOutInfo, &amp;aclOutputInfo,</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; lstm_params_info, activationLayerInfo,</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; cell_threshold, projection_threshold);</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160;}</div>
</div><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01125">ClLayerSupport::IsLstmSupported()</a>.</p>
+
</div>
</div>
<a id="a553706c6338ffc52b0d916859f642587"></a>
@@ -9769,10 +11775,20 @@ Variables</h2></td></tr>
</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#l01149">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#l00042">Types.hpp:42</a></div></div>
+<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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01149">ClLayerSupport::IsMaximumSupported()</a>.</p>
+
</div>
</div>
<a id="a048a8ea8b1b39343a73ca7458024ea54"></a>
@@ -9808,10 +11824,19 @@ Variables</h2></td></tr>
</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#l01161">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 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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01161">ClLayerSupport::IsMeanSupported()</a>.</p>
+
</div>
</div>
<a id="a8c04c8e796a4fbec706df42ed9c27e4e"></a>
@@ -9847,10 +11872,20 @@ Variables</h2></td></tr>
</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#l01173">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#l00042">Types.hpp:42</a></div></div>
+<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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01173">ClLayerSupport::IsMinimumSupported()</a>.</p>
+
</div>
</div>
<a id="a9638165cb6c1baae3b2b5fd9f0f75201"></a>
@@ -9892,11 +11927,32 @@ Variables</h2></td></tr>
</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#l01185">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#l00284">TypesUtils.hpp:284</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 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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01185">ClLayerSupport::IsMultiplicationSupported()</a>, and <a class="el" href="_cl_backend_8cpp_source.xhtml#l00276">ClBackend::OptimizeSubgraphView()</a>.</p>
+
</div>
</div>
<a id="a66a3a6c05b38e48508bbbb3f32023ab7"></a>
@@ -9926,9 +11982,15 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00938">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>
@@ -9964,9 +12026,17 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01198">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>
@@ -10002,11 +12072,32 @@ Variables</h2></td></tr>
</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#l01212">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#l00042">Types.hpp:42</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#l00327">ArmComputeUtils.hpp:327</a></div></div>
+<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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01212">ClLayerSupport::IsPadSupported()</a>.</p>
+
</div>
</div>
<a id="a26c25df9e2271333ab4d4ef71db41dca"></a>
@@ -10042,10 +12133,17 @@ Variables</h2></td></tr>
</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#l01224">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#l00295">Types.hpp:295</a></div></div>
+<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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01224">ClLayerSupport::IsPermuteSupported()</a>.</p>
+
</div>
</div>
<a id="a8a21bb33f7f054ce7b48a8c7df9e6d4a"></a>
@@ -10081,9 +12179,17 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01232">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="a85776d92e056832a524c6f2cf4741ced"></a>
@@ -10119,9 +12225,17 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_pooling3d_workload_8cpp_source.xhtml#l00018">18</a> of file <a class="el" href="_cl_pooling3d_workload_8cpp_source.xhtml">ClPooling3dWorkload.cpp</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::Pooling3dLayerInfo layerInfo = BuildArmComputePooling3dLayerInfo(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::CLPooling3dLayer::validate(&amp;aclInputInfo, &amp;aclOutputInfo, layerInfo);</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; }</div>
+</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01240">ClLayerSupport::IsPooling3dSupported()</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::Pooling3dLayerInfo layerInfo = BuildArmComputePooling3dLayerInfo(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::CLPooling3dLayer::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>
@@ -10157,9 +12271,18 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01248">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>
@@ -10225,9 +12348,150 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01256">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>
@@ -10281,9 +12545,50 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01290">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>
@@ -10313,9 +12618,16 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01308">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>
@@ -10351,16 +12663,35 @@ Variables</h2></td></tr>
</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>
-
+<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; <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(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><!-- fragment -->
<p class="reference">References <a class="el" href="_descriptors_8hpp_source.xhtml#l01503">ReduceDescriptor::m_vAxis</a>.</p>
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01318">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#l00405">ArmComputeUtils.hpp:405</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#l00338">ArmComputeUtils.hpp:338</a></div></div>
-<div class="ttc" id="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70b"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">armnn::Status</a></div><div class="ttdeci">Status</div><div class="ttdoc">enumeration </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00042">Types.hpp:42</a></div></div>
-<div class="ttc" id="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>
@@ -10390,9 +12721,15 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01330">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>
@@ -10428,11 +12765,32 @@ Variables</h2></td></tr>
</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#l01339">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#l00211">ArmComputeUtils.hpp:211</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#l00062">Types.hpp:62</a></div></div>
+<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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01339">ClLayerSupport::IsResizeSupported()</a>.</p>
+
</div>
</div>
<a id="a3f6f9f0d3567ae04b49ea88727845900"></a>
@@ -10462,9 +12820,15 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00938">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>
@@ -10494,9 +12858,15 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00938">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>
@@ -10532,11 +12902,20 @@ Variables</h2></td></tr>
</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#l01347">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#l00092">ClWorkloadUtils.hpp:92</a></div></div>
+<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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01347">ClLayerSupport::IsSliceSupported()</a>.</p>
+
</div>
</div>
<a id="abc6f7e5fe77e5aed3f7842755dd34073"></a>
@@ -10572,10 +12951,16 @@ Variables</h2></td></tr>
</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#l01355">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#l00264">ArmComputeUtils.hpp:264</a></div></div>
+<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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01355">ClLayerSupport::IsSoftmaxSupported()</a>.</p>
+
</div>
</div>
<a id="a534b28fd4b345bbc938d055ff5b8970f"></a>
@@ -10611,10 +12996,29 @@ Variables</h2></td></tr>
</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#l01363">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 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 = armnn::numeric_cast&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 = armnn::numeric_cast&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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01363">ClLayerSupport::IsSpaceToBatchNdSupported()</a>.</p>
+
</div>
</div>
<a id="a4fa3292a277dde3b46be6a44b2de9713"></a>
@@ -10650,14 +13054,24 @@ Variables</h2></td></tr>
</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>
-
+<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 = armnn::numeric_cast&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><!-- fragment -->
<p class="reference">References <a class="el" href="_descriptors_8hpp_source.xhtml#l01042">SpaceToDepthDescriptor::m_DataLayout</a>.</p>
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01375">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#l00062">Types.hpp:62</a></div></div>
-<div class="ttc" id="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70b"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">armnn::Status</a></div><div class="ttdeci">Status</div><div class="ttdoc">enumeration </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00042">Types.hpp:42</a></div></div>
-<div class="ttc" id="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>
@@ -10693,9 +13107,29 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01387">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="a34e66b74a990db4b29ea4f904c69d7d9"></a>
@@ -10725,14 +13159,24 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_sqrt_workload_8cpp_source.xhtml#l00019">19</a> of file <a class="el" href="_cl_sqrt_workload_8cpp_source.xhtml">ClSqrtWorkload.cpp</a>.</p>
-
-<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00938">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; ActivationDescriptor descriptor;</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; descriptor.m_Function = ActivationFunction::Sqrt;</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationLayerInfo =</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(descriptor);</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::CLActivationLayer::validate(&amp;aclInput, &amp;aclOutput, 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 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; ActivationDescriptor descriptor;</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; descriptor.m_Function = ActivationFunction::Sqrt;</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationLayerInfo =</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(descriptor);</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::CLActivationLayer::validate(&amp;aclInput, &amp;aclOutput, activationLayerInfo);</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;}</div>
</div><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00938">ClLayerSupport::IsElementwiseUnarySupported()</a>.</p>
+
</div>
</div>
-<a id="a8c9fec997dbb5db4cdb433c36d075782"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a8c9fec997dbb5db4cdb433c36d075782">&#9670;&nbsp;</a></span>ClStackWorkloadValidate()</h2>
+<a id="a776783e716aa3dd5975c72696d0b7abb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a776783e716aa3dd5975c72696d0b7abb">&#9670;&nbsp;</a></span>ClStackWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
@@ -10740,7 +13184,7 @@ Variables</h2></td></tr>
<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="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>
@@ -10764,9 +13208,23 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01420">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>
@@ -10802,13 +13260,33 @@ Variables</h2></td></tr>
</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#l01432">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#l00286">WorkloadUtils.cpp:286</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#l00071">ClWorkloadUtils.hpp:71</a></div></div>
+<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 = armnn::numeric_cast&lt;int&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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01432">ClLayerSupport::IsStridedSliceSupported()</a>.</p>
+
</div>
</div>
<a id="afa9933f1d9de469ffba5ba0fcee769f8"></a>
@@ -10850,11 +13328,25 @@ Variables</h2></td></tr>
</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#l01444">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#l00042">Types.hpp:42</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 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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01444">ClLayerSupport::IsSubtractionSupported()</a>, and <a class="el" href="_cl_backend_8cpp_source.xhtml#l00276">ClBackend::OptimizeSubgraphView()</a>.</p>
+
</div>
</div>
<a id="ac86fc56b9a27576bfe930a7012a402d5"></a>
@@ -10862,6 +13354,9 @@ Variables</h2></td></tr>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr const char* armnn::ClTensorHandleFactoryId </td>
@@ -10870,12 +13365,20 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
-
+<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 -->
<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>
@@ -10923,10 +13426,33 @@ Variables</h2></td></tr>
</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#l01457">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 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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01457">ClLayerSupport::IsTransposeConvolution2dSupported()</a>.</p>
+
</div>
</div>
<a id="a1c3a39fbecb45be0bb15dd665c9be61d"></a>
@@ -10962,10 +13488,17 @@ Variables</h2></td></tr>
</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#l01473">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#l00295">Types.hpp:295</a></div></div>
+<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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01473">ClLayerSupport::IsTransposeSupported()</a>.</p>
+
</div>
</div>
<a id="a924063ef859ec5f9a1466a42e7409c85"></a>
@@ -11031,19 +13564,375 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_unidirectional_sequence_lstm_float_workload_8cpp_source.xhtml#l00508">508</a> of file <a class="el" href="_cl_unidirectional_sequence_lstm_float_workload_8cpp_source.xhtml">ClUnidirectionalSequenceLstmFloatWorkload.cpp</a>.</p>
-
+<div class="fragment"><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; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(hiddenStateOutput, cellStateOutput);</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; TensorShape inputLayerShape = input.GetShape();</div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; TensorShape outputLayerShape = outputStateIn.GetShape();</div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; </div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> maxTime = descriptor.m_TimeMajor?inputLayerShape[0]:inputLayerShape[1];</div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> batchSize = descriptor.m_TimeMajor?inputLayerShape[1]:inputLayerShape[0];</div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputSize = inputLayerShape[2];</div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputSize = outputLayerShape[2];</div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; </div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; <span class="keyword">const</span> TensorShape timeMajorShapeInput({maxTime, batchSize, inputSize});</div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; <span class="keyword">const</span> TensorShape timeMajorShapeOutput({maxTime, batchSize, outputSize});</div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; </div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusPermute1 = <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <span class="stringliteral">&quot;Permute1 status&quot;</span>);</div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusSplit = <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <span class="stringliteral">&quot;Split status&quot;</span>);</div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusLSTM = <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; <span class="stringliteral">&quot;LSTM status&quot;</span>);</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusConcat = <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; <span class="stringliteral">&quot;Concat status&quot;</span>);</div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusPermute2 = <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <span class="stringliteral">&quot;Permute2 status&quot;</span>);</div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; </div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; </div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <span class="comment">//</span></div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; <span class="comment">// Permute validate</span></div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; <span class="comment">//</span></div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; TensorInfo permuteOutInfo = TensorInfo(input);</div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; arm_compute::TensorInfo aclPermuteOutInfo = armcomputetensorutils::BuildArmComputeTensorInfo(permuteOutInfo);</div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; {</div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; statusPermute1 = arm_compute::CLPermute::validate(&amp;aclInputInfo,</div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; &amp;aclPermuteOutInfo,</div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; arm_compute::PermutationVector(0U, 2U, 1U));</div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; }</div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; </div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; <span class="comment">//</span></div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; <span class="comment">// Split and Concat Tensors validate</span></div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; <span class="comment">//</span></div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; std::vector&lt;arm_compute::TensorInfo&gt; splitterOutputsTensorInfos;</div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; std::vector&lt;arm_compute::TensorInfo&gt; concatInputsTensorInfos;</div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; std::vector&lt;arm_compute::ITensorInfo*&gt; splitterOutputsTensorInfosPtr;</div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; std::vector&lt;const arm_compute::ITensorInfo*&gt; concatInputsTensorInfosPtr;</div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; splitterOutputsTensorInfos.reserve(maxTime);</div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; concatInputsTensorInfos.reserve(maxTime);</div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; maxTime; ++i)</div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; {</div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; arm_compute::TensorInfo splitter_out;</div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; arm_compute::TensorInfo concat_in;</div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; </div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; <span class="keyword">auto</span> splitterTensorInfo = TensorInfo(input);</div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; <span class="keyword">auto</span> concatTensorInfo = TensorInfo(output);</div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; splitterTensorInfo.SetShape({batchSize, inputSize});</div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; concatTensorInfo.SetShape({batchSize, outputSize});</div>
+<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; arm_compute::TensorInfo aclSplitterTensorInfo</div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; = armcomputetensorutils::BuildArmComputeTensorInfo(splitterTensorInfo);</div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; arm_compute::TensorInfo aclConcatTensorInfo</div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; = armcomputetensorutils::BuildArmComputeTensorInfo(concatTensorInfo);</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; splitterOutputsTensorInfos.emplace_back(aclSplitterTensorInfo);</div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; concatInputsTensorInfos.emplace_back(aclConcatTensorInfo);</div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; splitterOutputsTensorInfosPtr.emplace_back(&amp;splitterOutputsTensorInfos[i]);</div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; concatInputsTensorInfosPtr.emplace_back(&amp;concatInputsTensorInfos[i]);</div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; }</div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; </div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; <span class="comment">//</span></div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; <span class="comment">// Split validate</span></div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; <span class="comment">//</span></div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numberDimensions = 3;</div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dimension = 0; <span class="comment">// splitting on 0-dimension (i.e. maxTime dimension)</span></div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> aclAxisSplit = CalcAclAxis(numberDimensions, dimension);</div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; </div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <span class="keywordflow">if</span> (maxTime != 1) <span class="comment">// ACL split does not work with only one element to split.</span></div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; {</div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; {</div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; statusSplit = arm_compute::CLSplit::validate(&amp;aclPermuteOutInfo,</div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; splitterOutputsTensorInfosPtr,</div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; aclAxisSplit);</div>
+<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; <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; {</div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; statusSplit = arm_compute::CLSplit::validate(&amp;aclInputInfo, splitterOutputsTensorInfosPtr, aclAxisSplit);</div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; }</div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; }</div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; </div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; <span class="comment">//</span></div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; <span class="comment">// LSTM validate</span></div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; <span class="comment">//</span></div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; </div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; arm_compute::LSTMParams&lt;arm_compute::ITensorInfo&gt; lstm_params_info;</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; <span class="keyword">const</span> TensorInfo&amp; scratchBuffer = TensorInfo(cellStateIn.GetShape(), input.GetDataType());</div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <span class="keyword">const</span> TensorInfo&amp; outputStateOut = TensorInfo(outputStateIn.GetShape(), input.GetDataType());</div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; <span class="keyword">const</span> TensorInfo&amp; cellStateOut = TensorInfo(cellStateIn.GetShape(), input.GetDataType());</div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; </div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; <span class="comment">// The inputs and outputs</span></div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateInInfo = BuildArmComputeTensorInfo(outputStateIn);</div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateInInfo = BuildArmComputeTensorInfo(cellStateIn);</div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclScratchBufferInfo = BuildArmComputeTensorInfo(scratchBuffer);</div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateOutInfo = BuildArmComputeTensorInfo(outputStateOut);</div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateOutInfo = BuildArmComputeTensorInfo(cellStateOut);</div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; </div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; <span class="comment">// Basic parameters</span></div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToForgetWeightsInfo</div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToForgetWeights());</div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToCellWeightsInfo</div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToCellWeights());</div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToOutputWeightsInfo</div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToOutputWeights());</div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToForgetWeightsInfo</div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToForgetWeights());</div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToCellWeightsInfo</div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToCellWeights());</div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToOutputWeightsInfo</div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToOutputWeights());</div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclForgetGateBiasInfo</div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetForgetGateBias());</div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellBiasInfo</div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetCellBias());</div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputGateBiasInfo</div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetOutputGateBias());</div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; </div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; arm_compute::TensorInfo aclInputToInputWeightsInfo;</div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; arm_compute::TensorInfo aclRecurrentToInputWeightsInfo;</div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; arm_compute::TensorInfo aclCellToInputWeightsInfo;</div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; arm_compute::TensorInfo aclInputGateBiasInfo;</div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; arm_compute::TensorInfo aclProjectionWeightsInfo;</div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; arm_compute::TensorInfo aclProjectionBiasInfo;</div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; arm_compute::TensorInfo aclCellToForgetWeightsInfo;</div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; arm_compute::TensorInfo aclCellToOutputWeightsInfo;</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; arm_compute::TensorInfo aclInputLayerNormWeightsInfo;</div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; arm_compute::TensorInfo aclForgetLayerNormWeightsInfo;</div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; arm_compute::TensorInfo aclCellLayerNormWeightsInfo;</div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; arm_compute::TensorInfo aclOutputLayerNormWeightsInfo;</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; </div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; {</div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; {</div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; aclCellToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToInputWeights());</div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; }</div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; aclInputToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputToInputWeights());</div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; aclRecurrentToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToInputWeights());</div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; aclInputGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputGateBias());</div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; </div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; lstm_params_info.set_cifg_params(&amp;aclInputToInputWeightsInfo,</div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; &amp;aclRecurrentToInputWeightsInfo,</div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; descriptor.m_PeepholeEnabled ? &amp;aclCellToInputWeightsInfo : <span class="keyword">nullptr</span>,</div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; &amp;aclInputGateBiasInfo);</div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; }</div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; </div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; <span class="keywordflow">if</span> (descriptor.m_ProjectionEnabled)</div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; {</div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; <span class="keywordflow">if</span> (paramsInfo.m_ProjectionBias != <span class="keyword">nullptr</span>)</div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; {</div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; aclProjectionBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionBias());</div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; }</div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; aclProjectionWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionWeights());</div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; </div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; lstm_params_info.set_projection_params(&amp;aclProjectionWeightsInfo,</div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; paramsInfo.m_ProjectionBias ? &amp;aclProjectionBiasInfo : <span class="keyword">nullptr</span>);</div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; }</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; <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</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; aclCellToForgetWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToForgetWeights());</div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; aclCellToOutputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToOutputWeights());</div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; </div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; lstm_params_info.set_peephole_params(&amp;aclCellToForgetWeightsInfo, &amp;aclCellToOutputWeightsInfo);</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; <span class="keywordflow">if</span> (descriptor.m_LayerNormEnabled)</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; <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</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; aclInputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputLayerNormWeights());</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; aclForgetLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetForgetLayerNormWeights());</div>
+<div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; aclCellLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellLayerNormWeights());</div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; aclOutputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetOutputLayerNormWeights());</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; lstm_params_info.set_layer_normalization_params(descriptor.m_CifgEnabled ? <span class="keyword">nullptr</span> :</div>
+<div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; &amp;aclInputLayerNormWeightsInfo,</div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; &amp;aclForgetLayerNormWeightsInfo,</div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; &amp;aclCellLayerNormWeightsInfo,</div>
+<div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; &amp;aclOutputLayerNormWeightsInfo);</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; </div>
+<div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; <span class="comment">// Need to be set at negative threshold to be compatible for ACL</span></div>
+<div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; <span class="keywordtype">float</span> cell_threshold = descriptor.m_ClippingThresCell;</div>
+<div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; <span class="keywordtype">float</span> projection_threshold = descriptor.m_ClippingThresProj;</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; arm_compute::ActivationLayerInfo activationLayerInfo =</div>
+<div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; <a class="code" href="namespacearmnn.xhtml#aa1e93ef5f9ee3dbb5e7faa9578f180ae">ConvertLstmActivationFuncToAclLayerInfo</a>(descriptor.m_ActivationFunc);</div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; </div>
+<div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i != maxTime; ++i)</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; </div>
+<div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; <span class="comment">// Set LSTM input and output ITensors depending on:</span></div>
+<div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; <span class="comment">// input format (timeMajor) &amp; number of LSTM batches (maxTime).</span></div>
+<div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; arm_compute::ITensorInfo* outputLSTM;</div>
+<div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; arm_compute::ITensorInfo* inputLSTM;</div>
+<div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; <span class="comment">// If there is only one LSTM time major batch, we will not concat OR permute.</span></div>
+<div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; <span class="comment">// Set input of LSTM to be first input ITensor.</span></div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; <span class="comment">// Set output of LSTM to be final output ITensor.</span></div>
+<div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; <span class="comment">// LSTM input/output cannot be &gt; 2 dimensions so need to resize its TensorInfo.</span></div>
+<div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; <span class="keywordflow">if</span> (maxTime == 1 &amp;&amp; !descriptor.m_TimeMajor)</div>
+<div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; {</div>
+<div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; TensorShape inputShape = <a class="code" href="namespacearmnn_utils.xhtml#ab53d94ea22b51c6bcdf9584644bd67bb">GetTensorShape</a>(aclInputInfo.tensor_shape(), 1U);</div>
+<div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; TensorShape outputShape = <a class="code" href="namespacearmnn_utils.xhtml#ab53d94ea22b51c6bcdf9584644bd67bb">GetTensorShape</a>(aclOutputInfo.tensor_shape(), 1U);</div>
+<div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; TensorShape inputShapeShrink({inputShape[1], inputShape[2]});</div>
+<div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; TensorShape outputShapeShrink({outputShape[1], outputShape[2]});</div>
+<div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; <span class="keyword">auto</span> acl_input_shape_shrink = BuildArmComputeTensorShape(inputShapeShrink);</div>
+<div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; <span class="keyword">auto</span> acl_output_shape_shrink = BuildArmComputeTensorShape(outputShapeShrink);</div>
+<div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; <span class="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclInputInfo)-&gt;set_tensor_shape(acl_input_shape_shrink);</div>
+<div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; inputLSTM = <span class="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclInputInfo);</div>
+<div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; <span class="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclOutputInfo)-&gt;set_tensor_shape(acl_output_shape_shrink);</div>
+<div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; outputLSTM = <span class="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclOutputInfo);</div>
+<div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; }</div>
+<div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; <span class="comment">// If there is only one LSTM batch major batch, we will not concat, only permute.</span></div>
+<div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; <span class="comment">// Set input of LSTM to be output of initial permute.</span></div>
+<div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; <span class="comment">// Set output of LSTM to be first element of m_ConcatInputs &amp; use that value later in permute.</span></div>
+<div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; <span class="comment">// LSTM output cannot be &gt; 2 dimensions so need to resize its TensorInfo.</span></div>
+<div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (maxTime == 1 &amp;&amp; !descriptor.m_TimeMajor)</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; TensorShape inputShape = <a class="code" href="namespacearmnn_utils.xhtml#ab53d94ea22b51c6bcdf9584644bd67bb">GetTensorShape</a>(aclPermuteOutInfo.tensor_shape(), 1U);</div>
+<div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; TensorShape inputShapeShrink({inputShape[1], inputShape[2]});</div>
+<div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; <span class="keyword">auto</span> acl_input_shape_shrink = BuildArmComputeTensorShape(inputShapeShrink);</div>
+<div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; aclPermuteOutInfo.set_tensor_shape(acl_input_shape_shrink);</div>
+<div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; inputLSTM = &amp;aclPermuteOutInfo;</div>
+<div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; outputLSTM = <span class="keyword">const_cast&lt;</span>arm_compute::ITensorInfo*<span class="keyword">&gt;</span>(concatInputsTensorInfosPtr[i]);</div>
+<div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; }</div>
+<div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; <span class="comment">// Batch major AND/OR 2+ LSTM batches so will use concat AND/OR permute later on.</span></div>
+<div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; {</div>
+<div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; inputLSTM = splitterOutputsTensorInfosPtr[i];</div>
+<div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; outputLSTM = <span class="keyword">const_cast&lt;</span>arm_compute::ITensorInfo*<span class="keyword">&gt;</span>(concatInputsTensorInfosPtr[i]);</div>
+<div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; }</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; statusLSTM = arm_compute::CLLSTMLayer::validate(inputLSTM,</div>
+<div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; &amp;aclInputToForgetWeightsInfo,</div>
+<div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; &amp;aclInputToCellWeightsInfo,</div>
+<div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; &amp;aclInputToOutputWeightsInfo,</div>
+<div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; &amp;aclRecurrentToForgetWeightsInfo,</div>
+<div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; &amp;aclRecurrentToCellWeightsInfo,</div>
+<div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; &amp;aclRecurrentToOutputWeightsInfo,</div>
+<div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; &amp;aclForgetGateBiasInfo,</div>
+<div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; &amp;aclCellBiasInfo,</div>
+<div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; &amp;aclOutputGateBiasInfo,</div>
+<div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; &amp;aclOutputStateInInfo,</div>
+<div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; &amp;aclCellStateInInfo,</div>
+<div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; &amp;aclScratchBufferInfo,</div>
+<div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; &amp;aclOutputStateOutInfo,</div>
+<div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; &amp;aclCellStateOutInfo,</div>
+<div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; outputLSTM,</div>
+<div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; lstm_params_info,</div>
+<div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; activationLayerInfo,</div>
+<div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; cell_threshold,</div>
+<div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; projection_threshold);</div>
+<div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; </div>
+<div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; <span class="keywordflow">if</span> (statusLSTM.error_code() != arm_compute::ErrorCode::OK)</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; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; }</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; <span class="comment">//</span></div>
+<div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; <span class="comment">// Concat validate</span></div>
+<div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; <span class="comment">//</span></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; <span class="comment">// Expand dimensions of LSTM outputs adding one empty dimension to fit concatenate inputs.</span></div>
+<div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; TensorShape shape = <a class="code" href="namespacearmnn_utils.xhtml#ab53d94ea22b51c6bcdf9584644bd67bb">GetTensorShape</a>(concatInputsTensorInfosPtr[0]-&gt;tensor_shape(), 1U);</div>
+<div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; TensorShape shapeExpandTimeMajor({1, shape[0], shape[1]});</div>
+<div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; TensorShape shapeExpandBatchMajor({shape[0], 1, shape[1]});</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; TensorInfo concatOuputTensorInfo = TensorInfo(output);</div>
+<div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; concatOuputTensorInfo.SetShape(timeMajorShapeOutput);</div>
+<div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; arm_compute::TensorInfo aclConcatOuputTensorInfo= BuildArmComputeTensorInfo(concatOuputTensorInfo);</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">if</span> (maxTime != 1) <span class="comment">// ACL concat does not work with only one element to concatenate.</span></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">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; maxTime; ++i)</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="keyword">auto</span> acl_shape_expand = BuildArmComputeTensorShape(shapeExpandTimeMajor);</div>
+<div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; concatInputsTensorInfos[i].set_tensor_shape(acl_shape_expand);</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="keywordtype">unsigned</span> <span class="keywordtype">int</span> aclAxisConcat = CalcAclAxis(numberDimensions, dimension);</div>
+<div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</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; statusConcat = arm_compute::CLConcatenateLayer::validate(concatInputsTensorInfosPtr,</div>
+<div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; &amp;aclConcatOuputTensorInfo,</div>
+<div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; aclAxisConcat);</div>
+<div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; }</div>
+<div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; <span class="keywordflow">else</span></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; statusConcat = arm_compute::CLConcatenateLayer::validate(concatInputsTensorInfosPtr,</div>
+<div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; &amp;aclOutputInfo,</div>
+<div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; aclAxisConcat);</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; }</div>
+<div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; <span class="comment">// If only one LSTM batch, we do not concat and/or permute.</span></div>
+<div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; <span class="comment">// Must ensure final output info is expanded to correct batch major dimensions.</span></div>
+<div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; {</div>
+<div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</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; <span class="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclInputInfo)-&gt;set_tensor_shape(</div>
+<div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; BuildArmComputeTensorShape(shapeExpandBatchMajor));</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; <span class="keywordflow">else</span></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="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclInputInfo)-&gt;set_tensor_shape(</div>
+<div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; BuildArmComputeTensorShape(shapeExpandTimeMajor));</div>
+<div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; }</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; <span class="comment">//</span></div>
+<div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; <span class="comment">// Permute validate</span></div>
+<div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160; <span class="comment">//</span></div>
+<div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div>
+<div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; {</div>
+<div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; <span class="comment">// Output now time major. Permute output back to batch major.</span></div>
+<div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; <span class="keywordflow">if</span> (maxTime != 1)</div>
+<div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; {</div>
+<div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160; statusPermute2 = arm_compute::CLPermute::validate(&amp;aclConcatOuputTensorInfo,</div>
+<div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; &amp;aclOutputInfo,</div>
+<div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; arm_compute::PermutationVector(0U, 2U, 1U));</div>
+<div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; }</div>
+<div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160; <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160; {</div>
+<div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160; statusPermute2 = arm_compute::CLPermute::validate(concatInputsTensorInfosPtr[0],</div>
+<div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160; &amp;aclOutputInfo,</div>
+<div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160; arm_compute::PermutationVector(0U, 2U, 1U));</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; }</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="keyword">auto</span> okCode = arm_compute::ErrorCode::OK;</div>
+<div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160; <span class="keywordflow">if</span> (statusPermute1.error_code() == okCode &amp;&amp;</div>
+<div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160; statusSplit.error_code() == okCode &amp;&amp;</div>
+<div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160; statusLSTM .error_code() == okCode &amp;&amp;</div>
+<div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160; statusConcat.error_code() == okCode &amp;&amp;</div>
+<div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160; statusPermute2.error_code() == okCode)</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; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div>
+<div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160; <span class="stringliteral">&quot;All Unidirectional Sequence LSTM layer validate status OK.&quot;</span>);</div>
+<div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160; }</div>
+<div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160; <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160; {</div>
+<div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::RUNTIME_ERROR,</div>
+<div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160; <span class="stringliteral">&quot;Unidirectional Sequence LSTM layer validate status failed.&quot;</span>);</div>
+<div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160; }</div>
+<div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160;}</div>
+</div><!-- fragment -->
<p class="reference">References <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</a>, <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused()</a>, and <a class="el" href="_descriptors_8hpp_source.xhtml#l01101">LstmDescriptor::m_TimeMajor</a>.</p>
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01481">ClLayerSupport::IsUnidirectionalSequenceLstmSupported()</a>.</p>
-<div class="fragment"><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; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(hiddenStateOutput, cellStateOutput);</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; TensorShape inputLayerShape = input.GetShape();</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; TensorShape outputLayerShape = outputStateIn.GetShape();</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160;</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> maxTime = descriptor.m_TimeMajor?inputLayerShape[0]:inputLayerShape[1];</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> batchSize = descriptor.m_TimeMajor?inputLayerShape[1]:inputLayerShape[0];</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputSize = inputLayerShape[2];</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputSize = outputLayerShape[2];</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160;</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; <span class="keyword">const</span> TensorShape timeMajorShapeInput({maxTime, batchSize, inputSize});</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; <span class="keyword">const</span> TensorShape timeMajorShapeOutput({maxTime, batchSize, outputSize});</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160;</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusPermute1 = <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <span class="stringliteral">&quot;Permute1 status&quot;</span>);</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusSplit = <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <span class="stringliteral">&quot;Split status&quot;</span>);</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusLSTM = <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; <span class="stringliteral">&quot;LSTM status&quot;</span>);</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusConcat = <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; <span class="stringliteral">&quot;Concat status&quot;</span>);</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusPermute2 = <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <span class="stringliteral">&quot;Permute2 status&quot;</span>);</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160;</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160;</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; <span class="comment">// Permute validate</span></div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; TensorInfo permuteOutInfo = TensorInfo(input);</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; arm_compute::TensorInfo aclPermuteOutInfo = armcomputetensorutils::BuildArmComputeTensorInfo(permuteOutInfo);</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; {</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; statusPermute1 = arm_compute::CLPermute::validate(&amp;aclInputInfo,</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; &amp;aclPermuteOutInfo,</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; arm_compute::PermutationVector(0U, 2U, 1U));</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; }</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160;</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; <span class="comment">// Split and Concat Tensors validate</span></div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; std::vector&lt;arm_compute::TensorInfo&gt; splitterOutputsTensorInfos;</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; std::vector&lt;arm_compute::TensorInfo&gt; concatInputsTensorInfos;</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; std::vector&lt;arm_compute::ITensorInfo*&gt; splitterOutputsTensorInfosPtr;</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; std::vector&lt;const arm_compute::ITensorInfo*&gt; concatInputsTensorInfosPtr;</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; splitterOutputsTensorInfos.reserve(maxTime);</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; concatInputsTensorInfos.reserve(maxTime);</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; maxTime; ++i)</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; {</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; arm_compute::TensorInfo splitter_out;</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; arm_compute::TensorInfo concat_in;</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160;</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; <span class="keyword">auto</span> splitterTensorInfo = TensorInfo(input);</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; <span class="keyword">auto</span> concatTensorInfo = TensorInfo(output);</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; splitterTensorInfo.SetShape({batchSize, inputSize});</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; concatTensorInfo.SetShape({batchSize, outputSize});</div><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; arm_compute::TensorInfo aclSplitterTensorInfo</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; = armcomputetensorutils::BuildArmComputeTensorInfo(splitterTensorInfo);</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; arm_compute::TensorInfo aclConcatTensorInfo</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; = armcomputetensorutils::BuildArmComputeTensorInfo(concatTensorInfo);</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; splitterOutputsTensorInfos.emplace_back(aclSplitterTensorInfo);</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; concatInputsTensorInfos.emplace_back(aclConcatTensorInfo);</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; splitterOutputsTensorInfosPtr.emplace_back(&amp;splitterOutputsTensorInfos[i]);</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; concatInputsTensorInfosPtr.emplace_back(&amp;concatInputsTensorInfos[i]);</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; }</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160;</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; <span class="comment">// Split validate</span></div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numberDimensions = 3;</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dimension = 0; <span class="comment">// splitting on 0-dimension (i.e. maxTime dimension)</span></div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> aclAxisSplit = CalcAclAxis(numberDimensions, dimension);</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160;</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <span class="keywordflow">if</span> (maxTime != 1) <span class="comment">// ACL split does not work with only one element to split.</span></div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; {</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; {</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; statusSplit = arm_compute::CLSplit::validate(&amp;aclPermuteOutInfo,</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; splitterOutputsTensorInfosPtr,</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; aclAxisSplit);</div><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; <span class="keywordflow">else</span></div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; {</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; statusSplit = arm_compute::CLSplit::validate(&amp;aclInputInfo, splitterOutputsTensorInfosPtr, aclAxisSplit);</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; }</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; }</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160;</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; <span class="comment">// LSTM validate</span></div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160;</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; arm_compute::LSTMParams&lt;arm_compute::ITensorInfo&gt; lstm_params_info;</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; <span class="keyword">const</span> TensorInfo&amp; scratchBuffer = TensorInfo(cellStateIn.GetShape(), input.GetDataType());</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <span class="keyword">const</span> TensorInfo&amp; outputStateOut = TensorInfo(outputStateIn.GetShape(), input.GetDataType());</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; <span class="keyword">const</span> TensorInfo&amp; cellStateOut = TensorInfo(cellStateIn.GetShape(), input.GetDataType());</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160;</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; <span class="comment">// The inputs and outputs</span></div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateInInfo = BuildArmComputeTensorInfo(outputStateIn);</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateInInfo = BuildArmComputeTensorInfo(cellStateIn);</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclScratchBufferInfo = BuildArmComputeTensorInfo(scratchBuffer);</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateOutInfo = BuildArmComputeTensorInfo(outputStateOut);</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateOutInfo = BuildArmComputeTensorInfo(cellStateOut);</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160;</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; <span class="comment">// Basic parameters</span></div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToForgetWeightsInfo</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToForgetWeights());</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToCellWeightsInfo</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToCellWeights());</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToOutputWeightsInfo</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToOutputWeights());</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToForgetWeightsInfo</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToForgetWeights());</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToCellWeightsInfo</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToCellWeights());</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToOutputWeightsInfo</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToOutputWeights());</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclForgetGateBiasInfo</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetForgetGateBias());</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellBiasInfo</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetCellBias());</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputGateBiasInfo</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetOutputGateBias());</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160;</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; arm_compute::TensorInfo aclInputToInputWeightsInfo;</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; arm_compute::TensorInfo aclRecurrentToInputWeightsInfo;</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; arm_compute::TensorInfo aclCellToInputWeightsInfo;</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; arm_compute::TensorInfo aclInputGateBiasInfo;</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; arm_compute::TensorInfo aclProjectionWeightsInfo;</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; arm_compute::TensorInfo aclProjectionBiasInfo;</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; arm_compute::TensorInfo aclCellToForgetWeightsInfo;</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; arm_compute::TensorInfo aclCellToOutputWeightsInfo;</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; arm_compute::TensorInfo aclInputLayerNormWeightsInfo;</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; arm_compute::TensorInfo aclForgetLayerNormWeightsInfo;</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; arm_compute::TensorInfo aclCellLayerNormWeightsInfo;</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; arm_compute::TensorInfo aclOutputLayerNormWeightsInfo;</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;</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; {</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; {</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; aclCellToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToInputWeights());</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; }</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; aclInputToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputToInputWeights());</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; aclRecurrentToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToInputWeights());</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; aclInputGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputGateBias());</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160;</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; lstm_params_info.set_cifg_params(&amp;aclInputToInputWeightsInfo,</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; &amp;aclRecurrentToInputWeightsInfo,</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; descriptor.m_PeepholeEnabled ? &amp;aclCellToInputWeightsInfo : <span class="keyword">nullptr</span>,</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; &amp;aclInputGateBiasInfo);</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; }</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160;</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; <span class="keywordflow">if</span> (descriptor.m_ProjectionEnabled)</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; {</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; <span class="keywordflow">if</span> (paramsInfo.m_ProjectionBias != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; {</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; aclProjectionBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionBias());</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; }</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; aclProjectionWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionWeights());</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160;</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; lstm_params_info.set_projection_params(&amp;aclProjectionWeightsInfo,</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; paramsInfo.m_ProjectionBias ? &amp;aclProjectionBiasInfo : <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; }</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; <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</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; aclCellToForgetWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToForgetWeights());</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; aclCellToOutputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToOutputWeights());</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160;</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; lstm_params_info.set_peephole_params(&amp;aclCellToForgetWeightsInfo, &amp;aclCellToOutputWeightsInfo);</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; <span class="keywordflow">if</span> (descriptor.m_LayerNormEnabled)</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; <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</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; aclInputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputLayerNormWeights());</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; aclForgetLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetForgetLayerNormWeights());</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; aclCellLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellLayerNormWeights());</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; aclOutputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetOutputLayerNormWeights());</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; lstm_params_info.set_layer_normalization_params(descriptor.m_CifgEnabled ? <span class="keyword">nullptr</span> :</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; &amp;aclInputLayerNormWeightsInfo,</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; &amp;aclForgetLayerNormWeightsInfo,</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; &amp;aclCellLayerNormWeightsInfo,</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; &amp;aclOutputLayerNormWeightsInfo);</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;</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; <span class="comment">// Need to be set at negative threshold to be compatible for ACL</span></div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; <span class="keywordtype">float</span> cell_threshold = descriptor.m_ClippingThresCell;</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; <span class="keywordtype">float</span> projection_threshold = descriptor.m_ClippingThresProj;</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; arm_compute::ActivationLayerInfo activationLayerInfo =</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; <a class="code" href="namespacearmnn.xhtml#aa1e93ef5f9ee3dbb5e7faa9578f180ae">ConvertLstmActivationFuncToAclLayerInfo</a>(descriptor.m_ActivationFunc);</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160;</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i != maxTime; ++i)</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;</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; <span class="comment">// Set LSTM input and output ITensors depending on:</span></div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; <span class="comment">// input format (timeMajor) &amp; number of LSTM batches (maxTime).</span></div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; arm_compute::ITensorInfo* outputLSTM;</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; arm_compute::ITensorInfo* inputLSTM;</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; <span class="comment">// If there is only one LSTM time major batch, we will not concat OR permute.</span></div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; <span class="comment">// Set input of LSTM to be first input ITensor.</span></div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; <span class="comment">// Set output of LSTM to be final output ITensor.</span></div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; <span class="comment">// LSTM input/output cannot be &gt; 2 dimensions so need to resize its TensorInfo.</span></div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; <span class="keywordflow">if</span> (maxTime == 1 &amp;&amp; !descriptor.m_TimeMajor)</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; {</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; TensorShape inputShape = <a class="code" href="namespacearmnn_utils.xhtml#ab53d94ea22b51c6bcdf9584644bd67bb">GetTensorShape</a>(aclInputInfo.tensor_shape(), 1U);</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; TensorShape outputShape = <a class="code" href="namespacearmnn_utils.xhtml#ab53d94ea22b51c6bcdf9584644bd67bb">GetTensorShape</a>(aclOutputInfo.tensor_shape(), 1U);</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; TensorShape inputShapeShrink({inputShape[1], inputShape[2]});</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; TensorShape outputShapeShrink({outputShape[1], outputShape[2]});</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; <span class="keyword">auto</span> acl_input_shape_shrink = BuildArmComputeTensorShape(inputShapeShrink);</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; <span class="keyword">auto</span> acl_output_shape_shrink = BuildArmComputeTensorShape(outputShapeShrink);</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; <span class="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclInputInfo)-&gt;set_tensor_shape(acl_input_shape_shrink);</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; inputLSTM = <span class="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclInputInfo);</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; <span class="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclOutputInfo)-&gt;set_tensor_shape(acl_output_shape_shrink);</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; outputLSTM = <span class="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclOutputInfo);</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; }</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; <span class="comment">// If there is only one LSTM batch major batch, we will not concat, only permute.</span></div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; <span class="comment">// Set input of LSTM to be output of initial permute.</span></div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; <span class="comment">// Set output of LSTM to be first element of m_ConcatInputs &amp; use that value later in permute.</span></div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; <span class="comment">// LSTM output cannot be &gt; 2 dimensions so need to resize its TensorInfo.</span></div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (maxTime == 1 &amp;&amp; !descriptor.m_TimeMajor)</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; TensorShape inputShape = <a class="code" href="namespacearmnn_utils.xhtml#ab53d94ea22b51c6bcdf9584644bd67bb">GetTensorShape</a>(aclPermuteOutInfo.tensor_shape(), 1U);</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; TensorShape inputShapeShrink({inputShape[1], inputShape[2]});</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; <span class="keyword">auto</span> acl_input_shape_shrink = BuildArmComputeTensorShape(inputShapeShrink);</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; aclPermuteOutInfo.set_tensor_shape(acl_input_shape_shrink);</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; inputLSTM = &amp;aclPermuteOutInfo;</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; outputLSTM = <span class="keyword">const_cast&lt;</span>arm_compute::ITensorInfo*<span class="keyword">&gt;</span>(concatInputsTensorInfosPtr[i]);</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; }</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; <span class="comment">// Batch major AND/OR 2+ LSTM batches so will use concat AND/OR permute later on.</span></div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; {</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; inputLSTM = splitterOutputsTensorInfosPtr[i];</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; outputLSTM = <span class="keyword">const_cast&lt;</span>arm_compute::ITensorInfo*<span class="keyword">&gt;</span>(concatInputsTensorInfosPtr[i]);</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; }</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; statusLSTM = arm_compute::CLLSTMLayer::validate(inputLSTM,</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; &amp;aclInputToForgetWeightsInfo,</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; &amp;aclInputToCellWeightsInfo,</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; &amp;aclInputToOutputWeightsInfo,</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; &amp;aclRecurrentToForgetWeightsInfo,</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; &amp;aclRecurrentToCellWeightsInfo,</div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; &amp;aclRecurrentToOutputWeightsInfo,</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; &amp;aclForgetGateBiasInfo,</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; &amp;aclCellBiasInfo,</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; &amp;aclOutputGateBiasInfo,</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; &amp;aclOutputStateInInfo,</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; &amp;aclCellStateInInfo,</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; &amp;aclScratchBufferInfo,</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; &amp;aclOutputStateOutInfo,</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; &amp;aclCellStateOutInfo,</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; outputLSTM,</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; lstm_params_info,</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; activationLayerInfo,</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; cell_threshold,</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; projection_threshold);</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160;</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; <span class="keywordflow">if</span> (statusLSTM.error_code() != arm_compute::ErrorCode::OK)</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; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; }</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; <span class="comment">//</span></div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; <span class="comment">// Concat validate</span></div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; <span class="comment">//</span></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; <span class="comment">// Expand dimensions of LSTM outputs adding one empty dimension to fit concatenate inputs.</span></div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; TensorShape shape = <a class="code" href="namespacearmnn_utils.xhtml#ab53d94ea22b51c6bcdf9584644bd67bb">GetTensorShape</a>(concatInputsTensorInfosPtr[0]-&gt;tensor_shape(), 1U);</div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; TensorShape shapeExpandTimeMajor({1, shape[0], shape[1]});</div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; TensorShape shapeExpandBatchMajor({shape[0], 1, shape[1]});</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; TensorInfo concatOuputTensorInfo = TensorInfo(output);</div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; concatOuputTensorInfo.SetShape(timeMajorShapeOutput);</div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; arm_compute::TensorInfo aclConcatOuputTensorInfo= BuildArmComputeTensorInfo(concatOuputTensorInfo);</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">if</span> (maxTime != 1) <span class="comment">// ACL concat does not work with only one element to concatenate.</span></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">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; maxTime; ++i)</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="keyword">auto</span> acl_shape_expand = BuildArmComputeTensorShape(shapeExpandTimeMajor);</div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; concatInputsTensorInfos[i].set_tensor_shape(acl_shape_expand);</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="keywordtype">unsigned</span> <span class="keywordtype">int</span> aclAxisConcat = CalcAclAxis(numberDimensions, dimension);</div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</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; statusConcat = arm_compute::CLConcatenateLayer::validate(concatInputsTensorInfosPtr,</div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; &amp;aclConcatOuputTensorInfo,</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; aclAxisConcat);</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; }</div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; <span class="keywordflow">else</span></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; statusConcat = arm_compute::CLConcatenateLayer::validate(concatInputsTensorInfosPtr,</div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; &amp;aclOutputInfo,</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; aclAxisConcat);</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; }</div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; <span class="comment">// If only one LSTM batch, we do not concat and/or permute.</span></div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; <span class="comment">// Must ensure final output info is expanded to correct batch major dimensions.</span></div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; {</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</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; <span class="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclInputInfo)-&gt;set_tensor_shape(</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; BuildArmComputeTensorShape(shapeExpandBatchMajor));</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; <span class="keywordflow">else</span></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="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclInputInfo)-&gt;set_tensor_shape(</div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; BuildArmComputeTensorShape(shapeExpandTimeMajor));</div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; }</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; <span class="comment">//</span></div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; <span class="comment">// Permute validate</span></div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; {</div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; <span class="comment">// Output now time major. Permute output back to batch major.</span></div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; <span class="keywordflow">if</span> (maxTime != 1)</div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; {</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160; statusPermute2 = arm_compute::CLPermute::validate(&amp;aclConcatOuputTensorInfo,</div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; &amp;aclOutputInfo,</div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; arm_compute::PermutationVector(0U, 2U, 1U));</div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; }</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160; {</div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160; statusPermute2 = arm_compute::CLPermute::validate(concatInputsTensorInfosPtr[0],</div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160; &amp;aclOutputInfo,</div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160; arm_compute::PermutationVector(0U, 2U, 1U));</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; }</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="keyword">auto</span> okCode = arm_compute::ErrorCode::OK;</div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160; <span class="keywordflow">if</span> (statusPermute1.error_code() == okCode &amp;&amp;</div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160; statusSplit.error_code() == okCode &amp;&amp;</div><div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160; statusLSTM .error_code() == okCode &amp;&amp;</div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160; statusConcat.error_code() == okCode &amp;&amp;</div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160; statusPermute2.error_code() == okCode)</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; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160; <span class="stringliteral">&quot;All Unidirectional Sequence LSTM layer validate status OK.&quot;</span>);</div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160; }</div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160; {</div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::RUNTIME_ERROR,</div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160; <span class="stringliteral">&quot;Unidirectional Sequence LSTM layer validate status failed.&quot;</span>);</div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160; }</div><div class="line"><a name="l00875"></a><span class="lineno"> 875</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_aa1e93ef5f9ee3dbb5e7faa9578f180ae"><div class="ttname"><a href="namespacearmnn.xhtml#aa1e93ef5f9ee3dbb5e7faa9578f180ae">armnn::ConvertLstmActivationFuncToAclLayerInfo</a></div><div class="ttdeci">arm_compute::ActivationLayerInfo ConvertLstmActivationFuncToAclLayerInfo(uint32_t activationFunction)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.xhtml#l00116">ArmComputeUtils.hpp:116</a></div></div>
-<div class="ttc" id="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70b"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">armnn::Status</a></div><div class="ttdeci">Status</div><div class="ttdoc">enumeration </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00042">Types.hpp:42</a></div></div>
-<div class="ttc" id="namespacearmnn_utils_xhtml_ab53d94ea22b51c6bcdf9584644bd67bb"><div class="ttname"><a href="namespacearmnn_utils.xhtml#ab53d94ea22b51c6bcdf9584644bd67bb">armnnUtils::GetTensorShape</a></div><div class="ttdeci">armnn::TensorShape GetTensorShape(unsigned int numberOfBatches, unsigned int numberOfChannels, unsigned int height, unsigned int width, const armnn::DataLayout dataLayout)</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_utils_8cpp_source.xhtml#l00019">TensorUtils.cpp:19</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>
+<a id="ae91e1849e95350c8e50912a217999eac"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae91e1849e95350c8e50912a217999eac">&#9670;&nbsp;</a></span>Combine() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -11052,13 +13941,13 @@ Variables</h2></td></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>
+ <td class="paramname"><em>source</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
- <td class="paramtype">Arg&#160;</td>
- <td class="paramname"><em>sourceB</em>&#160;</td>
+ <td class="paramtype">Args...&#160;</td>
+ <td class="paramname"><em>rest</em>&#160;</td>
</tr>
<tr>
<td></td>
@@ -11068,15 +13957,17 @@ Variables</h2></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>
+<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>
+<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><!-- fragment -->
+<p class="reference">References <a class="el" href="_memory_sources_8hpp_source.xhtml#l00030">Combine()</a>.</p>
+
</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>
+<a id="a5d94c2125c725df5b619d16db9d4a8e9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5d94c2125c725df5b619d16db9d4a8e9">&#9670;&nbsp;</a></span>Combine() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -11085,13 +13976,13 @@ Variables</h2></td></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>
+ <td class="paramname"><em>sourceA</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
- <td class="paramtype">Args...&#160;</td>
- <td class="paramname"><em>rest</em>&#160;</td>
+ <td class="paramtype">Arg&#160;</td>
+ <td class="paramname"><em>sourceB</em>&#160;</td>
</tr>
<tr>
<td></td>
@@ -11101,12 +13992,13 @@ Variables</h2></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>
+<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>
+<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) | <span class="keyword">static_cast&lt;</span><a class="code" href="namespacearmnn.xhtml#a5b05f3b7208ec7cea3338e30057c0bac">MemorySourceFlags</a><span class="keyword">&gt;</span>(sourceB);</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;}</div>
</div><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_memory_sources_8hpp_source.xhtml#l00036">Combine()</a>.</p>
+
</div>
</div>
<a id="a44a3b98b37a25c995aa9e4dae7d7b456"></a>
@@ -11146,13 +14038,23 @@ Variables</h2></td></tr>
<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#l00264">264</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.xhtml">ArmComputeUtils.hpp</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="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="l00267"></a><span class="lineno"> 267</span>&#160; </div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(rank != 0);</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>((-1 * rank) &lt;= armnnAxis);</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(armnnAxis &lt; rank);</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="keywordtype">int</span> sign = (armnnAxis &lt; 0) ? -1 : 1;</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keywordtype">int</span> aclAxis = sign * rank - 1 - armnnAxis;</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">return</span> aclAxis;</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160;}</div>
+</div><!-- fragment -->
<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="l00265"></a><span class="lineno"> 265</span>&#160;{</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</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="l00267"></a><span class="lineno"> 267</span>&#160;</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(rank != 0);</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>((-1 * rank) &lt;= armnnAxis);</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(armnnAxis &lt; rank);</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="keywordtype">int</span> sign = (armnnAxis &lt; 0) ? -1 : 1;</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keywordtype">int</span> aclAxis = sign * rank - 1 - armnnAxis;</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">return</span> aclAxis;</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</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>
@@ -11198,22 +14100,22 @@ Variables</h2></td></tr>
<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#l00293">293</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#l00615">Convolution3dDescriptor::m_DilationX</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00617">Convolution3dDescriptor::m_DilationY</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00619">Convolution3dDescriptor::m_DilationZ</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00607">Convolution3dDescriptor::m_PadBack</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00603">Convolution3dDescriptor::m_PadBottom</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00605">Convolution3dDescriptor::m_PadFront</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00597">Convolution3dDescriptor::m_PadLeft</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00599">Convolution3dDescriptor::m_PadRight</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00601">Convolution3dDescriptor::m_PadTop</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00609">Convolution3dDescriptor::m_StrideX</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00611">Convolution3dDescriptor::m_StrideY</a>, and <a class="el" href="_descriptors_8hpp_source.xhtml#l00613">Convolution3dDescriptor::m_StrideZ</a>.</p>
-<div class="fragment"><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; <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="l00298"></a><span class="lineno"> 298</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="l00299"></a><span class="lineno"> 299</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="l00300"></a><span class="lineno"> 300</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="l00301"></a><span class="lineno"> 301</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="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">const</span> arm_compute::ActivationLayerInfo activationInfo =</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <a class="code" href="namespacearmnn.xhtml#af6d517245110f6b1ca702da0cbbf4518">ConvertActivationDescriptorToAclActivationLayerInfo</a>(activationDescriptor);</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> roundType = arm_compute::DimensionRoundingType::FLOOR;</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">return</span> arm_compute::Conv3dInfo{stride, padding, activationInfo, dilation, roundType, isFastMathEnabled};</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</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#l00607">Descriptors.hpp:607</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#l00609">Descriptors.hpp:609</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#l00603">Descriptors.hpp:603</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#l00615">Descriptors.hpp:615</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#l00611">Descriptors.hpp:611</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#l00605">Descriptors.hpp:605</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#l00597">Descriptors.hpp:597</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#l00599">Descriptors.hpp:599</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#l00601">Descriptors.hpp:601</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#l00619">Descriptors.hpp:619</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#l00613">Descriptors.hpp:613</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#l00617">Descriptors.hpp:617</a></div></div>
+<div class="fragment"><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; <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="l00298"></a><span class="lineno"> 298</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="l00299"></a><span class="lineno"> 299</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="l00300"></a><span class="lineno"> 300</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="l00301"></a><span class="lineno"> 301</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="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">const</span> arm_compute::ActivationLayerInfo activationInfo =</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <a class="code" href="namespacearmnn.xhtml#af6d517245110f6b1ca702da0cbbf4518">ConvertActivationDescriptorToAclActivationLayerInfo</a>(activationDescriptor);</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> roundType = arm_compute::DimensionRoundingType::FLOOR;</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">return</span> arm_compute::Conv3dInfo{stride, padding, activationInfo, dilation, roundType, isFastMathEnabled};</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;}</div>
</div><!-- fragment -->
+<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#l00615">Convolution3dDescriptor::m_DilationX</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00617">Convolution3dDescriptor::m_DilationY</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00619">Convolution3dDescriptor::m_DilationZ</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00607">Convolution3dDescriptor::m_PadBack</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00603">Convolution3dDescriptor::m_PadBottom</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00605">Convolution3dDescriptor::m_PadFront</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00597">Convolution3dDescriptor::m_PadLeft</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00599">Convolution3dDescriptor::m_PadRight</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00601">Convolution3dDescriptor::m_PadTop</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00609">Convolution3dDescriptor::m_StrideX</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00611">Convolution3dDescriptor::m_StrideY</a>, and <a class="el" href="_descriptors_8hpp_source.xhtml#l00613">Convolution3dDescriptor::m_StrideZ</a>.</p>
+
</div>
</div>
<a id="a3f2c9ea2505a2cac1d05e17e989aff2b"></a>
@@ -11251,12 +14153,23 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00310">310</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="_workload_data_8hpp_source.xhtml#l00066">QueueDescriptorWithParameters&lt; LayerDescriptor &gt;::m_Parameters</a>, and <a class="el" href="_descriptors_8hpp_source.xhtml#l00609">Convolution3dDescriptor::m_StrideX</a>.</p>
-<div class="fragment"><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="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="l00314"></a><span class="lineno"> 314</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="l00315"></a><span class="lineno"> 315</span>&#160; <span class="keyword">const</span> arm_compute::Padding3D padding{descriptor.m_PadLeft, descriptor.m_PadRight,</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; descriptor.m_PadTop, descriptor.m_PadBottom,</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; descriptor.m_PadFront, descriptor.m_PadBack};</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</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="l00319"></a><span class="lineno"> 319</span>&#160;</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationInfo =</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <a class="code" href="namespacearmnn.xhtml#abfb0841058a8190d30851f07eca3991f">ConvertAdditionalInfoToAclActivationLayerInfo</a>(queueDescriptor);</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> roundType = arm_compute::DimensionRoundingType::FLOOR;</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; <span class="keywordflow">return</span> arm_compute::Conv3dInfo{stride, padding, activationInfo, dilation, roundType, isFastMathEnabled};</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</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#l00609">Descriptors.hpp:609</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="_workload_data_8hpp_source.xhtml#l00066">WorkloadData.hpp:66</a></div></div>
+<div class="fragment"><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="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="l00314"></a><span class="lineno"> 314</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="l00315"></a><span class="lineno"> 315</span>&#160; <span class="keyword">const</span> arm_compute::Padding3D padding{descriptor.m_PadLeft, descriptor.m_PadRight,</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; descriptor.m_PadTop, descriptor.m_PadBottom,</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; descriptor.m_PadFront, descriptor.m_PadBack};</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</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="l00319"></a><span class="lineno"> 319</span>&#160; </div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationInfo =</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <a class="code" href="namespacearmnn.xhtml#abfb0841058a8190d30851f07eca3991f">ConvertAdditionalInfoToAclActivationLayerInfo</a>(queueDescriptor);</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> roundType = arm_compute::DimensionRoundingType::FLOOR;</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; <span class="keywordflow">return</span> arm_compute::Conv3dInfo{stride, padding, activationInfo, dilation, roundType, isFastMathEnabled};</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160;}</div>
</div><!-- fragment -->
+<p class="reference">References <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00103">ConvertAdditionalInfoToAclActivationLayerInfo()</a>, <a class="el" href="_workload_data_8hpp_source.xhtml#l00066">QueueDescriptorWithParameters&lt; LayerDescriptor &gt;::m_Parameters</a>, and <a class="el" href="_descriptors_8hpp_source.xhtml#l00609">Convolution3dDescriptor::m_StrideX</a>.</p>
+
</div>
</div>
<a id="aa1e65a4dea8c65b76423e121b880d059"></a>
@@ -11294,14 +14207,22 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p>Function to convert axis to its positive equivalent value. </p>
-<p>[-rank, rank) &ndash;&gt; [0, rank) </p>
+<p>[-rank, rank) --&gt; [0, rank) </p>
<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00280">280</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="l00281"></a><span class="lineno"> 281</span>&#160;{</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</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="l00283"></a><span class="lineno"> 283</span>&#160;</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(rank != 0);</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>((-1 * rank) &lt;= axis);</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(axis &lt; rank);</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="keywordtype">int</span> positiveAxis = (axis &lt; 0) ? rank + axis : axis;</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</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="l00290"></a><span class="lineno"> 290</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 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="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="l00283"></a><span class="lineno"> 283</span>&#160; </div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(rank != 0);</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>((-1 * rank) &lt;= axis);</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(axis &lt; rank);</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="keywordtype">int</span> positiveAxis = (axis &lt; 0) ? rank + axis : axis;</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</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="l00290"></a><span class="lineno"> 290</span>&#160;}</div>
</div><!-- fragment -->
+<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>
</div>
<a id="a9d43aa01b882d8776ab9403eea3cf779"></a>
@@ -11347,13 +14268,59 @@ Variables</h2></td></tr>
<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#l00352">352</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>
+<div class="fragment"><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="keyword">auto</span> reducedTensorInfo = input;</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</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="l00358"></a><span class="lineno"> 358</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputRank = 0;</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="comment">// Calculate output dimension</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="keywordflow">if</span> (keepDims)</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; outputRank = rank;</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">else</span> <span class="keywordflow">if</span> (vAxis.empty())</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; outputRank = 1;</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> (vAxis.size() &gt; reducedTensorInfo.GetNumDimensions())</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="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="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></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; outputRank = reducedTensorInfo.GetNumDimensions() - armnn::numeric_cast&lt;unsigned int&gt;(vAxis.size());</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <span class="keywordflow">if</span> (outputRank == 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; outputRank = 1;</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; }</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; std::vector&lt;unsigned int&gt; dimSizes(outputRank, 1);</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="keywordflow">if</span> (!vAxis.empty())</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; <span class="comment">// Skip the dimension that has been reduced unless keepDims is true.</span></div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputIndex = 0;</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</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="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> (std::find(vAxis.begin(), vAxis.end(), i) == vAxis.end())</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; dimSizes[outputIndex] = armnn::numeric_cast&lt;unsigned int&gt;(reducedTensorInfo.GetShape()[i]);</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; ++outputIndex;</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="keywordflow">else</span> <span class="keywordflow">if</span> (keepDims)</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; dimSizes[outputIndex] = 1;</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; ++outputIndex;</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; }</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; }</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <span class="keyword">const</span> TensorShape inferredShape = TensorShape(outputRank, dimSizes.data());</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; reducedTensorInfo.SetShape(inferredShape);</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="keywordflow">return</span> reducedTensorInfo;</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160;}</div>
+</div><!-- fragment -->
+<p class="reference">References <a class="el" href="_tensor_8hpp_source.xhtml#l00195">TensorInfo::GetNumDimensions()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00250">ChainReduceLayers()</a>.</p>
-<div class="fragment"><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="keyword">auto</span> reducedTensorInfo = input;</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</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="l00358"></a><span class="lineno"> 358</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputRank = 0;</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="comment">// Calculate output dimension</span></div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="keywordflow">if</span> (keepDims)</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; outputRank = rank;</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">else</span> <span class="keywordflow">if</span> (vAxis.empty())</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; outputRank = 1;</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> (vAxis.size() &gt; reducedTensorInfo.GetNumDimensions())</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="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="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></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; 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="l00375"></a><span class="lineno"> 375</span>&#160; <span class="keywordflow">if</span> (outputRank == 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; outputRank = 1;</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; }</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; std::vector&lt;unsigned int&gt; dimSizes(outputRank, 1);</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="keywordflow">if</span> (!vAxis.empty())</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; <span class="comment">// Skip the dimension that has been reduced unless keepDims is true.</span></div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputIndex = 0;</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</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="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> (std::find(vAxis.begin(), vAxis.end(), i) == vAxis.end())</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; 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="l00390"></a><span class="lineno"> 390</span>&#160; ++outputIndex;</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="keywordflow">else</span> <span class="keywordflow">if</span> (keepDims)</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; dimSizes[outputIndex] = 1;</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; ++outputIndex;</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; }</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; }</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <span class="keyword">const</span> TensorShape inferredShape = TensorShape(outputRank, dimSizes.data());</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; reducedTensorInfo.SetShape(inferredShape);</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="keywordflow">return</span> reducedTensorInfo;</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</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>
@@ -11391,11 +14358,26 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00225">225</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#l00172">SoftmaxDescriptor::m_Axis</a>.</p>
-<div class="fragment"><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160;{</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="comment">// Detect the Android default value of -1 and return the ACL default value of 0.</span></div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keywordflow">if</span> (softmaxDesc.m_Axis == -1)</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">return</span> 0;</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; <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="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="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(dim != 0);</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">// Currently ArmNN support axis 1.</span></div><div class="line"><a name="l00238"></a><span class="lineno"> 238</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="l00239"></a><span class="lineno"> 239</span>&#160; aclAxis = aclAxis &gt; 0 ? aclAxis -1 : aclAxis;</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; <span class="keywordflow">return</span> aclAxis;</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</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 class="fragment"><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160;{</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="comment">// Detect the Android default value of -1 and return the ACL default value of 0.</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keywordflow">if</span> (softmaxDesc.m_Axis == -1)</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">return</span> 0;</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; <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="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="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(dim != 0);</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">// Currently ArmNN support axis 1.</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</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="l00239"></a><span class="lineno"> 239</span>&#160; aclAxis = aclAxis &gt; 0 ? aclAxis -1 : aclAxis;</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; <span class="keywordflow">return</span> aclAxis;</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;}</div>
</div><!-- fragment -->
+<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#l00172">SoftmaxDescriptor::m_Axis</a>.</p>
+
</div>
</div>
<a id="a8cbabc875597b3bed0ccdc0adb289fde"></a>
@@ -11433,18 +14415,32 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00244">244</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.xhtml">ArmComputeUtils.hpp</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="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="l00247"></a><span class="lineno"> 247</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="l00248"></a><span class="lineno"> 248</span>&#160; std::set&lt;unsigned int&gt; splitAxis;</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; <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="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="keywordtype">unsigned</span> <span class="keywordtype">int</span> dimIdx = 0; dimIdx &lt; numDimensions; ++dimIdx)</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">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="l00255"></a><span class="lineno"> 255</span>&#160; {</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; splitAxis.insert(dimIdx);</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; }</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">return</span> splitAxis;</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160;}</div>
+</div><!-- fragment -->
<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="_neon_layer_support_8cpp_source.xhtml#l01450">NeonLayerSupport::IsSplitterSupported()</a>, <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01387">ClLayerSupport::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="l00245"></a><span class="lineno"> 245</span>&#160;{</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</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="l00247"></a><span class="lineno"> 247</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="l00248"></a><span class="lineno"> 248</span>&#160; std::set&lt;unsigned int&gt; splitAxis;</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; <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="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="keywordtype">unsigned</span> <span class="keywordtype">int</span> dimIdx = 0; dimIdx &lt; numDimensions; ++dimIdx)</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">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="l00255"></a><span class="lineno"> 255</span>&#160; {</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; splitAxis.insert(dimIdx);</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; }</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">return</span> splitAxis;</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</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 -->
+<p class="reference">Referenced by <a class="el" href="_cl_splitter_workload_8cpp_source.xhtml#l00055">ClSplitterWorkload::ClSplitterWorkload()</a>, <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01387">ClLayerSupport::IsSplitterSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01450">NeonLayerSupport::IsSplitterSupported()</a>, and <a class="el" href="_neon_splitter_workload_8cpp_source.xhtml#l00056">NeonSplitterWorkload::NeonSplitterWorkload()</a>.</p>
+
</div>
</div>
-<a id="aa58cffc192978865f4fc8d3b39f62460"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aa58cffc192978865f4fc8d3b39f62460">&#9670;&nbsp;</a></span>Concatenate()</h2>
+<a id="a83b1d61a12c9e1911c2b6d79c35ef551"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a83b1d61a12c9e1911c2b6d79c35ef551">&#9670;&nbsp;</a></span>Concatenate()</h2>
<div class="memitem">
<div class="memproto">
@@ -11458,13 +14454,13 @@ Variables</h2></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="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="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>
@@ -11476,18 +14472,80 @@ Variables</h2></td></tr>
</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>
+<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;<a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a46f3ea056caa3126b91f3f70beea068c">Map</a>());</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;<a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a46f3ea056caa3126b91f3f70beea068c">Map</a>());</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><!-- fragment -->
+<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="_ref_workload_utils_8hpp_source.xhtml#l00027">GetTensorInfo()</a>, <a class="el" href="_workload_data_8hpp_source.xhtml#l00138">ConcatQueueDescriptor::ViewOrigin::m_Origin</a>, <a class="el" href="_workload_data_8hpp_source.xhtml#l00143">ConcatQueueDescriptor::m_ViewOrigins</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a46f3ea056caa3126b91f3f70beea068c">Map</a>, <a class="el" href="_types_8hpp_source.xhtml#l00031">MaxNumOfTensorDimensions</a>, and <a class="el" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</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#l00027">GetTensorInfo()</a>, <a class="el" href="_workload_data_8hpp_source.xhtml#l00138">ConcatQueueDescriptor::ViewOrigin::m_Origin</a>, <a class="el" href="_workload_data_8hpp_source.xhtml#l00143">ConcatQueueDescriptor::m_ViewOrigins</a>, and <a class="el" href="_types_8hpp_source.xhtml#l00031">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#l00031">Types.hpp:31</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>
+<a id="a6ed414c05eb6d4c89e0e4a475a0479c0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6ed414c05eb6d4c89e0e4a475a0479c0">&#9670;&nbsp;</a></span>ConditionalThrow() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -11496,28 +14554,24 @@ Variables</h2></td></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 class="paramname"><em>condition</em></td><td>)</td>
<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#l00165">165</a> of file <a class="el" href="_exceptions_8hpp_source.xhtml">Exceptions.hpp</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="keywordflow">if</span> (!condition)</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">throw</span> ExceptionType(message);</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;}</div></div><!-- fragment -->
+<p class="definition">Definition at line <a class="el" href="_exceptions_8hpp_source.xhtml#l00174">174</a> of file <a class="el" href="_exceptions_8hpp_source.xhtml">Exceptions.hpp</a>.</p>
+<div class="fragment"><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> (!condition)</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> ExceptionType();</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><!-- 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>
+<a id="ae4ab3bf0697ad13316a6bcba0a8fade5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae4ab3bf0697ad13316a6bcba0a8fade5">&#9670;&nbsp;</a></span>ConditionalThrow() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -11526,14 +14580,30 @@ Variables</h2></td></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 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#l00174">174</a> of file <a class="el" href="_exceptions_8hpp_source.xhtml">Exceptions.hpp</a>.</p>
-<div class="fragment"><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> (!condition)</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> ExceptionType();</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><!-- fragment -->
+<p class="definition">Definition at line <a class="el" href="_exceptions_8hpp_source.xhtml#l00165">165</a> of file <a class="el" href="_exceptions_8hpp_source.xhtml">Exceptions.hpp</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="keywordflow">if</span> (!condition)</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">throw</span> ExceptionType(message);</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;}</div>
+</div><!-- fragment -->
</div>
</div>
<a id="ae57b7f9e2cb7080bf10b28d1f72b558e"></a>
@@ -11571,7 +14641,15 @@ Variables</h2></td></tr>
<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#l00189">189</a> of file <a class="el" href="_exceptions_8hpp_source.xhtml">Exceptions.hpp</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; <span class="keywordflow">if</span> (!(leftHandSide == rightHandSide))</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; std::stringstream ss;</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</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="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keywordflow">throw</span> ExceptionType(ss.str());</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;}</div></div><!-- fragment -->
+<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; <span class="keywordflow">if</span> (!(leftHandSide == rightHandSide))</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; std::stringstream ss;</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</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="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keywordflow">throw</span> ExceptionType(ss.str());</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;}</div>
+</div><!-- fragment -->
</div>
</div>
<a id="ae9034dd6e9c5bed6badf4f7513339f74"></a>
@@ -11601,9 +14679,14 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<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>
@@ -11640,16 +14723,19 @@ Variables</h2></td></tr>
<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 class="section examples"><dt>Examples</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="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>
+<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><!-- fragment -->
+<p class="reference">References <a class="el" href="_logging_8cpp_source.xhtml#l00191">SetAllLoggingSinks()</a>, and <a class="el" href="_logging_8cpp_source.xhtml#l00073">SetLogFilter()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_armnn_device_8cpp_source.xhtml#l00042">ArmnnDevice::ArmnnDevice()</a>, <a class="el" href="_unit_tests_8hpp_source.xhtml#l00022">ConfigureLoggingTest()</a>, and <a class="el" href="_armnn_converter_8cpp_source.xhtml#l00327">main()</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>
@@ -11687,12 +14773,34 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_tuning_utils_8hpp_source.xhtml#l00044">44</a> of file <a class="el" href="_arm_compute_tuning_utils_8hpp_source.xhtml">ArmComputeTuningUtils.hpp</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; tuner.set_tune_new_kernels(<span class="keyword">true</span>); <span class="comment">// Turn on tuning initially.</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">switch</span> (level)</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">case</span> TuningLevel::Rapid:</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</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="l00052"></a><span class="lineno"> 52</span>&#160; tuner.set_tuner_mode(arm_compute::CLTunerMode::RAPID);</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordflow">case</span> TuningLevel::Normal:</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</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="l00056"></a><span class="lineno"> 56</span>&#160; tuner.set_tuner_mode(arm_compute::CLTunerMode::NORMAL);</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; <span class="keywordflow">case</span> TuningLevel::Exhaustive:</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</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="l00060"></a><span class="lineno"> 60</span>&#160; tuner.set_tuner_mode(arm_compute::CLTunerMode::EXHAUSTIVE);</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; <span class="keywordflow">case</span> TuningLevel::None:</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</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="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordflow">break</span>;</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><!-- fragment -->
<p class="reference">References <a class="el" href="_logging_8hpp_source.xhtml#l00212">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#l00062">ClBackendContext::ClBackendContext()</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; tuner.set_tune_new_kernels(<span class="keyword">true</span>); <span class="comment">// Turn on tuning initially.</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">switch</span> (level)</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">case</span> TuningLevel::Rapid:</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</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="l00052"></a><span class="lineno"> 52</span>&#160; tuner.set_tuner_mode(arm_compute::CLTunerMode::RAPID);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordflow">case</span> TuningLevel::Normal:</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</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="l00056"></a><span class="lineno"> 56</span>&#160; tuner.set_tuner_mode(arm_compute::CLTunerMode::NORMAL);</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; <span class="keywordflow">case</span> TuningLevel::Exhaustive:</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</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="l00060"></a><span class="lineno"> 60</span>&#160; tuner.set_tuner_mode(arm_compute::CLTunerMode::EXHAUSTIVE);</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; <span class="keywordflow">case</span> TuningLevel::None:</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</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="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordflow">break</span>;</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="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#l00212">Logging.hpp:212</a></div></div>
-</div><!-- fragment -->
+
</div>
</div>
<a id="ac4aa9e41515b354234645f115c49de32"></a>
@@ -11730,15 +14838,35 @@ Variables</h2></td></tr>
<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#l00170">170</a> of file <a class="el" href="_workload_utils_8cpp_source.xhtml">WorkloadUtils.cpp</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; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> aclDepthMultiplier = 1;</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; TensorInfo weightsPermuted;</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</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="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">// No permutation required. Input and weights data layouts are the same.</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; aclDepthMultiplier = weightInfo.GetShape()[3] / inputInfo.GetShape()[3];</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; weightsPermuted = weightInfo;</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; <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="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">// Weights permutation required. Weights [N,H,W,C] and input [N,C,H,W] data layouts are different.</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <span class="comment">// [ 1, H, W, I*M] --&gt; [ 1, I * M, H, W ]</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; aclDepthMultiplier = weightInfo.GetShape()[3] / inputInfo.GetShape()[1];</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; PermutationVector permutationVector{ 0, 2, 3, 1 };</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; weightsPermuted = <a class="code" href="namespacearmnn_utils.xhtml#abeaf4f6785039866fd075f4569ba8e84">armnnUtils::Permuted</a>(weightInfo, permutationVector);</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></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="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="l00194"></a><span class="lineno"> 194</span>&#160; <a class="code" href="namespacearmnn.xhtml#aeef70b7611ae71e97ab55c75ef72b210">GetDataLayoutName</a>(dataLayout)));</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; <span class="keywordflow">return</span> std::make_tuple(weightsPermuted, aclDepthMultiplier);</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;}</div>
+</div><!-- fragment -->
<p class="reference">References <a class="el" href="_types_utils_8hpp_source.xhtml#l00226">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="l00173"></a><span class="lineno"> 173</span>&#160;{</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> aclDepthMultiplier = 1;</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; TensorInfo weightsPermuted;</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</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="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">// No permutation required. Input and weights data layouts are the same.</span></div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; aclDepthMultiplier = weightInfo.GetShape()[3] / inputInfo.GetShape()[3];</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; weightsPermuted = weightInfo;</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; <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="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">// Weights permutation required. Weights [N,H,W,C] and input [N,C,H,W] data layouts are different.</span></div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <span class="comment">// [ 1, H, W, I*M] --&gt; [ 1, I * M, H, W ]</span></div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; aclDepthMultiplier = weightInfo.GetShape()[3] / inputInfo.GetShape()[1];</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; PermutationVector permutationVector{ 0, 2, 3, 1 };</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; weightsPermuted = <a class="code" href="namespacearmnn_utils.xhtml#abeaf4f6785039866fd075f4569ba8e84">armnnUtils::Permuted</a>(weightInfo, permutationVector);</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></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="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="l00194"></a><span class="lineno"> 194</span>&#160; <a class="code" href="namespacearmnn.xhtml#aeef70b7611ae71e97ab55c75ef72b210">GetDataLayoutName</a>(dataLayout)));</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; <span class="keywordflow">return</span> std::make_tuple(weightsPermuted, aclDepthMultiplier);</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</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#l00226">TypesUtils.hpp:226</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>
@@ -11792,15 +14920,35 @@ Variables</h2></td></tr>
<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#l00139">139</a> of file <a class="el" href="_workload_utils_8cpp_source.xhtml">WorkloadUtils.cpp</a>.</p>
-
+<div class="fragment"><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; TensorInfo weightsInfo = weightTensor-&gt;GetTensorInfo();</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> depthMultiplier = 1;</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; PermutationVector permutationVector{};</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</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="l00148"></a><span class="lineno"> 148</span>&#160; {</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="comment">// No permutation required. Data layouts are the same.</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; depthMultiplier = weightsInfo.GetShape()[3] / inputInfo.GetShape()[3];</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; }</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dataLayout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a>)</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="comment">// [ 1, H, W, I*M] --&gt; [ 1, I * M, H, W ]</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; depthMultiplier = weightsInfo.GetShape()[3] / inputInfo.GetShape()[1];</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; permutationVector = { 0, 2, 3, 1 };</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="keywordflow">throw</span> InvalidArgumentException(fmt::format(<span class="stringliteral">&quot;Unknown data layout for tensor conversion: {}&quot;</span>,</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <a class="code" href="namespacearmnn.xhtml#aeef70b7611ae71e97ab55c75ef72b210">GetDataLayoutName</a>(dataLayout)));</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; ConstTensor weightsPermuted = <a class="code" href="namespacearmnn.xhtml#aafe6180ef80d9f334f3a3ba9cc0db35d">PermuteTensor</a>(weightTensor, permutationVector, permuteBuffer);</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">return</span> std::make_tuple(weightsPermuted, depthMultiplier);</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;}</div>
+</div><!-- fragment -->
<p class="reference">References <a class="el" href="_types_utils_8hpp_source.xhtml#l00226">GetDataLayoutName()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</a>, <a class="el" href="_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#l00018">PermuteTensor()</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="l00143"></a><span class="lineno"> 143</span>&#160;{</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; TensorInfo weightsInfo = weightTensor-&gt;GetTensorInfo();</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> depthMultiplier = 1;</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; PermutationVector permutationVector{};</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</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="l00148"></a><span class="lineno"> 148</span>&#160; {</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="comment">// No permutation required. Data layouts are the same.</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; depthMultiplier = weightsInfo.GetShape()[3] / inputInfo.GetShape()[3];</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; }</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dataLayout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a>)</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="comment">// [ 1, H, W, I*M] --&gt; [ 1, I * M, H, W ]</span></div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; depthMultiplier = weightsInfo.GetShape()[3] / inputInfo.GetShape()[1];</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; permutationVector = { 0, 2, 3, 1 };</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="keywordflow">throw</span> InvalidArgumentException(fmt::format(<span class="stringliteral">&quot;Unknown data layout for tensor conversion: {}&quot;</span>,</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <a class="code" href="namespacearmnn.xhtml#aeef70b7611ae71e97ab55c75ef72b210">GetDataLayoutName</a>(dataLayout)));</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; ConstTensor weightsPermuted = <a class="code" href="namespacearmnn.xhtml#aafe6180ef80d9f334f3a3ba9cc0db35d">PermuteTensor</a>(weightTensor, permutationVector, permuteBuffer);</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">return</span> std::make_tuple(weightsPermuted, depthMultiplier);</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</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#l00018">WorkloadUtils.cpp:18</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#l00226">TypesUtils.hpp:226</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>
@@ -11851,17 +14999,36 @@ Variables</h2></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>
+<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#l00201">201</a> of file <a class="el" href="_workload_utils_8cpp_source.xhtml">WorkloadUtils.cpp</a>.</p>
-
+<div class="fragment"><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; TensorInfo weightsInfo = weightTensor-&gt;GetTensorInfo();</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="keywordflow">if</span> (weightsInfo.HasPerAxisQuantization())</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; <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="l00211"></a><span class="lineno"> 211</span>&#160; <span class="stringliteral">&quot;quantization is applied.&quot;</span>);</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="comment">// Reshape weights [ 1, H, W, I*M ] --&gt; [ H, W, I, M ]</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="keyword">auto</span> weightsShape = weightsInfo.GetShape();</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</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="l00217"></a><span class="lineno"> 217</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> depthMultiplier = weightsShape[3] / inputInfo.GetShape()[channelIndex];</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; weightsInfo.SetShape({ weightsShape[1],</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; weightsShape[2],</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; inputInfo.GetShape()[channelIndex],</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; depthMultiplier});</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="comment">// Permute [ H, W, I, M ] --&gt; [ M, I, H, W ]</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; PermutationVector permutationVector = { 2, 3, 1, 0 };</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; ConstTensor weightsPermuted = <a class="code" href="namespacearmnn.xhtml#aafe6180ef80d9f334f3a3ba9cc0db35d">PermuteTensor</a>(weightTensor, permutationVector, permuteBuffer);</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; </div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keywordflow">return</span> std::make_tuple(weightsPermuted, depthMultiplier);</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;}</div>
+</div><!-- fragment -->
<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="_tensor_handle_8hpp_source.xhtml#l00040">ConstTensorHandle::GetTensorInfo()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00446">TensorInfo::HasPerAxisQuantization()</a>, <a class="el" href="_workload_utils_8cpp_source.xhtml#l00018">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="l00205"></a><span class="lineno"> 205</span>&#160;{</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; TensorInfo weightsInfo = weightTensor-&gt;GetTensorInfo();</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="keywordflow">if</span> (weightsInfo.HasPerAxisQuantization())</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; <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="l00211"></a><span class="lineno"> 211</span>&#160; <span class="stringliteral">&quot;quantization is applied.&quot;</span>);</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="comment">// Reshape weights [ 1, H, W, I*M ] --&gt; [ H, W, I, M ]</span></div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="keyword">auto</span> weightsShape = weightsInfo.GetShape();</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</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="l00217"></a><span class="lineno"> 217</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> depthMultiplier = weightsShape[3] / inputInfo.GetShape()[channelIndex];</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; weightsInfo.SetShape({ weightsShape[1],</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; weightsShape[2],</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; inputInfo.GetShape()[channelIndex],</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; depthMultiplier});</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="comment">// Permute [ H, W, I, M ] --&gt; [ M, I, H, W ]</span></div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; PermutationVector permutationVector = { 2, 3, 1, 0 };</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; ConstTensor weightsPermuted = <a class="code" href="namespacearmnn.xhtml#aafe6180ef80d9f334f3a3ba9cc0db35d">PermuteTensor</a>(weightTensor, permutationVector, permuteBuffer);</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160;</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keywordflow">return</span> std::make_tuple(weightsPermuted, depthMultiplier);</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</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#l00018">WorkloadUtils.cpp:18</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>
@@ -11889,12 +15056,15 @@ Variables</h2></td></tr>
</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>
-
+<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><!-- fragment -->
<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="_cl_sqrt_workload_8cpp_source.xhtml#l00032">ClSqrtWorkload::ClSqrtWorkload()</a>, <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00293">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#l00192">ConvertFullyConnectedDescriptorToAclFullyConnectedLayerInfo()</a>, <a class="el" href="_neon_activation_workload_8cpp_source.xhtml#l00032">NeonActivationWorkload::NeonActivationWorkload()</a>, and <a class="el" href="_neon_sqrt_workload_8cpp_source.xhtml#l00031">NeonSqrtWorkload::NeonSqrtWorkload()</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>
@@ -11922,10 +15092,17 @@ Variables</h2></td></tr>
</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 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>(<span class="keyword">static_cast&lt;</span>ActivationDescriptor<span class="keyword">&gt;</span>(</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><!-- fragment -->
+<p class="reference">References <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00085">ConvertActivationDescriptorToAclActivationLayerInfo()</a>.</p>
+
</div>
</div>
<a id="afdba36f125621d775d471f0daf613df2"></a>
@@ -11953,12 +15130,32 @@ Variables</h2></td></tr>
</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>
-
+<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><!-- fragment -->
<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#l00086">Types.hpp:86</a></div></div>
-</div><!-- fragment -->
+
</div>
</div>
<a id="abfb0841058a8190d30851f07eca3991f"></a>
@@ -11986,12 +15183,21 @@ Variables</h2></td></tr>
</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>
-
+<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>(<span class="keyword">static_cast&lt;</span>ActivationDescriptor<span class="keyword">&gt;</span>(</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><!-- fragment -->
<p class="reference">References <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00085">ConvertActivationDescriptorToAclActivationLayerInfo()</a>, and <a class="el" href="_workload_data_8hpp_source.xhtml#l00047">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_fully_connected_workload_8cpp_source.xhtml#l00056">ClFullyConnectedWorkload::ClFullyConnectedWorkload()</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#l00310">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="ac1438a97bbc2aee5cd8470d9d2a3aebc"></a>
@@ -12019,15 +15225,27 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00139">139</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.xhtml">ArmComputeUtils.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; <span class="keywordflow">switch</span> (descriptor.m_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> ComparisonOperation::Greater: <span class="keywordflow">return</span> arm_compute::ComparisonOperation::Greater;</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="keywordflow">case</span> ComparisonOperation::GreaterOrEqual: <span class="keywordflow">return</span> arm_compute::ComparisonOperation::GreaterEqual;</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keywordflow">case</span> ComparisonOperation::Less: <span class="keywordflow">return</span> arm_compute::ComparisonOperation::Less;</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordflow">case</span> ComparisonOperation::LessOrEqual: <span class="keywordflow">return</span> arm_compute::ComparisonOperation::LessEqual;</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keywordflow">case</span> ComparisonOperation::Equal: <span class="keywordflow">return</span> arm_compute::ComparisonOperation::Equal;</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordflow">case</span> ComparisonOperation::NotEqual: <span class="keywordflow">return</span> arm_compute::ComparisonOperation::NotEqual;</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</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="l00150"></a><span class="lineno"> 150</span>&#160; }</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;}</div>
+</div><!-- fragment -->
<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="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> (descriptor.m_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> ComparisonOperation::Greater: <span class="keywordflow">return</span> arm_compute::ComparisonOperation::Greater;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="keywordflow">case</span> ComparisonOperation::GreaterOrEqual: <span class="keywordflow">return</span> arm_compute::ComparisonOperation::GreaterEqual;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keywordflow">case</span> ComparisonOperation::Less: <span class="keywordflow">return</span> arm_compute::ComparisonOperation::Less;</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordflow">case</span> ComparisonOperation::LessOrEqual: <span class="keywordflow">return</span> arm_compute::ComparisonOperation::LessEqual;</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keywordflow">case</span> ComparisonOperation::Equal: <span class="keywordflow">return</span> arm_compute::ComparisonOperation::Equal;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordflow">case</span> ComparisonOperation::NotEqual: <span class="keywordflow">return</span> arm_compute::ComparisonOperation::NotEqual;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</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="l00150"></a><span class="lineno"> 150</span>&#160; }</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</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>
+<a id="a2f12c1f572fb15978e51cf646d42d4dc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2f12c1f572fb15978e51cf646d42d4dc">&#9670;&nbsp;</a></span>ConvertFullyConnectedDescriptorToAclFullyConnectedLayerInfo() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -12044,8 +15262,8 @@ Variables</h2></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>
+ <td class="paramtype">arm_compute::ActivationLayerInfo&#160;</td>
+ <td class="paramname"><em>activationLayerInfo</em>&#160;</td>
</tr>
<tr>
<td></td>
@@ -12060,17 +15278,20 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00192">192</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#l00496">FullyConnectedDescriptor::m_TransposeWeightMatrix</a>.</p>
-
-<p class="reference">Referenced by <a class="el" href="_cl_fully_connected_workload_8cpp_source.xhtml#l00056">ClFullyConnectedWorkload::ClFullyConnectedWorkload()</a>.</p>
-<div class="fragment"><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; arm_compute::FullyConnectedLayerInfo fc_info;</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; fc_info.transpose_weights = fullyConnectedDesc.m_TransposeWeightMatrix;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; fc_info.activation_info = <a class="code" href="namespacearmnn.xhtml#af6d517245110f6b1ca702da0cbbf4518">ConvertActivationDescriptorToAclActivationLayerInfo</a>(activationDesc);</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keywordflow">return</span> fc_info;</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</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>
+<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00202">202</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.xhtml">ArmComputeUtils.hpp</a>.</p>
+<div class="fragment"><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; arm_compute::FullyConnectedLayerInfo fc_info;</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; fc_info.transpose_weights = fullyConnectedDesc.m_TransposeWeightMatrix;</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; fc_info.activation_info = activationLayerInfo;</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="keywordflow">return</span> fc_info;</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160;}</div>
</div><!-- fragment -->
+<p class="reference">References <a class="el" href="_descriptors_8hpp_source.xhtml#l00496">FullyConnectedDescriptor::m_TransposeWeightMatrix</a>.</p>
+
</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>
+<a id="ae2e0c1d8160fadce44d479379790718e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae2e0c1d8160fadce44d479379790718e">&#9670;&nbsp;</a></span>ConvertFullyConnectedDescriptorToAclFullyConnectedLayerInfo() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -12087,8 +15308,8 @@ Variables</h2></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>
+ <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>
@@ -12103,10 +15324,18 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00202">202</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.xhtml">ArmComputeUtils.hpp</a>.</p>
+<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00192">192</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.xhtml">ArmComputeUtils.hpp</a>.</p>
+<div class="fragment"><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; arm_compute::FullyConnectedLayerInfo fc_info;</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; fc_info.transpose_weights = fullyConnectedDesc.m_TransposeWeightMatrix;</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; fc_info.activation_info = <a class="code" href="namespacearmnn.xhtml#af6d517245110f6b1ca702da0cbbf4518">ConvertActivationDescriptorToAclActivationLayerInfo</a>(activationDesc);</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keywordflow">return</span> fc_info;</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;}</div>
+</div><!-- fragment -->
+<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#l00496">FullyConnectedDescriptor::m_TransposeWeightMatrix</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_cl_fully_connected_workload_8cpp_source.xhtml#l00056">ClFullyConnectedWorkload::ClFullyConnectedWorkload()</a>.</p>
-<p class="reference">References <a class="el" href="_descriptors_8hpp_source.xhtml#l00496">FullyConnectedDescriptor::m_TransposeWeightMatrix</a>.</p>
-<div class="fragment"><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; arm_compute::FullyConnectedLayerInfo fc_info;</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; fc_info.transpose_weights = fullyConnectedDesc.m_TransposeWeightMatrix;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; fc_info.activation_info = activationLayerInfo;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="keywordflow">return</span> fc_info;</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160;}</div></div><!-- fragment -->
</div>
</div>
<a id="a9cdee30c21f3dd630b4e460527105b74"></a>
@@ -12114,6 +15343,9 @@ Variables</h2></td></tr>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3d">LogSeverity</a> armnn::ConvertLogSeverity </td>
@@ -12123,10 +15355,17 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
+ </tr>
+</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_logging_8hpp_source.xhtml#l00206">206</a> of file <a class="el" href="_logging_8hpp_source.xhtml">Logging.hpp</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="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="l00209"></a><span class="lineno"> 209</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#l00012">Utils.hpp:12</a></div></div>
+<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="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="l00209"></a><span class="lineno"> 209</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
@@ -12155,7 +15394,27 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00116">116</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.xhtml">ArmComputeUtils.hpp</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; <span class="comment">// For preparing the object for the class ActivationLayerInfo, we need to consider 5 situations.</span></div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordflow">switch</span> (activationFunction)</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> 0:</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordflow">return</span> arm_compute::ActivationLayerInfo(); <span class="comment">// no activation, do nothing</span></div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keywordflow">case</span> 1:</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keywordflow">return</span> arm_compute::ActivationLayerInfo(arm_compute::ActivationLayerInfo::ActivationFunction::RELU);</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordflow">case</span> 3:</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keywordflow">return</span> arm_compute::ActivationLayerInfo(</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; arm_compute::ActivationLayerInfo::ActivationFunction::BOUNDED_RELU, 6.0);</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keywordflow">case</span> 4:</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keywordflow">return</span> arm_compute::ActivationLayerInfo(</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; arm_compute::ActivationLayerInfo::ActivationFunction::TANH, 1.0, 1.0);</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordflow">case</span> 6:</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordflow">return</span> arm_compute::ActivationLayerInfo(</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; arm_compute::ActivationLayerInfo::ActivationFunction::LOGISTIC);</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; <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="l00136"></a><span class="lineno"> 136</span>&#160; }</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</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 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; <span class="comment">// For preparing the object for the class ActivationLayerInfo, we need to consider 5 situations.</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordflow">switch</span> (activationFunction)</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> 0:</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordflow">return</span> arm_compute::ActivationLayerInfo(); <span class="comment">// no activation, do nothing</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keywordflow">case</span> 1:</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keywordflow">return</span> arm_compute::ActivationLayerInfo(arm_compute::ActivationLayerInfo::ActivationFunction::RELU);</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordflow">case</span> 3:</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keywordflow">return</span> arm_compute::ActivationLayerInfo(</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; arm_compute::ActivationLayerInfo::ActivationFunction::BOUNDED_RELU, 6.0);</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keywordflow">case</span> 4:</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keywordflow">return</span> arm_compute::ActivationLayerInfo(</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; arm_compute::ActivationLayerInfo::ActivationFunction::TANH, 1.0, 1.0);</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordflow">case</span> 6:</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordflow">return</span> arm_compute::ActivationLayerInfo(</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; arm_compute::ActivationLayerInfo::ActivationFunction::LOGISTIC);</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; <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="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>
@@ -12186,9 +15445,21 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_workload_utils_8cpp_source.xhtml#l00286">286</a> of file <a class="el" href="_workload_utils_8cpp_source.xhtml">WorkloadUtils.cpp</a>.</p>
+<div class="fragment"><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; int32_t reversedMask = 0;</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</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="l00290"></a><span class="lineno"> 290</span>&#160; {</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="comment">// Check if bit set in mask for each dimension</span></div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; int32_t bit = (mask &amp; 1 &lt;&lt; i) != 0;</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="comment">// Increment the new mask with the bits reversed</span></div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; reversedMask += (bit &lt;&lt; std::max(numDim-(armnn::numeric_cast&lt;int&gt;(i)+1), 0));</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; <span class="keywordflow">return</span> reversedMask;</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160;}</div>
+</div><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_cl_strided_slice_workload_8cpp_source.xhtml#l00055">ClStridedSliceWorkload::ClStridedSliceWorkload()</a>, and <a class="el" href="_neon_strided_slice_workload_8cpp_source.xhtml#l00049">NeonStridedSliceWorkload::NeonStridedSliceWorkload()</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="l00287"></a><span class="lineno"> 287</span>&#160;{</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; int32_t reversedMask = 0;</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</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="l00290"></a><span class="lineno"> 290</span>&#160; {</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="comment">// Check if bit set in mask for each dimension</span></div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; int32_t bit = (mask &amp; 1 &lt;&lt; i) != 0;</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="comment">// Increment the new mask with the bits reversed</span></div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; reversedMask += (bit &lt;&lt; std::max(numDim-(armnn::numeric_cast&lt;int&gt;(i)+1), 0));</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; <span class="keywordflow">return</span> reversedMask;</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160;}</div></div><!-- fragment -->
</div>
</div>
<a id="aa5baabb8e3a4aa6cbdcab419d743e747"></a>
@@ -12216,9 +15487,18 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00180">180</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.xhtml">ArmComputeUtils.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="keyword">using</span> arm_compute::NormType;</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keywordflow">switch</span> (channelType)</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">case</span> NormalizationAlgorithmChannel::Across: <span class="keywordflow">return</span> NormType::CROSS_MAP;</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <span class="keywordflow">case</span> NormalizationAlgorithmChannel::Within: <span class="keywordflow">return</span> NormType::IN_MAP_2D;</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</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="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 -->
<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="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">using</span> arm_compute::NormType;</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keywordflow">switch</span> (channelType)</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">case</span> NormalizationAlgorithmChannel::Across: <span class="keywordflow">return</span> NormType::CROSS_MAP;</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <span class="keywordflow">case</span> NormalizationAlgorithmChannel::Within: <span class="keywordflow">return</span> NormType::IN_MAP_2D;</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</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="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="a8f3bfacadfd6d2146d6ccd299dabc7aa"></a>
@@ -12246,9 +15526,19 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00166">166</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.xhtml">ArmComputeUtils.hpp</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; <span class="keyword">using</span> arm_compute::DimensionRoundingType;</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">switch</span> (rounding)</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">case</span> OutputShapeRounding::Ceiling: <span class="keywordflow">return</span> DimensionRoundingType::CEIL;</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keywordflow">case</span> OutputShapeRounding::Floor: <span class="keywordflow">return</span> DimensionRoundingType::FLOOR;</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</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="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 -->
<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="l00168"></a><span class="lineno"> 168</span>&#160;{</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keyword">using</span> arm_compute::DimensionRoundingType;</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">switch</span> (rounding)</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">case</span> OutputShapeRounding::Ceiling: <span class="keywordflow">return</span> DimensionRoundingType::CEIL;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keywordflow">case</span> OutputShapeRounding::Floor: <span class="keywordflow">return</span> DimensionRoundingType::FLOOR;</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</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="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="adf5a024ace0dbe2af2d5b1a1b9623771"></a>
@@ -12276,9 +15566,18 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00327">327</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.xhtml">ArmComputeUtils.hpp</a>.</p>
-
+<div class="fragment"><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; <span class="keywordflow">switch</span> (paddingMode)</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; <span class="keywordflow">case</span> PaddingMode::Constant: <span class="keywordflow">return</span> arm_compute::PaddingMode::CONSTANT;</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="keywordflow">case</span> PaddingMode::Reflect: <span class="keywordflow">return</span> arm_compute::PaddingMode::REFLECT;</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="keywordflow">case</span> PaddingMode::Symmetric: <span class="keywordflow">return</span> arm_compute::PaddingMode::SYMMETRIC;</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</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="l00335"></a><span class="lineno"> 335</span>&#160; }</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160;}</div>
+</div><!-- fragment -->
<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="l00328"></a><span class="lineno"> 328</span>&#160;{</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="keywordflow">switch</span> (paddingMode)</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; <span class="keywordflow">case</span> PaddingMode::Constant: <span class="keywordflow">return</span> arm_compute::PaddingMode::CONSTANT;</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="keywordflow">case</span> PaddingMode::Reflect: <span class="keywordflow">return</span> arm_compute::PaddingMode::REFLECT;</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="keywordflow">case</span> PaddingMode::Symmetric: <span class="keywordflow">return</span> arm_compute::PaddingMode::SYMMETRIC;</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</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="l00335"></a><span class="lineno"> 335</span>&#160; }</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160;}</div></div><!-- fragment -->
+
</div>
</div>
<a id="ad256fcf8c7f4d5a240fa47f0b56d50af"></a>
@@ -12306,9 +15605,20 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00153">153</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.xhtml">ArmComputeUtils.hpp</a>.</p>
-
+<div class="fragment"><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">using</span> arm_compute::PoolingType;</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> (poolingAlgorithm)</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> PoolingAlgorithm::Max: <span class="keywordflow">return</span> PoolingType::MAX;</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keywordflow">case</span> PoolingAlgorithm::Average: <span class="keywordflow">return</span> PoolingType::AVG;</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="keywordflow">case</span> PoolingAlgorithm::L2: <span class="keywordflow">return</span> PoolingType::L2;</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</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="l00163"></a><span class="lineno"> 163</span>&#160; }</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;}</div>
+</div><!-- fragment -->
<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="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">using</span> arm_compute::PoolingType;</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> (poolingAlgorithm)</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> PoolingAlgorithm::Max: <span class="keywordflow">return</span> PoolingType::MAX;</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keywordflow">case</span> PoolingAlgorithm::Average: <span class="keywordflow">return</span> PoolingType::AVG;</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="keywordflow">case</span> PoolingAlgorithm::L2: <span class="keywordflow">return</span> PoolingType::L2;</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</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="l00163"></a><span class="lineno"> 163</span>&#160; }</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;}</div></div><!-- fragment -->
+
</div>
</div>
<a id="a03ab984d93d0f240f31274499b72e6b0"></a>
@@ -12336,9 +15646,20 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00338">338</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.xhtml">ArmComputeUtils.hpp</a>.</p>
+<div class="fragment"><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">switch</span> (descriptor.m_ReduceOperation)</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="keywordflow">case</span> ReduceOperation::Sum: <span class="keywordflow">return</span> arm_compute::ReductionOperation::SUM;</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</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="l00344"></a><span class="lineno"> 344</span>&#160; <span class="keywordflow">case</span> ReduceOperation::Max: <span class="keywordflow">return</span> arm_compute::ReductionOperation::MAX;</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <span class="keywordflow">case</span> ReduceOperation::Min: <span class="keywordflow">return</span> arm_compute::ReductionOperation::MIN;</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <span class="keywordflow">case</span> ReduceOperation::Prod: <span class="keywordflow">return</span> arm_compute::ReductionOperation::PROD;</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</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="l00348"></a><span class="lineno"> 348</span>&#160; }</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160;}</div>
+</div><!-- fragment -->
+<p class="reference">References <a class="el" href="_descriptors_8hpp_source.xhtml#l01505">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#abc05539fc6e7907f32ef0fb242e3b3b0a78d811e98514cd165dda532286610fd2">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">References <a class="el" href="_descriptors_8hpp_source.xhtml#l01505">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="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">switch</span> (descriptor.m_ReduceOperation)</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="keywordflow">case</span> ReduceOperation::Sum: <span class="keywordflow">return</span> arm_compute::ReductionOperation::SUM;</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</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="l00344"></a><span class="lineno"> 344</span>&#160; <span class="keywordflow">case</span> ReduceOperation::Max: <span class="keywordflow">return</span> arm_compute::ReductionOperation::MAX;</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <span class="keywordflow">case</span> ReduceOperation::Min: <span class="keywordflow">return</span> arm_compute::ReductionOperation::MIN;</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <span class="keywordflow">case</span> ReduceOperation::Prod: <span class="keywordflow">return</span> arm_compute::ReductionOperation::PROD;</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</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="l00348"></a><span class="lineno"> 348</span>&#160; }</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160;}</div></div><!-- fragment -->
</div>
</div>
<a id="ae9bdcb8ac91731109dc423d6ed476204"></a>
@@ -12366,9 +15687,20 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_utils_8hpp_source.xhtml#l00211">211</a> of file <a class="el" href="_arm_compute_utils_8hpp_source.xhtml">ArmComputeUtils.hpp</a>.</p>
-
+<div class="fragment"><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">switch</span> (resizeMethod)</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">case</span> ResizeMethod::Bilinear:</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="keywordflow">return</span> arm_compute::InterpolationPolicy::BILINEAR;</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="keywordflow">case</span> ResizeMethod::NearestNeighbor:</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="keywordflow">return</span> arm_compute::InterpolationPolicy::NEAREST_NEIGHBOR;</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Unsupported resize method&quot;</span>);</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; }</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;}</div>
+</div><!-- fragment -->
<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="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">switch</span> (resizeMethod)</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">case</span> ResizeMethod::Bilinear:</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="keywordflow">return</span> arm_compute::InterpolationPolicy::BILINEAR;</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="keywordflow">case</span> ResizeMethod::NearestNeighbor:</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="keywordflow">return</span> arm_compute::InterpolationPolicy::NEAREST_NEIGHBOR;</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Unsupported resize method&quot;</span>);</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; }</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;}</div></div><!-- fragment -->
+
</div>
</div>
<a id="a8ca9f249dc67c111b8234b2c78d672cd"></a>
@@ -12404,14 +15736,61 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_workload_utils_8cpp_source.xhtml#l00230">230</a> of file <a class="el" href="_workload_utils_8cpp_source.xhtml">WorkloadUtils.cpp</a>.</p>
-
+<div class="fragment"><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; <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="l00235"></a><span class="lineno"> 235</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="l00236"></a><span class="lineno"> 236</span>&#160; </div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keyword">auto</span> multiplier = weightTensor-&gt;GetTensorInfo().GetShape()[0];</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keyword">auto</span> inputChannels = weightTensor-&gt;GetTensorInfo().GetShape()[1];</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">// 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="l00241"></a><span class="lineno"> 241</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="l00242"></a><span class="lineno"> 242</span>&#160; </div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="comment">// 1. Permute the weights if necessary</span></div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</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="l00245"></a><span class="lineno"> 245</span>&#160; <span class="comment">// starting from the current shape of [ M, I, H, W ]</span></div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="comment">// If no permutation is necessary, leave the permutation vector empty</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; PermutationVector permutationVector{};</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="keywordflow">if</span> (dataLayout == DataLayout::NHWC)</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; <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="l00251"></a><span class="lineno"> 251</span>&#160; permutationVector = { 3, 2, 0, 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; ConstTensor weightPermuted = <a class="code" href="namespacearmnn.xhtml#aafe6180ef80d9f334f3a3ba9cc0db35d">PermuteTensor</a>(weightTensor, permutationVector, permuteBuffer);</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">// Shuffle the weights data to obtain the channel order needed used by Acl</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</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="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">switch</span> (weightPermuted.GetDataType())</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">case</span> DataType::Float32:</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; weightPermuted = ReorderWeightChannelsForAcl&lt;float&gt;(weightPermuted, dataLayout, permuteBuffer);</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keywordflow">case</span> DataType::Float16:</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; weightPermuted =</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; ReorderWeightChannelsForAcl&lt;half_float::half&gt;(weightPermuted, dataLayout, permuteBuffer);</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmS8:</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmU8:</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; weightPermuted = ReorderWeightChannelsForAcl&lt;uint8_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">case</span> DataType::QSymmS8:</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; weightPermuted = ReorderWeightChannelsForAcl&lt;int8_t&gt;(weightPermuted, dataLayout, permuteBuffer);</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keywordflow">break</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; }</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">// 2. Reshape the weights</span></div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <a class="code" href="namespacearmnn.xhtml#a3170fdd696155a247ecd81d445c0e2e1">ReshapeWeightsForAcl</a>(weightPermuted.GetInfo(), dataLayout);</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">// 3. Return both the tensor and the allocated storage to ensure that the data stays alive</span></div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="keywordflow">return</span> weightPermuted;</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160;}</div>
+</div><!-- fragment -->
<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="_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#l00018">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#l00041">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="l00233"></a><span class="lineno"> 233</span>&#160;{</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</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="l00235"></a><span class="lineno"> 235</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="l00236"></a><span class="lineno"> 236</span>&#160;</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keyword">auto</span> multiplier = weightTensor-&gt;GetTensorInfo().GetShape()[0];</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keyword">auto</span> inputChannels = weightTensor-&gt;GetTensorInfo().GetShape()[1];</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">// 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="l00241"></a><span class="lineno"> 241</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="l00242"></a><span class="lineno"> 242</span>&#160;</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="comment">// 1. Permute the weights if necessary</span></div><div class="line"><a name="l00244"></a><span class="lineno"> 244</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="l00245"></a><span class="lineno"> 245</span>&#160; <span class="comment">// starting from the current shape of [ M, I, H, W ]</span></div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="comment">// If no permutation is necessary, leave the permutation vector empty</span></div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; PermutationVector permutationVector{};</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="keywordflow">if</span> (dataLayout == DataLayout::NHWC)</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; <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="l00251"></a><span class="lineno"> 251</span>&#160; permutationVector = { 3, 2, 0, 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; ConstTensor weightPermuted = <a class="code" href="namespacearmnn.xhtml#aafe6180ef80d9f334f3a3ba9cc0db35d">PermuteTensor</a>(weightTensor, permutationVector, permuteBuffer);</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">// Shuffle the weights data to obtain the channel order needed used by Acl</span></div><div class="line"><a name="l00256"></a><span class="lineno"> 256</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="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">switch</span> (weightPermuted.GetDataType())</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">case</span> DataType::Float32:</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; weightPermuted = ReorderWeightChannelsForAcl&lt;float&gt;(weightPermuted, dataLayout, permuteBuffer);</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keywordflow">case</span> DataType::Float16:</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; weightPermuted =</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; ReorderWeightChannelsForAcl&lt;half_float::half&gt;(weightPermuted, dataLayout, permuteBuffer);</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmS8:</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmU8:</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; weightPermuted = ReorderWeightChannelsForAcl&lt;uint8_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">case</span> DataType::QSymmS8:</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; weightPermuted = ReorderWeightChannelsForAcl&lt;int8_t&gt;(weightPermuted, dataLayout, permuteBuffer);</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keywordflow">break</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; }</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">// 2. Reshape the weights</span></div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <a class="code" href="namespacearmnn.xhtml#a3170fdd696155a247ecd81d445c0e2e1">ReshapeWeightsForAcl</a>(weightPermuted.GetInfo(), dataLayout);</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">// 3. Return both the tensor and the allocated storage to ensure that the data stays alive</span></div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="keywordflow">return</span> weightPermuted;</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</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#l00018">WorkloadUtils.cpp:18</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#l00041">WorkloadUtils.cpp:41</a></div></div>
-</div><!-- fragment -->
</div>
</div>
<a id="a1e8288eac7e909fdb58b6113d816763a"></a>
@@ -12441,13 +15820,30 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_workload_utils_8cpp_source.xhtml#l00115">115</a> of file <a class="el" href="_workload_utils_8cpp_source.xhtml">WorkloadUtils.cpp</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="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="l00118"></a><span class="lineno"> 118</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="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">// 1. Permute the weights if necessary</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</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="l00122"></a><span class="lineno"> 122</span>&#160; <span class="comment">// starting from the current shape of [ M, I, H, W ]</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; TensorInfo weightPermutedInfo(weightInfo);</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keywordflow">if</span> (dataLayout == DataLayout::NHWC)</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">// 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="l00127"></a><span class="lineno"> 127</span>&#160; PermutationVector permutationVector{ 3, 2, 0, 1 };</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; weightPermutedInfo = <a class="code" href="namespacearmnn_utils.xhtml#abeaf4f6785039866fd075f4569ba8e84">armnnUtils::Permuted</a>(weightInfo, permutationVector);</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="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="comment">// 2. Reshape the weights</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <a class="code" href="namespacearmnn.xhtml#a3170fdd696155a247ecd81d445c0e2e1">ReshapeWeightsForAcl</a>(weightPermutedInfo, dataLayout);</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="comment">// 3. Return the permuted weight info</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">return</span> weightPermutedInfo;</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;}</div>
+</div><!-- fragment -->
<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#l00041">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="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">// 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="l00118"></a><span class="lineno"> 118</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="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">// 1. Permute the weights if necessary</span></div><div class="line"><a name="l00121"></a><span class="lineno"> 121</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="l00122"></a><span class="lineno"> 122</span>&#160; <span class="comment">// starting from the current shape of [ M, I, H, W ]</span></div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; TensorInfo weightPermutedInfo(weightInfo);</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keywordflow">if</span> (dataLayout == DataLayout::NHWC)</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">// 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="l00127"></a><span class="lineno"> 127</span>&#160; PermutationVector permutationVector{ 3, 2, 0, 1 };</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; weightPermutedInfo = <a class="code" href="namespacearmnn_utils.xhtml#abeaf4f6785039866fd075f4569ba8e84">armnnUtils::Permuted</a>(weightInfo, permutationVector);</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="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="comment">// 2. Reshape the weights</span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <a class="code" href="namespacearmnn.xhtml#a3170fdd696155a247ecd81d445c0e2e1">ReshapeWeightsForAcl</a>(weightPermutedInfo, dataLayout);</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="comment">// 3. Return the permuted weight info</span></div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">return</span> weightPermutedInfo;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</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#l00041">WorkloadUtils.cpp:41</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>
@@ -12561,14 +15957,159 @@ Variables</h2></td></tr>
</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>
-
+<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><!-- fragment -->
<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#l00044">RefDepthwiseConvolution2dWorkload::ExecuteAsync()</a>, and <a class="el" href="_ref_convolution2d_workload_8cpp_source.xhtml#l00038">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>
@@ -12694,14 +16235,157 @@ Variables</h2></td></tr>
</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>
-
+<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><!-- fragment -->
<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#l00040">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>
@@ -12731,12 +16415,24 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_workload_utils_8hpp_source.xhtml#l00056">56</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="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; <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="l00060"></a><span class="lineno"> 60</span>&#160; dstTensor.map(<span class="keyword">true</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; {</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</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="l00065"></a><span class="lineno"> 65</span>&#160; armcomputetensorutils::CopyArmComputeITensorData&lt;T&gt;(srcData, dstTensor);</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; dstTensor.unmap();</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;}</div>
+</div><!-- fragment -->
<p class="reference">References <a class="el" href="_cl_workload_utils_8hpp_source.xhtml#l00021">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="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; <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="l00060"></a><span class="lineno"> 60</span>&#160; dstTensor.map(<span class="keyword">true</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; {</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</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="l00065"></a><span class="lineno"> 65</span>&#160; armcomputetensorutils::CopyArmComputeITensorData&lt;T&gt;(srcData, dstTensor);</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; dstTensor.unmap();</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</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#l00021">ClWorkloadUtils.hpp:21</a></div></div>
-</div><!-- fragment -->
+
</div>
</div>
<a id="a1351e01f9fb983937caf79e353142b41"></a>
@@ -12766,9 +16462,13 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<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>
@@ -12804,15 +16504,151 @@ Variables</h2></td></tr>
</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>
-
+<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><!-- fragment -->
<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#l00031">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#l01376">CopyToOutputTensor()</a>, <a class="el" href="_neon_convert_fp32_to_fp16_workload_8cpp_source.xhtml#l00026">NeonConvertFp32ToFp16Workload::Execute()</a>, <a class="el" href="_neon_convert_fp16_to_fp32_workload_8cpp_source.xhtml#l00025">NeonConvertFp16ToFp32Workload::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#l01222">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#l00031">Types.hpp:31</a></div></div>
-</div><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_loaded_network_8cpp_source.xhtml#l01376">CopyToOutputTensor()</a>, <a class="el" href="_neon_convert_fp32_to_fp16_workload_8cpp_source.xhtml#l00026">NeonConvertFp32ToFp16Workload::Execute()</a>, <a class="el" href="_neon_convert_fp16_to_fp32_workload_8cpp_source.xhtml#l00025">NeonConvertFp16ToFp32Workload::Execute()</a>, <a class="el" href="_mem_copy_workload_8cpp_source.xhtml#l00051">CopyMemGenericWorkload::Execute()</a>, and <a class="el" href="_mem_copy_workload_8cpp_source.xhtml#l00066">CopyMemGenericWorkload::ExecuteAsync()</a>.</p>
+
</div>
</div>
<a id="a5acae80f1d8fd03cdb3878bd356683d7"></a>
@@ -12842,13 +16678,24 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_loaded_network_8cpp_source.xhtml#l01376">1376</a> of file <a class="el" href="_loaded_network_8cpp_source.xhtml">LoadedNetwork.cpp</a>.</p>
-
+<div class="fragment"><div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>&#160;{</div>
+<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160; <a class="code" href="_profiling_8hpp.xhtml#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(Compute::Undefined, <span class="stringliteral">&quot;CopyOutput&quot;</span>);</div>
+<div class="line"><a name="l01379"></a><span class="lineno"> 1379</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="l01380"></a><span class="lineno"> 1380</span>&#160; {</div>
+<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160; memcpy(dst, src, size);</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; </div>
+<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>&#160; std::unique_ptr&lt;ITensorHandle&gt; tensorHandle =</div>
+<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>&#160; std::make_unique&lt;PassthroughTensorHandle&gt;(outputTensor.GetInfo(),</div>
+<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>&#160; outputTensor.GetMemoryArea());</div>
+<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>&#160; </div>
+<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160; <a class="code" href="namespacearmnn.xhtml#a92c91193007aa49f4732d6dba5397f8d">CopyTensorContentsGeneric</a>(outputTensorHandle, tensorHandle.get(), copyFunc);</div>
+<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>&#160;}</div>
+</div><!-- fragment -->
<p class="reference">References <a class="el" href="_profiling_8hpp_source.xhtml#l00220">ARMNN_SCOPED_PROFILING_EVENT</a>, <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>, <a class="el" href="_tensor_8hpp_source.xhtml#l00305">BaseTensor&lt; MemoryType &gt;::GetMemoryArea()</a>, and <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a>.</p>
<p class="reference">Referenced by <a class="el" href="_loaded_network_8cpp_source.xhtml#l01727">LoadedNetwork::Execute()</a>.</p>
-<div class="fragment"><div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>&#160;{</div><div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160; <a class="code" href="_profiling_8hpp.xhtml#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(Compute::Undefined, <span class="stringliteral">&quot;CopyOutput&quot;</span>);</div><div class="line"><a name="l01379"></a><span class="lineno"> 1379</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="l01380"></a><span class="lineno"> 1380</span>&#160; {</div><div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160; memcpy(dst, src, size);</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;</div><div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>&#160; std::unique_ptr&lt;ITensorHandle&gt; tensorHandle =</div><div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>&#160; std::make_unique&lt;PassthroughTensorHandle&gt;(outputTensor.GetInfo(),</div><div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>&#160; outputTensor.GetMemoryArea());</div><div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>&#160;</div><div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160; <a class="code" href="namespacearmnn.xhtml#a92c91193007aa49f4732d6dba5397f8d">CopyTensorContentsGeneric</a>(outputTensorHandle, tensorHandle.get(), copyFunc);</div><div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>&#160;}</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_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>
@@ -12886,11 +16733,38 @@ Variables</h2></td></tr>
</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 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><!-- fragment -->
+<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>
</div>
<a id="ac845f99ae84c2fcf016b676769da7c51"></a>
@@ -12928,11 +16802,16 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<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>
@@ -12970,10 +16849,15 @@ Variables</h2></td></tr>
</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 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><!-- fragment -->
+<p class="reference">References <a class="el" href="_cl_context_schema__generated_8h_source.xhtml#l00057">CreateClContext()</a>.</p>
+
</div>
</div>
<a id="a733ae6b70d0bfa43433c3e7606992328"></a>
@@ -13008,14 +16892,78 @@ Variables</h2></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>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#l00268">268</a> of file <a class="el" href="_descriptors_8hpp_source.xhtml">Descriptors.hpp</a>.</p>
-
+<div class="fragment"><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">auto</span> numInputs = std::distance(first, last);</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="keywordflow">if</span> (numInputs &lt; 2)</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="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Concatenation requires at least 2 inputs&quot;</span>);</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; }</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; </div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span>&amp; firstInputShape = *first;</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="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numDimensions = firstInputShape.GetNumDimensions();</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = first + 1; it != last; ++it)</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; <span class="keywordflow">if</span> (it-&gt;GetNumDimensions() != numDimensions)</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; {</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <span class="keywordflow">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="l00287"></a><span class="lineno"> 287</span>&#160; }</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="keywordflow">if</span> (concatenationDimension &gt;= numDimensions)</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">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="l00293"></a><span class="lineno"> 293</span>&#160; }</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; </div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = first; it != last; ++it)</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; <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="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">bool</span> dimSizeOk = (d == concatenationDimension) || (firstInputShape[d] == (*it)[d]);</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keywordflow">if</span> (!dimSizeOk)</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; <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="l00303"></a><span class="lineno"> 303</span>&#160; <span class="stringliteral">&quot; except the concatenation dimension&quot;</span>);</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; }</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; }</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="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; OriginsDescriptor viewsDescriptor(<span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(numInputs), numDimensions);</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; viewsDescriptor.SetConcatAxis(concatenationDimension);</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; uint32_t viewIndex = 0u;</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; uint32_t coordAlongConcatDim = 0u;</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = first; it != last; ++it)</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; <span class="keyword">const</span> <span class="keyword">auto</span>&amp; inputShape = *it;</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">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; concatenationDimension; ++i)</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; viewsDescriptor.SetViewOriginCoord(viewIndex, i, 0);</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; </div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; viewsDescriptor.SetViewOriginCoord(viewIndex, concatenationDimension, coordAlongConcatDim);</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dimSize = inputShape[concatenationDimension];</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; coordAlongConcatDim += dimSize;</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; <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="l00328"></a><span class="lineno"> 328</span>&#160; {</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; viewsDescriptor.SetViewOriginCoord(viewIndex, i, 0);</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; ++viewIndex;</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="keywordflow">return</span> viewsDescriptor;</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160;}</div>
+</div><!-- fragment -->
<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="_converter_8cpp_source.xhtml#l00021">Converter::ConvertOperation()</a>.</p>
-<div class="fragment"><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">auto</span> numInputs = std::distance(first, last);</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="keywordflow">if</span> (numInputs &lt; 2)</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="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Concatenation requires at least 2 inputs&quot;</span>);</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; }</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160;</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span>&amp; firstInputShape = *first;</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="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numDimensions = firstInputShape.GetNumDimensions();</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = first + 1; it != last; ++it)</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; <span class="keywordflow">if</span> (it-&gt;GetNumDimensions() != numDimensions)</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; {</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <span class="keywordflow">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="l00287"></a><span class="lineno"> 287</span>&#160; }</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="keywordflow">if</span> (concatenationDimension &gt;= numDimensions)</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">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="l00293"></a><span class="lineno"> 293</span>&#160; }</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160;</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = first; it != last; ++it)</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; <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="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">bool</span> dimSizeOk = (d == concatenationDimension) || (firstInputShape[d] == (*it)[d]);</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keywordflow">if</span> (!dimSizeOk)</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; <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="l00303"></a><span class="lineno"> 303</span>&#160; <span class="stringliteral">&quot; except the concatenation dimension&quot;</span>);</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; }</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; }</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="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; OriginsDescriptor viewsDescriptor(static_cast&lt;uint32_t&gt;(numInputs), numDimensions);</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; viewsDescriptor.SetConcatAxis(concatenationDimension);</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; uint32_t viewIndex = 0u;</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; uint32_t coordAlongConcatDim = 0u;</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = first; it != last; ++it)</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; <span class="keyword">const</span> <span class="keyword">auto</span>&amp; inputShape = *it;</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">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; concatenationDimension; ++i)</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; viewsDescriptor.SetViewOriginCoord(viewIndex, i, 0);</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;</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; viewsDescriptor.SetViewOriginCoord(viewIndex, concatenationDimension, coordAlongConcatDim);</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dimSize = inputShape[concatenationDimension];</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; coordAlongConcatDim += dimSize;</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; <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="l00328"></a><span class="lineno"> 328</span>&#160; {</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; viewsDescriptor.SetViewOriginCoord(viewIndex, i, 0);</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; ++viewIndex;</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="keywordflow">return</span> viewsDescriptor;</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160;}</div></div><!-- fragment -->
</div>
</div>
<a id="a0f37510801ba4f2500e4e9558c81f93c"></a>
@@ -13059,11 +17007,17 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<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>
@@ -13107,10 +17061,17 @@ Variables</h2></td></tr>
</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 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><!-- fragment -->
+<p class="reference">References <a class="el" href="_cl_context_schema__generated_8h_source.xhtml#l00118">CreateProgram()</a>.</p>
+
</div>
</div>
<a id="a1ec6b4c20ed294a96cf94c33c24caaf5"></a>
@@ -13140,14 +17101,27 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.xhtml#l01021">1021</a> of file <a class="el" href="_network_8cpp_source.xhtml">Network.cpp</a>.</p>
-
+<div class="fragment"><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160;{</div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160; <a class="code" href="namespacearmnn.xhtml#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a> backends;</div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</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="l01026"></a><span class="lineno"> 1026</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; selectedBackend : backendSettings.m_SupportedBackends)</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; <span class="keyword">auto</span> backendFactory = backendRegistry.GetFactory(selectedBackend);</div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160; <span class="keyword">auto</span> backendObjPtr = backendFactory();</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(backendObjPtr);</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; backendObjPtr-&gt;RegisterTensorHandleFactories(handleFactoryRegistry);</div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160; </div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160; backends[backendObjPtr-&gt;GetId()] = std::move(backendObjPtr);</div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160; }</div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160; </div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160; <span class="keywordflow">return</span> backends;</div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160;}</div>
+</div><!-- fragment -->
<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#l00015">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#l01572">Optimize()</a>.</p>
-<div class="fragment"><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160;{</div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160; <a class="code" href="namespacearmnn.xhtml#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a> backends;</div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</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="l01026"></a><span class="lineno"> 1026</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; selectedBackend : backendSettings.m_SupportedBackends)</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; <span class="keyword">auto</span> backendFactory = backendRegistry.GetFactory(selectedBackend);</div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160; <span class="keyword">auto</span> backendObjPtr = backendFactory();</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(backendObjPtr);</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; backendObjPtr-&gt;RegisterTensorHandleFactories(handleFactoryRegistry);</div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160;</div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160; backends[backendObjPtr-&gt;GetId()] = std::move(backendObjPtr);</div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160; }</div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160;</div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160; <span class="keywordflow">return</span> backends;</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</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#l00015">BackendRegistry.cpp: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_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#l00262">Network.hpp:262</a></div></div>
-</div><!-- fragment -->
+
</div>
</div>
<a id="a181ecb133401da6ff2916c192ca04d48"></a>
@@ -13201,15 +17175,24 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_debug_8cpp_source.xhtml#l00097">97</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#acea0491173b09308ca626ea65e70e1d8">Debug&lt; BFloat16 &gt;()</a>, <a class="el" href="namespacearmnn.xhtml#af34b15ddc0dcee095162820e88d84808">Debug&lt; float &gt;()</a>, <a class="el" href="namespacearmnn.xhtml#a4dbfaabd2d65dc91bc8bd4d0b5e1ed07">Debug&lt; Half &gt;()</a>, <a class="el" href="namespacearmnn.xhtml#a62669f61a81677f5ca4b1f21bb7d45d8">Debug&lt; int16_t &gt;()</a>, <a class="el" href="namespacearmnn.xhtml#a77e5a9b94927bee9c48010efd2dec2b0">Debug&lt; int32_t &gt;()</a>, <a class="el" href="namespacearmnn.xhtml#a31a77914be2a7b9d8c6d22036df869d8">Debug&lt; int8_t &gt;()</a>, and <a class="el" href="namespacearmnn.xhtml#af5cd3e7fcb637ffad7644cdd2e19a8ae">Debug&lt; uint8_t &gt;()</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="l00103"></a><span class="lineno"> 103</span>&#160;{</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordflow">if</span> (outputsToFile)</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; fs::path tmpDir = fs::temp_directory_path();</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; std::ofstream out(tmpDir.generic_string() + <span class="stringliteral">&quot;/ArmNNIntermediateLayerOutputs/&quot;</span> + layerName + <span class="stringliteral">&quot;.numpy&quot;</span>);</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; PrintOutput&lt;T&gt;(inputInfo, inputData, guid, layerName, slotIndex, out);</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; out.close();</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">else</span></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; PrintOutput&lt;T&gt;(inputInfo, inputData, guid, layerName, slotIndex, std::cout);</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><!-- fragment -->
+<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; <span class="keywordflow">if</span> (outputsToFile)</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; fs::path tmpDir = fs::temp_directory_path();</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; std::ofstream out(tmpDir.generic_string() + <span class="stringliteral">&quot;/ArmNNIntermediateLayerOutputs/&quot;</span> + layerName + <span class="stringliteral">&quot;.numpy&quot;</span>);</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; PrintOutput&lt;T&gt;(inputInfo, inputData, guid, layerName, slotIndex, out);</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; out.close();</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">else</span></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; PrintOutput&lt;T&gt;(inputInfo, inputData, guid, layerName, slotIndex, std::cout);</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><!-- fragment -->
</div>
</div>
<a id="acea0491173b09308ca626ea65e70e1d8"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#acea0491173b09308ca626ea65e70e1d8">&#9670;&nbsp;</a></span>Debug< BFloat16 >()</h2>
+<h2 class="memtitle"><span class="permalink"><a href="#acea0491173b09308ca626ea65e70e1d8">&#9670;&nbsp;</a></span>Debug&lt; BFloat16 &gt;()</h2>
<div class="memitem">
<div class="memproto">
@@ -13258,12 +17241,10 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="reference">Referenced by <a class="el" href="_debug_8cpp_source.xhtml#l00097">Debug()</a>.</p>
-
</div>
</div>
<a id="af34b15ddc0dcee095162820e88d84808"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#af34b15ddc0dcee095162820e88d84808">&#9670;&nbsp;</a></span>Debug< float >()</h2>
+<h2 class="memtitle"><span class="permalink"><a href="#af34b15ddc0dcee095162820e88d84808">&#9670;&nbsp;</a></span>Debug&lt; float &gt;()</h2>
<div class="memitem">
<div class="memproto">
@@ -13312,12 +17293,10 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="reference">Referenced by <a class="el" href="_debug_8cpp_source.xhtml#l00097">Debug()</a>.</p>
-
</div>
</div>
<a id="a4dbfaabd2d65dc91bc8bd4d0b5e1ed07"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a4dbfaabd2d65dc91bc8bd4d0b5e1ed07">&#9670;&nbsp;</a></span>Debug< Half >()</h2>
+<h2 class="memtitle"><span class="permalink"><a href="#a4dbfaabd2d65dc91bc8bd4d0b5e1ed07">&#9670;&nbsp;</a></span>Debug&lt; Half &gt;()</h2>
<div class="memitem">
<div class="memproto">
@@ -13366,12 +17345,10 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="reference">Referenced by <a class="el" href="_debug_8cpp_source.xhtml#l00097">Debug()</a>.</p>
-
</div>
</div>
<a id="a62669f61a81677f5ca4b1f21bb7d45d8"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a62669f61a81677f5ca4b1f21bb7d45d8">&#9670;&nbsp;</a></span>Debug< int16_t >()</h2>
+<h2 class="memtitle"><span class="permalink"><a href="#a62669f61a81677f5ca4b1f21bb7d45d8">&#9670;&nbsp;</a></span>Debug&lt; int16_t &gt;()</h2>
<div class="memitem">
<div class="memproto">
@@ -13420,12 +17397,10 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="reference">Referenced by <a class="el" href="_debug_8cpp_source.xhtml#l00097">Debug()</a>.</p>
-
</div>
</div>
<a id="a77e5a9b94927bee9c48010efd2dec2b0"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a77e5a9b94927bee9c48010efd2dec2b0">&#9670;&nbsp;</a></span>Debug< int32_t >()</h2>
+<h2 class="memtitle"><span class="permalink"><a href="#a77e5a9b94927bee9c48010efd2dec2b0">&#9670;&nbsp;</a></span>Debug&lt; int32_t &gt;()</h2>
<div class="memitem">
<div class="memproto">
@@ -13474,12 +17449,10 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="reference">Referenced by <a class="el" href="_debug_8cpp_source.xhtml#l00097">Debug()</a>.</p>
-
</div>
</div>
<a id="a31a77914be2a7b9d8c6d22036df869d8"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a31a77914be2a7b9d8c6d22036df869d8">&#9670;&nbsp;</a></span>Debug< int8_t >()</h2>
+<h2 class="memtitle"><span class="permalink"><a href="#a31a77914be2a7b9d8c6d22036df869d8">&#9670;&nbsp;</a></span>Debug&lt; int8_t &gt;()</h2>
<div class="memitem">
<div class="memproto">
@@ -13528,12 +17501,10 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="reference">Referenced by <a class="el" href="_debug_8cpp_source.xhtml#l00097">Debug()</a>.</p>
-
</div>
</div>
<a id="af5cd3e7fcb637ffad7644cdd2e19a8ae"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#af5cd3e7fcb637ffad7644cdd2e19a8ae">&#9670;&nbsp;</a></span>Debug< uint8_t >()</h2>
+<h2 class="memtitle"><span class="permalink"><a href="#af5cd3e7fcb637ffad7644cdd2e19a8ae">&#9670;&nbsp;</a></span>Debug&lt; uint8_t &gt;()</h2>
<div class="memitem">
<div class="memproto">
@@ -13582,8 +17553,6 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="reference">Referenced by <a class="el" href="_debug_8cpp_source.xhtml#l00097">Debug()</a>.</p>
-
</div>
</div>
<a id="a54b5cdfd05fbf12371e66cb52ec81507"></a>
@@ -13603,7 +17572,10 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_tosa_ref_backend_8cpp_source.xhtml#l00027">27</a> of file <a class="el" href="_tosa_ref_backend_8cpp_source.xhtml">TosaRefBackend.cpp</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">delete</span> <span class="keyword">static_cast&lt;</span><span class="keyword">const </span>T*<span class="keyword">&gt;</span>(blob);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;}</div></div><!-- fragment -->
+<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">delete</span> <span class="keyword">static_cast&lt;</span><span class="keyword">const </span>T*<span class="keyword">&gt;</span>(blob);</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;}</div>
+</div><!-- fragment -->
</div>
</div>
<a id="ab023d9a7687e35c0f108458a094c1f56"></a>
@@ -13651,51 +17623,94 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_depth_to_space_8cpp_source.xhtml#l00018">18</a> of file <a class="el" href="_depth_to_space_8cpp_source.xhtml">DepthToSpace.cpp</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; <span class="keyword">static_cast&lt;</span><span class="keyword">const </span><span class="keywordtype">void</span>*<span class="keyword">&gt;</span>(<span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>uint8_t*<span class="keyword">&gt;</span>(inputData) + batchDataOffset),</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keyword">static_cast&lt;</span><span class="keywordtype">void</span>*<span class="keyword">&gt;</span>(<span class="keyword">reinterpret_cast&lt;</span>uint8_t*<span class="keyword">&gt;</span>(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><!-- fragment -->
<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>, <a class="el" href="_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#l01039">SpaceToDepthDescriptor::m_BlockSize</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01042">SpaceToDepthDescriptor::m_DataLayout</a>, and <a class="el" href="_permute_8cpp_source.xhtml#l00131">armnnUtils::Permute()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_depth_to_space_8cpp_source.xhtml#l00018">DepthToSpace()</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#l00295">Types.hpp:295</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#l01039">Descriptors.hpp:1039</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#l01042">Descriptors.hpp:1042</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>
+<a id="a1204727d8ce3ee1e60daf08079eb892e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1204727d8ce3ee1e60daf08079eb892e">&#9670;&nbsp;</a></span>Dequantize() <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">void Dequantize </td>
+ <td class="memname">void armnn::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>
+ <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">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
- <td class="paramname"><em>inputInfo</em>, </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>outputInfo</em>&#160;</td>
+ <td class="paramname"><em>info</em>&#160;</td>
</tr>
<tr>
<td></td>
@@ -13703,16 +17718,23 @@ Variables</h2></td></tr>
<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="_dequantize_8cpp_source.xhtml#l00013">13</a> of file <a class="el" href="_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>
+<p class="definition">Definition at line <a class="el" href="_ref_workload_utils_8hpp_source.xhtml#l00107">107</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="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> i = 0; i &lt; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetNumElements(); i++)</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; 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="l00112"></a><span class="lineno"> 112</span>&#160; }</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;}</div>
</div><!-- fragment -->
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.</p>
+
</div>
</div>
<a id="a4144d7535639c617fca0d095379493f0"></a>
@@ -13744,39 +17766,48 @@ Variables</h2></td></tr>
<p>u8 helpers </p>
<p class="definition">Definition at line <a class="el" href="_ref_workload_utils_8hpp_source.xhtml#l00096">96</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#l00478">TensorInfo::GetQuantizationOffset()</a>, and <a class="el" href="_tensor_8cpp_source.xhtml#l00461">TensorInfo::GetQuantizationScale()</a>.</p>
-<div class="fragment"><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; std::vector&lt;float&gt; ret(<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetNumElements());</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</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="l00100"></a><span class="lineno"> 100</span>&#160; {</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</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="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> ret;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</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 class="fragment"><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; std::vector&lt;float&gt; ret(<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetNumElements());</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</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="l00100"></a><span class="lineno"> 100</span>&#160; {</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</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="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> ret;</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;}</div>
</div><!-- fragment -->
+<p class="reference">References <a class="el" href="_types_utils_8cpp_source.xhtml#l00046">Dequantize()</a>, and <a class="el" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.</p>
+
</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>
+<a id="acae7e910f899ae67340c9ce29e406a86"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acae7e910f899ae67340c9ce29e406a86">&#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 class="memname">void Dequantize </td>
<td>(</td>
- <td class="paramtype">const T *&#160;</td>
- <td class="paramname"><em>inputData</em>, </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">float *&#160;</td>
- <td class="paramname"><em>outputData</em>, </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>info</em>&#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>
@@ -13784,18 +17815,26 @@ Variables</h2></td></tr>
<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#l00107">107</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#l00478">TensorInfo::GetQuantizationOffset()</a>, and <a class="el" href="_tensor_8cpp_source.xhtml#l00461">TensorInfo::GetQuantizationScale()</a>.</p>
-<div class="fragment"><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> i = 0; i &lt; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetNumElements(); i++)</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; 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="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="ttc" id="namespacearmnn_xhtml_a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c"><div class="ttname"><a href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">armnn::BoostLogSeverityMapping::info</a></div></div>
+<p class="definition">Definition at line <a class="el" href="_dequantize_8cpp_source.xhtml#l00013">13</a> of file <a class="el" href="_dequantize_8cpp_source.xhtml">Dequantize.cpp</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><!-- fragment -->
+<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>
</div>
<a id="a855293b1be0581fb61ef6a1c5b027d0f"></a>
@@ -13842,12 +17881,17 @@ Variables</h2></td></tr>
<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>
-
+<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><!-- fragment -->
<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>, and <a class="el" href="_ref_workload_utils_8hpp_source.xhtml#l00096">Dequantize()</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 -->
+<p class="reference">Referenced by <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#l00800">QSymm8PerAxisDecoder::DecodeTensor()</a>, <a class="el" href="_base_iterator_8hpp_source.xhtml#l00866">ScaledInt32PerAxisDecoder::DecodeTensor()</a>, <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#l00096">Dequantize()</a>, <a class="el" href="_base_iterator_8hpp_source.xhtml#l00124">QASymm8Decoder::Get()</a>, <a class="el" href="_base_iterator_8hpp_source.xhtml#l00161">QASymmS8Decoder::Get()</a>, <a class="el" href="_base_iterator_8hpp_source.xhtml#l00198">QSymmS8Decoder::Get()</a>, <a class="el" href="_base_iterator_8hpp_source.xhtml#l00235">QSymm16Decoder::Get()</a>, <a class="el" href="_base_iterator_8hpp_source.xhtml#l00507">QASymm8Encoder::Get()</a>, <a class="el" href="_base_iterator_8hpp_source.xhtml#l00531">QASymmS8Encoder::Get()</a>, <a class="el" href="_base_iterator_8hpp_source.xhtml#l00555">QSymmS8Encoder::Get()</a>, <a class="el" href="_base_iterator_8hpp_source.xhtml#l00579">QSymm16Encoder::Get()</a>, <a class="el" href="_base_iterator_8hpp_source.xhtml#l00789">QSymm8PerAxisDecoder::Get()</a>, <a class="el" href="_base_iterator_8hpp_source.xhtml#l00832">QSymm8PerAxisEncoder::Get()</a>, and <a class="el" href="_base_iterator_8hpp_source.xhtml#l00855">ScaledInt32PerAxisDecoder::Get()</a>.</p>
+
</div>
</div>
<a id="ae76ce23fa9fc18e56448d52b37dd3f32"></a>
@@ -13955,21 +17999,179 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_detection_post_process_8cpp_source.xhtml#l00140">140</a> of file <a class="el" href="_detection_post_process_8cpp_source.xhtml">DetectionPostProcess.cpp</a>.</p>
-
-<p class="reference">References <a class="el" href="_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="_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#l00717">DetectionPostProcessDescriptor::m_DetectionsPerClass</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00715">DetectionPostProcessDescriptor::m_MaxClassesPerDetection</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00713">DetectionPostProcessDescriptor::m_MaxDetections</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00721">DetectionPostProcessDescriptor::m_NmsIouThreshold</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00719">DetectionPostProcessDescriptor::m_NmsScoreThreshold</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00723">DetectionPostProcessDescriptor::m_NumClasses</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00733">DetectionPostProcessDescriptor::m_ScaleH</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00731">DetectionPostProcessDescriptor::m_ScaleW</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00727">DetectionPostProcessDescriptor::m_ScaleX</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00729">DetectionPostProcessDescriptor::m_ScaleY</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00725">DetectionPostProcessDescriptor::m_UseRegularNms</a>, <a class="el" href="_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="_detection_post_process_8cpp_source.xhtml#l00024">TopKSort()</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="_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="_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="_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="_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="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 = armnn::numeric_cast&lt;unsigned int&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 = armnn::numeric_cast&lt;unsigned int&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><!-- fragment -->
+<p class="reference">References <a class="el" href="_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="_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#l00717">DetectionPostProcessDescriptor::m_DetectionsPerClass</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00715">DetectionPostProcessDescriptor::m_MaxClassesPerDetection</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00713">DetectionPostProcessDescriptor::m_MaxDetections</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00721">DetectionPostProcessDescriptor::m_NmsIouThreshold</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00719">DetectionPostProcessDescriptor::m_NmsScoreThreshold</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00723">DetectionPostProcessDescriptor::m_NumClasses</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00733">DetectionPostProcessDescriptor::m_ScaleH</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00731">DetectionPostProcessDescriptor::m_ScaleW</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00727">DetectionPostProcessDescriptor::m_ScaleX</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00729">DetectionPostProcessDescriptor::m_ScaleY</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00725">DetectionPostProcessDescriptor::m_UseRegularNms</a>, <a class="el" href="_detection_post_process_8cpp_source.xhtml#l00049">NonMaxSuppression()</a>, and <a class="el" href="_detection_post_process_8cpp_source.xhtml#l00024">TopKSort()</a>.</p>
+
+</div>
+</div>
+<a id="a7d4e24d8e296ccced976d626e08b742a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7d4e24d8e296ccced976d626e08b742a">&#9670;&nbsp;</a></span>ExtractJsonObjects()</h2>
<div class="memitem">
<div class="memproto">
@@ -13995,7 +18197,7 @@ Variables</h2></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="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>
@@ -14007,13 +18209,84 @@ Variables</h2></td></tr>
</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>
-
+<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; arm::pipe::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="keywordtype">unsigned</span> <span class="keywordtype">int</span> numSkippedKernels = 0;</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="keywordflow">if</span> (inferenceIndex &gt; 0)</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">for</span> (<span class="keyword">auto</span> &amp;i: parentEvent-&gt;GetInstruments())</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; <span class="keywordflow">if</span> (i-&gt;HasKernelMeasurements())</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; numSkippedKernels = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(parentObject.m_Children.size() -</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; instrumentMeasurements.size());</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; childIdx = numSkippedKernels;</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; }</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; }</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; }</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; </div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</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="l00334"></a><span class="lineno"> 334</span>&#160; {</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <span class="keywordflow">if</span> (inferenceIndex == 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="comment">// Only add kernel measurement once, in case of multiple inferences</span></div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; JsonChildObject measurementObject{ instrumentMeasurements[measurementIndex].m_Name };</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; measurementObject.SetUnit(instrumentMeasurements[measurementIndex].m_Unit);</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; measurementObject.SetType(JsonObjectType::Measurement);</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; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(parentObject.NumChildren() == childIdx);</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; parentObject.AddChild(measurementObject);</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; <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; {</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <span class="keywordflow">if</span> (numSkippedKernels &gt; 0)</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; {</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; parentObject.GetChild(--numSkippedKernels).AddMeasurement(0.0);</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; }</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; }</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; </div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; parentObject.GetChild(childIdx).AddMeasurement(instrumentMeasurements[measurementIndex].m_Value);</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="keyword">auto</span> childEventsIt = descendantsMap.find(parentEvent);</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <span class="keywordflow">if</span> (childEventsIt != descendantsMap.end())</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="keywordflow">for</span> (<span class="keyword">auto</span> childEvent : childEventsIt-&gt;second)</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="keywordflow">if</span> (inferenceIndex == 0)</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">// Only add second level once, in case of multiple inferences</span></div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; JsonChildObject childObject{ childEvent-&gt;GetName() };</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; childObject.SetType(JsonObjectType::Event);</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; parentObject.AddChild(childObject);</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">// It&#39;s possible that childIdx can overrun the parents&#39; child vector. Check before we try to process a</span></div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <span class="comment">// non-existent child.</span></div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <span class="keywordflow">if</span> (childIdx &lt; parentObject.NumChildren())</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="comment">// Recursively process children.</span></div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <a class="code" href="namespacearmnn.xhtml#a7d4e24d8e296ccced976d626e08b742a">ExtractJsonObjects</a>(inferenceIndex, childEvent, parentObject.GetChild(childIdx), descendantsMap);</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; childIdx++;</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; }</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160;}</div>
+</div><!-- fragment -->
<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#l00069">Event::GetInstruments()</a>, <a class="el" href="_profiling_event_8cpp_source.xhtml#l00056">Event::GetMeasurements()</a>, <a class="el" href="_profiling_event_8cpp_source.xhtml#l00094">Event::GetProfilingGuid()</a>, <a class="el" href="_optional_8hpp_source.xhtml#l00053">OptionalBase::has_value()</a>, <a class="el" href="_json_printer_8hpp_source.xhtml#l00107">JsonChildObject::m_Children</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#l00381">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; arm::pipe::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="keywordtype">unsigned</span> <span class="keywordtype">int</span> numSkippedKernels = 0;</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="keywordflow">if</span> (inferenceIndex &gt; 0)</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">for</span> (<span class="keyword">auto</span> &amp;i: parentEvent-&gt;GetInstruments())</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; <span class="keywordflow">if</span> (i-&gt;HasKernelMeasurements())</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; numSkippedKernels = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(parentObject.m_Children.size() -</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; instrumentMeasurements.size());</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; childIdx = numSkippedKernels;</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; }</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; }</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; }</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160;</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</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="l00334"></a><span class="lineno"> 334</span>&#160; {</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <span class="keywordflow">if</span> (inferenceIndex == 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="comment">// Only add kernel measurement once, in case of multiple inferences</span></div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; JsonChildObject measurementObject{ instrumentMeasurements[measurementIndex].m_Name };</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; measurementObject.SetUnit(instrumentMeasurements[measurementIndex].m_Unit);</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; measurementObject.SetType(JsonObjectType::Measurement);</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; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(parentObject.NumChildren() == childIdx);</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; parentObject.AddChild(measurementObject);</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; <span class="keywordflow">else</span></div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; {</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <span class="keywordflow">if</span> (numSkippedKernels &gt; 0)</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; {</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; parentObject.GetChild(--numSkippedKernels).AddMeasurement(0.0);</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; }</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; }</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160;</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; parentObject.GetChild(childIdx).AddMeasurement(instrumentMeasurements[measurementIndex].m_Value);</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="keyword">auto</span> childEventsIt = descendantsMap.find(parentEvent);</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <span class="keywordflow">if</span> (childEventsIt != descendantsMap.end())</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="keywordflow">for</span> (<span class="keyword">auto</span> childEvent : childEventsIt-&gt;second)</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="keywordflow">if</span> (inferenceIndex == 0)</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">// Only add second level once, in case of multiple inferences</span></div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; JsonChildObject childObject{ childEvent-&gt;GetName() };</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; childObject.SetType(JsonObjectType::Event);</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; parentObject.AddChild(childObject);</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">// It&#39;s possible that childIdx can overrun the parents&#39; child vector. Check before we try to process a</span></div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <span class="comment">// non-existent child.</span></div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <span class="keywordflow">if</span> (childIdx &lt; parentObject.NumChildren())</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="comment">// Recursively process children.</span></div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <a class="code" href="namespacearmnn.xhtml#a50805c29c35b9903c2dea301d8091711">ExtractJsonObjects</a>(inferenceIndex, childEvent, parentObject.GetChild(childIdx), descendantsMap);</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; childIdx++;</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; }</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</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>
@@ -14061,14 +18334,21 @@ Variables</h2></td></tr>
</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>
-<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 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 = armnn::numeric_cast&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><!-- fragment -->
</div>
</div>
-<a id="a6e64aab48baba12883c73e90bfd07e77"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a6e64aab48baba12883c73e90bfd07e77">&#9670;&nbsp;</a></span>FalseFunc()</h2>
+<a id="a589f726622788501df0463460dac63c1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a589f726622788501df0463460dac63c1">&#9670;&nbsp;</a></span>FalseFunc()</h2>
<div class="memitem">
<div class="memproto">
@@ -14076,7 +18356,7 @@ Variables</h2></td></tr>
<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="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>
@@ -14094,14 +18374,18 @@ Variables</h2></td></tr>
</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 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><!-- fragment -->
+<p class="reference">References <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused()</a>.</p>
+
</div>
</div>
-<a id="a621c8ffe11bba3d7ab304a9ad3feec2f"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a621c8ffe11bba3d7ab304a9ad3feec2f">&#9670;&nbsp;</a></span>FalseFuncF16()</h2>
+<a id="a9b083e0201523891e08a2d86405c4e46"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9b083e0201523891e08a2d86405c4e46">&#9670;&nbsp;</a></span>FalseFuncF16()</h2>
<div class="memitem">
<div class="memproto">
@@ -14109,7 +18393,7 @@ Variables</h2></td></tr>
<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="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>
@@ -14127,15 +18411,18 @@ Variables</h2></td></tr>
</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 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#a8c88a8a91827e9ccc3cf3ce6b14fcd17">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><!-- fragment -->
+<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>
</div>
-<a id="a02d627e25da543b79ee8a59a1193a426"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a02d627e25da543b79ee8a59a1193a426">&#9670;&nbsp;</a></span>FalseFuncF32()</h2>
+<a id="a5b1231d5607d2dc1909c1cec828ba415"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5b1231d5607d2dc1909c1cec828ba415">&#9670;&nbsp;</a></span>FalseFuncF32()</h2>
<div class="memitem">
<div class="memproto">
@@ -14143,7 +18430,7 @@ Variables</h2></td></tr>
<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="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>
@@ -14161,15 +18448,18 @@ Variables</h2></td></tr>
</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 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#a8c88a8a91827e9ccc3cf3ce6b14fcd17">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><!-- fragment -->
+<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>
</div>
-<a id="a07ae80b502ab664f1aaf7d6c00725982"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a07ae80b502ab664f1aaf7d6c00725982">&#9670;&nbsp;</a></span>FalseFuncI32()</h2>
+<a id="a7560a9e76988007d33039df264aeed3f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7560a9e76988007d33039df264aeed3f">&#9670;&nbsp;</a></span>FalseFuncI32()</h2>
<div class="memitem">
<div class="memproto">
@@ -14177,7 +18467,7 @@ Variables</h2></td></tr>
<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="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>
@@ -14195,15 +18485,18 @@ Variables</h2></td></tr>
</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 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#a8c88a8a91827e9ccc3cf3ce6b14fcd17">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><!-- fragment -->
+<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>
</div>
-<a id="a4e4802d0916cb8b7da508ab03ce1f163"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a4e4802d0916cb8b7da508ab03ce1f163">&#9670;&nbsp;</a></span>FalseFuncU8()</h2>
+<a id="ae5039794f89bfaf2ebbe28fd35a815cf"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae5039794f89bfaf2ebbe28fd35a815cf">&#9670;&nbsp;</a></span>FalseFuncU8()</h2>
<div class="memitem">
<div class="memproto">
@@ -14211,7 +18504,7 @@ Variables</h2></td></tr>
<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="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>
@@ -14229,15 +18522,18 @@ Variables</h2></td></tr>
</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 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#a8c88a8a91827e9ccc3cf3ce6b14fcd17">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><!-- fragment -->
+<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>
</div>
-<a id="a216969fbba54df95de3e68435b8074d7"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a216969fbba54df95de3e68435b8074d7">&#9670;&nbsp;</a></span>FalseInputFuncF16()</h2>
+<a id="a8cd64bd8701401fe3dda7eab78011d8a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8cd64bd8701401fe3dda7eab78011d8a">&#9670;&nbsp;</a></span>FalseInputFuncF16()</h2>
<div class="memitem">
<div class="memproto">
@@ -14245,7 +18541,7 @@ Variables</h2></td></tr>
<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="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>
@@ -14263,15 +18559,18 @@ Variables</h2></td></tr>
</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 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#a8c88a8a91827e9ccc3cf3ce6b14fcd17">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><!-- fragment -->
+<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>
</div>
-<a id="a0b55e509dd7e3bfea233a389a18c21e6"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a0b55e509dd7e3bfea233a389a18c21e6">&#9670;&nbsp;</a></span>FalseInputFuncF32()</h2>
+<a id="a59aa54d3652ffbef6793f6447314cbd0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a59aa54d3652ffbef6793f6447314cbd0">&#9670;&nbsp;</a></span>FalseInputFuncF32()</h2>
<div class="memitem">
<div class="memproto">
@@ -14279,7 +18578,7 @@ Variables</h2></td></tr>
<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="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>
@@ -14297,15 +18596,18 @@ Variables</h2></td></tr>
</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 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#a8c88a8a91827e9ccc3cf3ce6b14fcd17">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><!-- fragment -->
+<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>
</div>
-<a id="a2febf8d85a92b69e4a677a7c632418ee"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a2febf8d85a92b69e4a677a7c632418ee">&#9670;&nbsp;</a></span>FalseOutputFuncF16()</h2>
+<a id="abc2b8312f25f2daa3cc277f1307b2067"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abc2b8312f25f2daa3cc277f1307b2067">&#9670;&nbsp;</a></span>FalseOutputFuncF16()</h2>
<div class="memitem">
<div class="memproto">
@@ -14313,7 +18615,7 @@ Variables</h2></td></tr>
<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="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>
@@ -14331,15 +18633,18 @@ Variables</h2></td></tr>
</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 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#a8c88a8a91827e9ccc3cf3ce6b14fcd17">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><!-- fragment -->
+<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>
</div>
-<a id="ad3d0087e2533d808debd5c959fb3901f"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ad3d0087e2533d808debd5c959fb3901f">&#9670;&nbsp;</a></span>FalseOutputFuncF32()</h2>
+<a id="a55cbb728001f752173f5d4e34a874e83"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a55cbb728001f752173f5d4e34a874e83">&#9670;&nbsp;</a></span>FalseOutputFuncF32()</h2>
<div class="memitem">
<div class="memproto">
@@ -14347,7 +18652,7 @@ Variables</h2></td></tr>
<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="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>
@@ -14365,11 +18670,14 @@ Variables</h2></td></tr>
</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 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#a8c88a8a91827e9ccc3cf3ce6b14fcd17">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><!-- fragment -->
+<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>
</div>
<a id="a88bebdfe6309aa2cd6831cfa73c296f0"></a>
@@ -14407,10 +18715,16 @@ Variables</h2></td></tr>
<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>
-<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 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><!-- fragment -->
+<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>
+
</div>
</div>
<a id="a1b90db39f6a9ebd11591e76fa364b06f"></a>
@@ -14430,10 +18744,27 @@ Variables</h2></td></tr>
</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 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><!-- fragment -->
+<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>
</div>
<a id="a12d3ffe11b54c0aaa59bdd8415701c36"></a>
@@ -14463,13 +18794,28 @@ Variables</h2></td></tr>
</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>
-
+<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><!-- fragment -->
<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>
@@ -14507,10 +18853,12 @@ Variables</h2></td></tr>
</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 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><!-- fragment -->
+<p class="reference">References <a class="el" href="_cl_context_schema__generated_8h_source.xhtml#l00148">ClContextIdentifier()</a>.</p>
+
</div>
</div>
<a id="a4761eadb938ae8e1322d60ac319276d2"></a>
@@ -14548,10 +18896,12 @@ Variables</h2></td></tr>
</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 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><!-- fragment -->
+<p class="reference">References <a class="el" href="_cl_context_schema__generated_8h_source.xhtml#l00148">ClContextIdentifier()</a>.</p>
+
</div>
</div>
<a id="a0a49066b56fc3bfe44478601c31e2fc0"></a>
@@ -14593,11 +18943,21 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_subgraph_utils_8hpp_source.xhtml#l00082">82</a> of file <a class="el" href="_subgraph_utils_8hpp_source.xhtml">SubgraphUtils.hpp</a>.</p>
-
-<p class="reference">References <a class="el" href="_network_8cpp_source.xhtml#l00161">INetwork::AddPooling2dLayer()</a>, <a class="el" href="_subgraph_utils_8hpp_source.xhtml#l00066">FoldPadLayer()</a>, and <a class="el" href="include_2armnn_2backends_2_optimization_views_8hpp_source.xhtml#l00067">OptimizationViews::GetINetwork()</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; IConnectableLayer* replacement =</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; optimizationViews.GetINetwork()-&gt;AddPooling2dLayer(poolDescriptor, <span class="stringliteral">&quot;folded-pad-into-pool2d&quot;</span>);</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast&lt;LayerType*&gt;(replacement);</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; <a class="code" href="namespacearmnn.xhtml#ae4b69405416c09ee6878e01d27c9450b">FoldPadLayer</a>(optimizationViews,</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; baseLayer,</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; replacementLayer,</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; padLayer);</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> replacementLayer;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ae4b69405416c09ee6878e01d27c9450b"><div class="ttname"><a href="namespacearmnn.xhtml#ae4b69405416c09ee6878e01d27c9450b">armnn::FoldPadLayer</a></div><div class="ttdeci">LayerType * FoldPadLayer(OptimizationViews &amp;optimizationViews, LayerType *baseLayer, LayerType *replacementLayer, PadLayer *padLayer)</div><div class="ttdef"><b>Definition:</b> <a href="_subgraph_utils_8hpp_source.xhtml#l00066">SubgraphUtils.hpp:66</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#l00466">Types.hpp:466</a></div></div>
+<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; IConnectableLayer* replacement =</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; optimizationViews.GetINetwork()-&gt;AddPooling2dLayer(poolDescriptor, <span class="stringliteral">&quot;folded-pad-into-pool2d&quot;</span>);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast&lt;LayerType*&gt;(replacement);</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; <a class="code" href="namespacearmnn.xhtml#ae4b69405416c09ee6878e01d27c9450b">FoldPadLayer</a>(optimizationViews,</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; baseLayer,</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; replacementLayer,</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; padLayer);</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> replacementLayer;</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;}</div>
</div><!-- fragment -->
+<p class="reference">References <a class="el" href="_network_8cpp_source.xhtml#l00161">INetwork::AddPooling2dLayer()</a>, <a class="el" href="_subgraph_utils_8hpp_source.xhtml#l00066">FoldPadLayer()</a>, and <a class="el" href="include_2armnn_2backends_2_optimization_views_8hpp_source.xhtml#l00067">OptimizationViews::GetINetwork()</a>.</p>
+
</div>
</div>
<a id="ae4b69405416c09ee6878e01d27c9450b"></a>
@@ -14639,11 +18999,21 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_subgraph_utils_8hpp_source.xhtml#l00066">66</a> of file <a class="el" href="_subgraph_utils_8hpp_source.xhtml">SubgraphUtils.hpp</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; SubgraphView substitutionSubgraph({padLayer, baseLayer},</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; CreateIInputsFrom({padLayer}),</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; CreateIOutputsFrom({baseLayer}));</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; SubgraphView replacementSubgraph(replacementLayer);</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; optimizationViews.AddSubstitution({substitutionSubgraph, replacementSubgraph});</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> replacementLayer;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;}</div>
+</div><!-- fragment -->
<p class="reference">References <a class="el" href="include_2armnn_2backends_2_optimization_views_8hpp_source.xhtml#l00039">OptimizationViews::AddSubstitution()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_subgraph_utils_8hpp_source.xhtml#l00082">FoldPadIntoAveragePool2d()</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; SubgraphView substitutionSubgraph({padLayer, baseLayer},</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; CreateIInputsFrom({padLayer}),</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; CreateIOutputsFrom({baseLayer}));</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; SubgraphView replacementSubgraph(replacementLayer);</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; optimizationViews.AddSubstitution({substitutionSubgraph, replacementSubgraph});</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> replacementLayer;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;}</div></div><!-- fragment -->
+
</div>
</div>
<a id="afce94270d9c4a51cd0c4ac6a58af4e26"></a>
@@ -14679,12 +19049,27 @@ Variables</h2></td></tr>
</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>
-
+<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; Layer&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; Layer&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><!-- fragment -->
<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#l00245">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; Layer&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; Layer&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="_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>
@@ -14720,11 +19105,28 @@ Variables</h2></td></tr>
</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>
-
+<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; Layer&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; Layer&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><!-- fragment -->
<p class="reference">References <a class="el" href="_layer_8hpp_source.xhtml#l00246">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; Layer&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; Layer&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><!-- fragment -->
+
</div>
</div>
<a id="a435f9350a94adfbb0d5b9abb5f430914"></a>
@@ -14804,12 +19206,53 @@ Variables</h2></td></tr>
<p>Performs a matrix multiplication and optionally adds a bias. </p>
<p class="definition">Definition at line <a class="el" href="_fully_connected_8cpp_source.xhtml#l00015">15</a> of file <a class="el" href="_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 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><!-- fragment -->
+<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>
</div>
<a id="a13f537c12c25c936c152ccca78d902dd"></a>
@@ -14857,11 +19300,21 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00074">74</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="_network_8cpp_source.xhtml#l00214">INetwork::AddAdditionLayer()</a>, <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00054">FuseLayer()</a>, and <a class="el" href="include_2armnn_2backends_2_optimization_views_8hpp_source.xhtml#l00067">OptimizationViews::GetINetwork()</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; IConnectableLayer* replacement = optimizationViews.GetINetwork()-&gt;AddAdditionLayer(name.c_str());</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast&lt;LayerType*&gt;(replacement);</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; <a class="code" href="namespacearmnn.xhtml#a7e4811ef91f499424bca36e98a2fbd96">FuseLayer</a>(optimizationViews,</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; baseLayer,</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; replacementLayer,</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; activationLayer,</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; activationDesc);</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> replacementLayer;</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</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#l00054">ArmComputeSubgraphUtils.hpp:54</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#l00466">Types.hpp:466</a></div></div>
+<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; IConnectableLayer* replacement = optimizationViews.GetINetwork()-&gt;AddAdditionLayer(name.c_str());</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast&lt;LayerType*&gt;(replacement);</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; <a class="code" href="namespacearmnn.xhtml#a7e4811ef91f499424bca36e98a2fbd96">FuseLayer</a>(optimizationViews,</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; baseLayer,</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; replacementLayer,</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; activationLayer,</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; activationDesc);</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> replacementLayer;</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;}</div>
</div><!-- fragment -->
+<p class="reference">References <a class="el" href="_network_8cpp_source.xhtml#l00214">INetwork::AddAdditionLayer()</a>, <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00054">FuseLayer()</a>, and <a class="el" href="include_2armnn_2backends_2_optimization_views_8hpp_source.xhtml#l00067">OptimizationViews::GetINetwork()</a>.</p>
+
</div>
</div>
<a id="aa4a4b141867313cddb82c96800db343e"></a>
@@ -14909,11 +19362,32 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00150">150</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="_network_8cpp_source.xhtml#l00224">INetwork::AddBatchNormalizationLayer()</a>, <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00054">FuseLayer()</a>, and <a class="el" href="include_2armnn_2backends_2_optimization_views_8hpp_source.xhtml#l00067">OptimizationViews::GetINetwork()</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; IConnectableLayer* replacement =</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; optimizationViews.GetINetwork()-&gt;AddBatchNormalizationLayer(baseLayer-&gt;GetParameters(),</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; ConstTensor(),</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; ConstTensor(),</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; ConstTensor(),</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; ConstTensor(),</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; name.c_str());</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast&lt;LayerType*&gt;(replacement);</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; <a class="code" href="namespacearmnn.xhtml#a7e4811ef91f499424bca36e98a2fbd96">FuseLayer</a>(optimizationViews,</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; baseLayer,</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; replacementLayer,</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; activationLayer,</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; activationDesc);</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; SubgraphView substitutionSubgraph({baseLayer, activationLayer},</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; CreateIInputsFrom({baseLayer}),</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; CreateIOutputsFrom({activationLayer}));</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; SubgraphView replacementSubgraph(replacementLayer);</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">return</span> replacementLayer;</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</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#l00054">ArmComputeSubgraphUtils.hpp:54</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#l00466">Types.hpp:466</a></div></div>
+<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; IConnectableLayer* replacement =</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; optimizationViews.GetINetwork()-&gt;AddBatchNormalizationLayer(baseLayer-&gt;GetParameters(),</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; ConstTensor(),</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; ConstTensor(),</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; ConstTensor(),</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; ConstTensor(),</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; name.c_str());</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast&lt;LayerType*&gt;(replacement);</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; <a class="code" href="namespacearmnn.xhtml#a7e4811ef91f499424bca36e98a2fbd96">FuseLayer</a>(optimizationViews,</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; baseLayer,</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; replacementLayer,</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; activationLayer,</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; activationDesc);</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; SubgraphView substitutionSubgraph({baseLayer, activationLayer},</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; CreateIInputsFrom({baseLayer}),</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; CreateIOutputsFrom({activationLayer}));</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; SubgraphView replacementSubgraph(replacementLayer);</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">return</span> replacementLayer;</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160;}</div>
</div><!-- fragment -->
+<p class="reference">References <a class="el" href="_network_8cpp_source.xhtml#l00224">INetwork::AddBatchNormalizationLayer()</a>, <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00054">FuseLayer()</a>, and <a class="el" href="include_2armnn_2backends_2_optimization_views_8hpp_source.xhtml#l00067">OptimizationViews::GetINetwork()</a>.</p>
+
</div>
</div>
<a id="afdb0a1b1703203354451e78e2fc43f3f"></a>
@@ -14961,11 +19435,24 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00180">180</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="_network_8cpp_source.xhtml#l00087">INetwork::AddConvolution2dLayer()</a>, <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00054">FuseLayer()</a>, and <a class="el" href="include_2armnn_2backends_2_optimization_views_8hpp_source.xhtml#l00067">OptimizationViews::GetINetwork()</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; IConnectableLayer* replacement = optimizationViews.GetINetwork()</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; -&gt;AddConvolution2dLayer(baseLayer-&gt;GetParameters(), 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; <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast&lt;LayerType*&gt;(replacement);</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;</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <a class="code" href="namespacearmnn.xhtml#a7e4811ef91f499424bca36e98a2fbd96">FuseLayer</a>(optimizationViews,</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; baseLayer,</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; replacementLayer,</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; activationLayer,</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; activationDesc);</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> replacementLayer;</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</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#l00054">ArmComputeSubgraphUtils.hpp:54</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#l00466">Types.hpp:466</a></div></div>
+<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; IConnectableLayer* replacement = optimizationViews.GetINetwork()</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; -&gt;AddConvolution2dLayer(baseLayer-&gt;GetParameters(), 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; <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast&lt;LayerType*&gt;(replacement);</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; </div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <a class="code" href="namespacearmnn.xhtml#a7e4811ef91f499424bca36e98a2fbd96">FuseLayer</a>(optimizationViews,</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; baseLayer,</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; replacementLayer,</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; activationLayer,</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; activationDesc);</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> replacementLayer;</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;}</div>
</div><!-- fragment -->
+<p class="reference">References <a class="el" href="_network_8cpp_source.xhtml#l00087">INetwork::AddConvolution2dLayer()</a>, <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00054">FuseLayer()</a>, and <a class="el" href="include_2armnn_2backends_2_optimization_views_8hpp_source.xhtml#l00067">OptimizationViews::GetINetwork()</a>.</p>
+
</div>
</div>
<a id="ae795a54643adfeb37ac95dee68807856"></a>
@@ -15013,11 +19500,24 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00202">202</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="_network_8cpp_source.xhtml#l00107">INetwork::AddDepthwiseConvolution2dLayer()</a>, <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00054">FuseLayer()</a>, and <a class="el" href="include_2armnn_2backends_2_optimization_views_8hpp_source.xhtml#l00067">OptimizationViews::GetINetwork()</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; IConnectableLayer* replacement =</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; optimizationViews.GetINetwork()-&gt;AddDepthwiseConvolution2dLayer(baseLayer-&gt;GetParameters(), name.c_str());</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="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast&lt;LayerType*&gt;(replacement);</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; <a class="code" href="namespacearmnn.xhtml#a7e4811ef91f499424bca36e98a2fbd96">FuseLayer</a>(optimizationViews,</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; baseLayer,</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; replacementLayer,</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; activationLayer,</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; activationDesc);</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="keywordflow">return</span> replacementLayer;</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</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#l00054">ArmComputeSubgraphUtils.hpp:54</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#l00466">Types.hpp:466</a></div></div>
+<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; IConnectableLayer* replacement =</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; optimizationViews.GetINetwork()-&gt;AddDepthwiseConvolution2dLayer(baseLayer-&gt;GetParameters(), name.c_str());</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="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast&lt;LayerType*&gt;(replacement);</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; <a class="code" href="namespacearmnn.xhtml#a7e4811ef91f499424bca36e98a2fbd96">FuseLayer</a>(optimizationViews,</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; baseLayer,</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; replacementLayer,</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; activationLayer,</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; activationDesc);</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="keywordflow">return</span> replacementLayer;</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160;}</div>
</div><!-- fragment -->
+<p class="reference">References <a class="el" href="_network_8cpp_source.xhtml#l00107">INetwork::AddDepthwiseConvolution2dLayer()</a>, <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00054">FuseLayer()</a>, and <a class="el" href="include_2armnn_2backends_2_optimization_views_8hpp_source.xhtml#l00067">OptimizationViews::GetINetwork()</a>.</p>
+
</div>
</div>
<a id="a90f36a629081255b526ac433fcedf8ba"></a>
@@ -15065,11 +19565,21 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00112">112</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="_network_8cpp_source.xhtml#l00309">INetwork::AddDivisionLayer()</a>, <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00054">FuseLayer()</a>, and <a class="el" href="include_2armnn_2backends_2_optimization_views_8hpp_source.xhtml#l00067">OptimizationViews::GetINetwork()</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; IConnectableLayer* replacement = optimizationViews.GetINetwork()-&gt;AddDivisionLayer(name.c_str());</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast&lt;LayerType*&gt;(replacement);</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; <a class="code" href="namespacearmnn.xhtml#a7e4811ef91f499424bca36e98a2fbd96">FuseLayer</a>(optimizationViews,</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; baseLayer,</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; replacementLayer,</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; activationLayer,</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; activationDesc);</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">return</span> replacementLayer;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</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#l00054">ArmComputeSubgraphUtils.hpp:54</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#l00466">Types.hpp:466</a></div></div>
+<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; IConnectableLayer* replacement = optimizationViews.GetINetwork()-&gt;AddDivisionLayer(name.c_str());</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast&lt;LayerType*&gt;(replacement);</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; <a class="code" href="namespacearmnn.xhtml#a7e4811ef91f499424bca36e98a2fbd96">FuseLayer</a>(optimizationViews,</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; baseLayer,</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; replacementLayer,</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; activationLayer,</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; activationDesc);</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">return</span> replacementLayer;</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;}</div>
</div><!-- fragment -->
+<p class="reference">References <a class="el" href="_network_8cpp_source.xhtml#l00309">INetwork::AddDivisionLayer()</a>, <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00054">FuseLayer()</a>, and <a class="el" href="include_2armnn_2backends_2_optimization_views_8hpp_source.xhtml#l00067">OptimizationViews::GetINetwork()</a>.</p>
+
</div>
</div>
<a id="ad2021f80998e436e27de7b7eeec67d54"></a>
@@ -15117,11 +19627,24 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00224">224</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="_network_8cpp_source.xhtml#l00143">INetwork::AddFullyConnectedLayer()</a>, <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00054">FuseLayer()</a>, and <a class="el" href="include_2armnn_2backends_2_optimization_views_8hpp_source.xhtml#l00067">OptimizationViews::GetINetwork()</a>.</p>
-<div class="fragment"><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; IConnectableLayer* replacement =</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; optimizationViews.GetINetwork()-&gt;AddFullyConnectedLayer(baseLayer-&gt;GetParameters(),</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; name.c_str());</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast&lt;LayerType*&gt;(replacement);</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="namespacearmnn.xhtml#a7e4811ef91f499424bca36e98a2fbd96">FuseLayer</a>(optimizationViews,</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; baseLayer,</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; replacementLayer,</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; activationLayer,</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; activationDesc);</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; <span class="keywordflow">return</span> replacementLayer;</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</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#l00054">ArmComputeSubgraphUtils.hpp:54</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#l00466">Types.hpp:466</a></div></div>
+<div class="fragment"><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; IConnectableLayer* replacement =</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; optimizationViews.GetINetwork()-&gt;AddFullyConnectedLayer(baseLayer-&gt;GetParameters(),</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; name.c_str());</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast&lt;LayerType*&gt;(replacement);</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="namespacearmnn.xhtml#a7e4811ef91f499424bca36e98a2fbd96">FuseLayer</a>(optimizationViews,</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; baseLayer,</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; replacementLayer,</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; activationLayer,</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; activationDesc);</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; <span class="keywordflow">return</span> replacementLayer;</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160;}</div>
</div><!-- fragment -->
+<p class="reference">References <a class="el" href="_network_8cpp_source.xhtml#l00143">INetwork::AddFullyConnectedLayer()</a>, <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00054">FuseLayer()</a>, and <a class="el" href="include_2armnn_2backends_2_optimization_views_8hpp_source.xhtml#l00067">OptimizationViews::GetINetwork()</a>.</p>
+
</div>
</div>
<a id="a7e4811ef91f499424bca36e98a2fbd96"></a>
@@ -15169,11 +19692,24 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00054">54</a> of file <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml">ArmComputeSubgraphUtils.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; replacementLayer-&gt;SetAdditionalInfoForObject(</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; std::make_shared&lt;ActivationDescriptor&gt;(activationDesc));</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; SubgraphView substitutionSubgraph({baseLayer, activationLayer},</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; CreateIInputsFrom({baseLayer}),</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; CreateIOutputsFrom({activationLayer}));</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; SubgraphView replacementSubgraph(replacementLayer);</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; optimizationViews.AddSubstitution({substitutionSubgraph, replacementSubgraph});</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> replacementLayer;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;}</div>
+</div><!-- fragment -->
<p class="reference">References <a class="el" href="include_2armnn_2backends_2_optimization_views_8hpp_source.xhtml#l00039">OptimizationViews::AddSubstitution()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00074">FuseAdditionLayer()</a>, <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00150">FuseBatchNormalizationLayer()</a>, <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00180">FuseConvolution2dLayer()</a>, <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00202">FuseDepthwiseConvolution2dLayer()</a>, <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00112">FuseDivisionLayer()</a>, <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00224">FuseFullyConnectedLayer()</a>, <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00131">FuseMultiplicationLayer()</a>, and <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00093">FuseSubtractionLayer()</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; replacementLayer-&gt;SetAdditionalInfoForObject(</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; std::make_shared&lt;ActivationDescriptor&gt;(activationDesc));</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; SubgraphView substitutionSubgraph({baseLayer, activationLayer},</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; CreateIInputsFrom({baseLayer}),</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; CreateIOutputsFrom({activationLayer}));</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; SubgraphView replacementSubgraph(replacementLayer);</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; optimizationViews.AddSubstitution({substitutionSubgraph, replacementSubgraph});</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> replacementLayer;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;}</div></div><!-- fragment -->
+
</div>
</div>
<a id="af06b26928a460f9fcdef0327f448a34c"></a>
@@ -15221,11 +19757,21 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00131">131</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="_network_8cpp_source.xhtml#l00219">INetwork::AddMultiplicationLayer()</a>, <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00054">FuseLayer()</a>, and <a class="el" href="include_2armnn_2backends_2_optimization_views_8hpp_source.xhtml#l00067">OptimizationViews::GetINetwork()</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; IConnectableLayer* replacement = optimizationViews.GetINetwork()-&gt;AddMultiplicationLayer(name.c_str());</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast&lt;LayerType*&gt;(replacement);</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; <a class="code" href="namespacearmnn.xhtml#a7e4811ef91f499424bca36e98a2fbd96">FuseLayer</a>(optimizationViews,</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; baseLayer,</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; replacementLayer,</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; activationLayer,</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; activationDesc);</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">return</span> replacementLayer;</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</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#l00054">ArmComputeSubgraphUtils.hpp:54</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#l00466">Types.hpp:466</a></div></div>
+<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; IConnectableLayer* replacement = optimizationViews.GetINetwork()-&gt;AddMultiplicationLayer(name.c_str());</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast&lt;LayerType*&gt;(replacement);</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; <a class="code" href="namespacearmnn.xhtml#a7e4811ef91f499424bca36e98a2fbd96">FuseLayer</a>(optimizationViews,</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; baseLayer,</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; replacementLayer,</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; activationLayer,</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; activationDesc);</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">return</span> replacementLayer;</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;}</div>
</div><!-- fragment -->
+<p class="reference">References <a class="el" href="_network_8cpp_source.xhtml#l00219">INetwork::AddMultiplicationLayer()</a>, <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00054">FuseLayer()</a>, and <a class="el" href="include_2armnn_2backends_2_optimization_views_8hpp_source.xhtml#l00067">OptimizationViews::GetINetwork()</a>.</p>
+
</div>
</div>
<a id="aeda4132cdab76b98c860690c80fdb7bd"></a>
@@ -15273,11 +19819,21 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00093">93</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="_network_8cpp_source.xhtml#l00314">INetwork::AddSubtractionLayer()</a>, <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00054">FuseLayer()</a>, and <a class="el" href="include_2armnn_2backends_2_optimization_views_8hpp_source.xhtml#l00067">OptimizationViews::GetINetwork()</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; IConnectableLayer* replacement = optimizationViews.GetINetwork()-&gt;AddSubtractionLayer(name.c_str());</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast&lt;LayerType*&gt;(replacement);</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; <a class="code" href="namespacearmnn.xhtml#a7e4811ef91f499424bca36e98a2fbd96">FuseLayer</a>(optimizationViews,</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; baseLayer,</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; replacementLayer,</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; activationLayer,</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; activationDesc);</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">return</span> replacementLayer;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</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#l00054">ArmComputeSubgraphUtils.hpp:54</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#l00466">Types.hpp:466</a></div></div>
+<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; IConnectableLayer* replacement = optimizationViews.GetINetwork()-&gt;AddSubtractionLayer(name.c_str());</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* replacementLayer = PolymorphicDowncast&lt;LayerType*&gt;(replacement);</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; <a class="code" href="namespacearmnn.xhtml#a7e4811ef91f499424bca36e98a2fbd96">FuseLayer</a>(optimizationViews,</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; baseLayer,</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; replacementLayer,</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; activationLayer,</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; activationDesc);</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; </div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">return</span> replacementLayer;</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;}</div>
</div><!-- fragment -->
+<p class="reference">References <a class="el" href="_network_8cpp_source.xhtml#l00314">INetwork::AddSubtractionLayer()</a>, <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00054">FuseLayer()</a>, and <a class="el" href="include_2armnn_2backends_2_optimization_views_8hpp_source.xhtml#l00067">OptimizationViews::GetINetwork()</a>.</p>
+
</div>
</div>
<a id="a4f1a1b88b01d8dfda3803776e0778a49"></a>
@@ -15337,18 +19893,62 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_gather_8cpp_source.xhtml#l00014">14</a> of file <a class="el" href="_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>
-<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#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(outputInfo);</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> <span class="keywordtype">int</span> paramsRank = <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(paramsInfo.GetNumDimensions());</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>(-1 * paramsRank &lt;= axis_int &amp;&amp; axis_int &lt; paramsRank);</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> axis = (axis_int &lt; 0) ? static_cast&lt;unsigned int&gt;(paramsRank + axis_int)</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; : static_cast&lt;unsigned int&gt;(axis_int);</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> TensorShape&amp; paramsShape = paramsInfo.GetShape();</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="comment">// Product of all dimensions to the left side of the axis</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> paramsOuterProduct = 1;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; axis; ++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; paramsOuterProduct *= paramsShape[i];</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">// Product of all dimensions to the right side of the axis</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> paramsInnerProduct = 1;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> k = 1 + axis; k &lt; paramsInfo.GetNumDimensions(); ++k)</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; paramsInnerProduct *= paramsShape[k];</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">unsigned</span> <span class="keywordtype">int</span> offset = 0;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outIndex = 0;</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; paramsOuterProduct; ++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; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j = 0; j &lt; indicesInfo.GetNumElements(); ++j)</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="keywordtype">unsigned</span> <span class="keywordtype">int</span> index = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(indices[j]);</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>(indices[j] &gt;= 0 &amp;&amp; index &lt; paramsShape[axis]);</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> startOffset = (paramsInnerProduct * index) + offset;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> endOffset = startOffset + paramsInnerProduct;</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">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> k = startOffset; k &lt; endOffset; ++k)</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; params[k];</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</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="l00060"></a><span class="lineno"> 60</span>&#160; output[outIndex];</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; output.<a class="code" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Set</a>(outputValue);</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; ++outIndex;</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; offset += paramsShape[axis] * paramsInnerProduct;</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; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(outIndex == outputInfo.GetNumElements());</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</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="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#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(outputInfo);</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> <span class="keywordtype">int</span> paramsRank = <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(paramsInfo.GetNumDimensions());</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>(-1 * paramsRank &lt;= axis_int &amp;&amp; axis_int &lt; paramsRank);</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> axis = (axis_int &lt; 0) ? static_cast&lt;unsigned int&gt;(paramsRank + axis_int)</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; : static_cast&lt;unsigned int&gt;(axis_int);</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> TensorShape&amp; paramsShape = paramsInfo.GetShape();</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="comment">// Product of all dimensions to the left side of the axis</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> paramsOuterProduct = 1;</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; axis; ++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; paramsOuterProduct *= paramsShape[i];</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">// Product of all dimensions to the right side of the axis</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> paramsInnerProduct = 1;</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> k = 1 + axis; k &lt; paramsInfo.GetNumDimensions(); ++k)</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; paramsInnerProduct *= paramsShape[k];</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">unsigned</span> <span class="keywordtype">int</span> offset = 0;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outIndex = 0;</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; paramsOuterProduct; ++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; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j = 0; j &lt; indicesInfo.GetNumElements(); ++j)</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="keywordtype">unsigned</span> <span class="keywordtype">int</span> index = armnn::numeric_cast&lt;unsigned int&gt;(indices[j]);</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>(indices[j] &gt;= 0 &amp;&amp; index &lt; paramsShape[axis]);</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> startOffset = (paramsInnerProduct * index) + offset;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> endOffset = startOffset + paramsInnerProduct;</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">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> k = startOffset; k &lt; endOffset; ++k)</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; params[k];</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</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="l00060"></a><span class="lineno"> 60</span>&#160; output[outIndex];</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; output.<a class="code" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Set</a>(outputValue);</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; ++outIndex;</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; offset += paramsShape[axis] * paramsInnerProduct;</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; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(outIndex == outputInfo.GetNumElements());</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;}</div>
+</div><!-- fragment -->
+<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>, and <a class="el" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>.</p>
+
+</div>
+</div>
+<a id="a844d7fa4dde82e1c6b0606e1c68890bb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a844d7fa4dde82e1c6b0606e1c68890bb">&#9670;&nbsp;</a></span>GatherTensorHandlePairs()</h2>
<div class="memitem">
<div class="memproto">
@@ -15362,7 +19962,7 @@ Variables</h2></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="paramtype">std::vector&lt; std::pair&lt; SrcTensorHandleType *, DstTensorHandleType * &gt;&gt; &amp;&#160;</td>
<td class="paramname"><em>tensorHandlePairs</em>&#160;</td>
</tr>
<tr>
@@ -15374,11 +19974,23 @@ Variables</h2></td></tr>
</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#l00300">CalculateGatherNdKeyIndices()</a>, <a class="el" href="_workload_utils_8cpp_source.xhtml#l00170">Convert1HWOTensorInfoToAcl()</a>, <a class="el" href="_workload_utils_8cpp_source.xhtml#l00139">Convert1HWOTensorToAcl()</a>, <a class="el" href="_workload_utils_8cpp_source.xhtml#l00201">Convert1HWOtoMIHW()</a>, <a class="el" href="_workload_utils_8cpp_source.xhtml#l00286">ConvertMaskToACLFormat()</a>, <a class="el" href="_workload_utils_8cpp_source.xhtml#l00230">ConvertWeightTensorFromArmnnToAcl()</a>, <a class="el" href="_workload_utils_8cpp_source.xhtml#l00115">ConvertWeightTensorInfoFromArmnnToAcl()</a>, <a class="el" href="_workload_utils_8cpp_source.xhtml#l00344">GeneratePermutationVectorOnLastTwoDimensions()</a>, <a class="el" href="_workload_utils_8cpp_source.xhtml#l00018">PermuteTensor()</a>, and <a class="el" href="_workload_utils_8cpp_source.xhtml#l00041">ReshapeWeightsForAcl()</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 -->
<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_fp16_to_fp32_workload_8cpp_source.xhtml#l00017">NeonConvertFp16ToFp32Workload::NeonConvertFp16ToFp32Workload()</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="a15e2ba06d2ecd7ff6013118838e5d1be"></a>
@@ -15400,16 +20012,31 @@ Variables</h2></td></tr>
<p>Generates a permutation vector of size rank that permutes the 2 most right dimensions. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
- <tr><td class="paramname">rank</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> rank, i.e. number of dimensions in the tensors </td></tr>
+ <tr><td class="paramname">rank</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> rank, i.e. number of dimensions in the tensors </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>- A permutation vector that permutes the 2 last dimensions </dd></dl>
<p class="definition">Definition at line <a class="el" href="_workload_utils_8cpp_source.xhtml#l00344">344</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="_workload_utils_8hpp_source.xhtml#l00189">GatherTensorHandlePairs()</a>.</p>
-<div class="fragment"><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; <a class="code" href="classarmnn_1_1_permutation_vector.xhtml">armnn::PermutationVector</a> permutationVector{};</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <span class="keywordflow">switch</span> (rank)</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; {</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <span class="keywordflow">case</span> 2:</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; permutationVector = {1U, 0U};</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="keywordflow">case</span> 3:</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; permutationVector = {0U, 2U, 1U};</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <span class="keywordflow">case</span> 4:</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; permutationVector = {0U, 1U, 3U, 2U};</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="keywordflow">throw</span> Exception(<span class="stringliteral">&quot;Invalid number of dimensions.&quot;</span>);</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="keywordflow">return</span> permutationVector;</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</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#l00295">Types.hpp:295</a></div></div>
+<div class="fragment"><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; <a class="code" href="classarmnn_1_1_permutation_vector.xhtml">armnn::PermutationVector</a> permutationVector{};</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <span class="keywordflow">switch</span> (rank)</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; {</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <span class="keywordflow">case</span> 2:</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; permutationVector = {1U, 0U};</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="keywordflow">case</span> 3:</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; permutationVector = {0U, 2U, 1U};</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <span class="keywordflow">case</span> 4:</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; permutationVector = {0U, 1U, 3U, 2U};</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="keywordflow">throw</span> Exception(<span class="stringliteral">&quot;Invalid number of dimensions.&quot;</span>);</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="keywordflow">return</span> permutationVector;</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
@@ -15430,9 +20057,14 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_detection_post_process_8cpp_source.xhtml#l00017">17</a> of file <a class="el" href="_detection_post_process_8cpp_source.xhtml">DetectionPostProcess.cpp</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 -->
<p class="reference">Referenced by <a class="el" href="_detection_post_process_8cpp_source.xhtml#l00140">DetectionPostProcess()</a>, and <a class="el" href="_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>
@@ -15440,6 +20072,9 @@ Variables</h2></td></tr>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr char const* armnn::GetActivationFunctionAsCString </td>
@@ -15449,14 +20084,37 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
+ </tr>
+</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00031">31</a> of file <a class="el" href="_types_utils_8hpp_source.xhtml">TypesUtils.hpp</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">switch</span> (activation)</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> ActivationFunction::Sigmoid: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Sigmoid&quot;</span>;</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</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="l00037"></a><span class="lineno"> 37</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="l00038"></a><span class="lineno"> 38</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="l00039"></a><span class="lineno"> 39</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="l00040"></a><span class="lineno"> 40</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="l00041"></a><span class="lineno"> 41</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="l00042"></a><span class="lineno"> 42</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="l00043"></a><span class="lineno"> 43</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="l00044"></a><span class="lineno"> 44</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="l00045"></a><span class="lineno"> 45</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="l00046"></a><span class="lineno"> 46</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="l00047"></a><span class="lineno"> 47</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="l00048"></a><span class="lineno"> 48</span>&#160; }</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;}</div>
+</div><!-- fragment -->
<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="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> (activation)</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> ActivationFunction::Sigmoid: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Sigmoid&quot;</span>;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</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="l00037"></a><span class="lineno"> 37</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="l00038"></a><span class="lineno"> 38</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="l00039"></a><span class="lineno"> 39</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="l00040"></a><span class="lineno"> 40</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="l00041"></a><span class="lineno"> 41</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="l00042"></a><span class="lineno"> 42</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="l00043"></a><span class="lineno"> 43</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="l00044"></a><span class="lineno"> 44</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="l00045"></a><span class="lineno"> 45</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="l00046"></a><span class="lineno"> 46</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="l00047"></a><span class="lineno"> 47</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="l00048"></a><span class="lineno"> 48</span>&#160; }</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;}</div></div><!-- fragment -->
+
</div>
</div>
<a id="a5cda3502382f06a64c3cbeb1829bd850"></a>
@@ -15464,6 +20122,9 @@ Variables</h2></td></tr>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr char const* armnn::GetArgMinMaxFunctionAsCString </td>
@@ -15473,14 +20134,25 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
+ </tr>
+</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00051">51</a> of file <a class="el" href="_types_utils_8hpp_source.xhtml">TypesUtils.hpp</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="keywordflow">switch</span> (<span class="keyword">function</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; <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="l00056"></a><span class="lineno"> 56</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="l00057"></a><span class="lineno"> 57</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="l00058"></a><span class="lineno"> 58</span>&#160; }</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;}</div>
+</div><!-- fragment -->
<p class="reference">References <a class="el" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea6a061313d22e51e0f25b7cd4dc065233">Max</a>, and <a class="el" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea78d811e98514cd165dda532286610fd2">Min</a>.</p>
-<p class="reference">Referenced by <a class="el" href="_converter_8cpp_source.xhtml#l00021">Converter::ConvertOperation()</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="keywordflow">switch</span> (<span class="keyword">function</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; <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="l00056"></a><span class="lineno"> 56</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="l00057"></a><span class="lineno"> 57</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="l00058"></a><span class="lineno"> 58</span>&#160; }</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;}</div></div><!-- fragment -->
</div>
</div>
<a id="a872803f5667392efc3c8e5607bd453ad"></a>
@@ -15500,12 +20172,32 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_workload_data_8cpp_source.xhtml#l00028">28</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#l00212">ARMNN_LOG</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">BFloat16</a>, <a class="el" href="_exceptions_8hpp_source.xhtml#l00203">CHECK_LOCATION</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00198">TensorInfo::GetDataType()</a>, <a class="el" href="_types_utils_8hpp_source.xhtml#l00206">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#l00494">TensorInfo::GetQuantizationDim()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00478">TensorInfo::GetQuantizationOffset()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00461">TensorInfo::GetQuantizationScale()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00451">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#l00446">TensorInfo::HasPerAxisQuantization()</a>, <a class="el" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00504">TensorInfo::IsQuantized()</a>, <a class="el" href="_types_utils_8hpp_source.xhtml#l00289">IsQuantized8BitType()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00432">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>
+<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">switch</span> (inputDataType)</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> DataType::Float16:</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordflow">return</span> DataType::Float16;</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordflow">case</span> DataType::BFloat16:</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordflow">case</span> DataType::Float32:</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">return</span> DataType::Float32;</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmS8:</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">return</span> DataType::Signed32;</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmU8:</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordflow">return</span> DataType::Signed32;</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS8:</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">return</span> DataType::Signed32;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS16:</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordflow">return</span> DataType::Signed32;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</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="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordflow">return</span> DataType::Float32;</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><!-- fragment -->
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00015">ARMNN_ASSERT_MSG</a>, and <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">BFloat16</a>.</p>
<p class="reference">Referenced by <a class="el" href="_workload_data_8cpp_source.xhtml#l01062">FullyConnectedQueueDescriptor::Validate()</a>, <a class="el" href="_workload_data_8cpp_source.xhtml#l01273">Convolution2dQueueDescriptor::Validate()</a>, <a class="el" href="_workload_data_8cpp_source.xhtml#l01350">Convolution3dQueueDescriptor::Validate()</a>, <a class="el" href="_workload_data_8cpp_source.xhtml#l01412">DepthwiseConvolution2dQueueDescriptor::Validate()</a>, and <a class="el" href="_workload_data_8cpp_source.xhtml#l02961">TransposeConvolution2dQueueDescriptor::Validate()</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">switch</span> (inputDataType)</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> DataType::Float16:</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordflow">return</span> DataType::Float16;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordflow">case</span> DataType::BFloat16:</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordflow">case</span> DataType::Float32:</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">return</span> DataType::Float32;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmS8:</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">return</span> DataType::Signed32;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmU8:</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordflow">return</span> DataType::Signed32;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS8:</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">return</span> DataType::Signed32;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS16:</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordflow">return</span> DataType::Signed32;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</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="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordflow">return</span> DataType::Float32;</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="_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>
@@ -15533,25 +20225,36 @@ Variables</h2></td></tr>
</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>
-
+<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><!-- fragment -->
<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>, and <a class="el" href="_layer_support_rules_8hpp_source.xhtml#l00120">BiasAndWeightsTypesMatch::BiasAndWeightsTypesMatch()</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 -->
+<p class="reference">Referenced by <a class="el" href="_layer_support_rules_8hpp_source.xhtml#l00120">BiasAndWeightsTypesMatch::BiasAndWeightsTypesMatch()</a>.</p>
+
</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>
+<a id="a8d70f94d3f0ffb06067a66c49b2f8689"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8d70f94d3f0ffb06067a66c49b2f8689">&#9670;&nbsp;</a></span>GetCapability() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -15565,8 +20268,8 @@ Variables</h2></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>
+ <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>
@@ -15578,16 +20281,25 @@ Variables</h2></td></tr>
<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#l00037">37</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="definition">Definition at line <a class="el" href="_backend_helper_8cpp_source.xhtml#l00051">51</a> of file <a class="el" href="_backend_helper_8cpp_source.xhtml">BackendHelper.cpp</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="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="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordflow">if</span> (backendRegistry.IsBackendRegistered(backend))</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">auto</span> factoryFunc = backendRegistry.GetFactory(backend);</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keyword">auto</span> backendObject = factoryFunc();</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keyword">auto</span> capabilities = backendObject-&gt;GetCapabilities();</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>(backendCapabilityName, capabilities);</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">return</span> EmptyOptional();</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;}</div>
+</div><!-- fragment -->
+<p class="reference">References <a class="el" href="_backend_registry_8cpp_source.xhtml#l00015">BackendRegistryInstance()</a>, and <a class="el" href="_backend_helper_8cpp_source.xhtml#l00037">GetCapability()</a>.</p>
-<p class="reference">Referenced by <a class="el" href="_backend_helper_8cpp_source.xhtml#l00051">GetCapability()</a>, <a class="el" href="_backend_helper_8cpp_source.xhtml#l00065">HasCapability()</a>, <a class="el" href="_backend_helper_8cpp_source.xhtml#l00345">LayerSupportHandle::IsConvolution2dSupported()</a>, <a class="el" href="_backend_helper_8cpp_source.xhtml#l00446">LayerSupportHandle::IsDepthwiseConvolutionSupported()</a>, <a class="el" href="_backend_helper_8cpp_source.xhtml#l00534">LayerSupportHandle::IsDilatedDepthwiseConvolutionSupported()</a>, <a class="el" href="_backend_helper_8cpp_source.xhtml#l00661">LayerSupportHandle::IsFullyConnectedSupported()</a>, and <a class="el" href="_backend_helper_8hpp_source.xhtml#l00035">LayerSupportHandle::LayerSupportHandle()</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="keywordflow">for</span> (<span class="keywordtype">size_t</span> i=0; i &lt; capabilities.GetOptionCount(); 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; <span class="keyword">const</span> <span class="keyword">auto</span>&amp; capability = capabilities.GetOption(i);</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordflow">if</span> (backendCapabilityName == capability.GetName())</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> capability;</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="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">return</span> EmptyOptional();</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</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>
+<a id="a71c3bdadfe1c69aba2cbf054bff47744"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a71c3bdadfe1c69aba2cbf054bff47744">&#9670;&nbsp;</a></span>GetCapability() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -15601,8 +20313,8 @@ Variables</h2></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>
+ <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>
@@ -15614,12 +20326,23 @@ Variables</h2></td></tr>
<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#l00051">51</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#l00015">BackendRegistryInstance()</a>, and <a class="el" href="_backend_helper_8cpp_source.xhtml#l00037">GetCapability()</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="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="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordflow">if</span> (backendRegistry.IsBackendRegistered(backend))</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">auto</span> factoryFunc = backendRegistry.GetFactory(backend);</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keyword">auto</span> backendObject = factoryFunc();</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keyword">auto</span> capabilities = backendObject-&gt;GetCapabilities();</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>(backendCapabilityName, capabilities);</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">return</span> EmptyOptional();</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</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#l00037">BackendHelper.cpp:37</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#l00015">BackendRegistry.cpp:15</a></div></div>
+<p class="definition">Definition at line <a class="el" href="_backend_helper_8cpp_source.xhtml#l00037">37</a> of file <a class="el" href="_backend_helper_8cpp_source.xhtml">BackendHelper.cpp</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="keywordflow">for</span> (<span class="keywordtype">size_t</span> i=0; i &lt; capabilities.GetOptionCount(); 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; <span class="keyword">const</span> <span class="keyword">auto</span>&amp; capability = capabilities.GetOption(i);</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordflow">if</span> (backendCapabilityName == capability.GetName())</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> capability;</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="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">return</span> EmptyOptional();</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;}</div>
</div><!-- fragment -->
+<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#l00051">GetCapability()</a>, <a class="el" href="_backend_helper_8cpp_source.xhtml#l00065">HasCapability()</a>, <a class="el" href="_backend_helper_8cpp_source.xhtml#l00345">LayerSupportHandle::IsConvolution2dSupported()</a>, <a class="el" href="_backend_helper_8cpp_source.xhtml#l00446">LayerSupportHandle::IsDepthwiseConvolutionSupported()</a>, <a class="el" href="_backend_helper_8cpp_source.xhtml#l00534">LayerSupportHandle::IsDilatedDepthwiseConvolutionSupported()</a>, and <a class="el" href="_backend_helper_8cpp_source.xhtml#l00661">LayerSupportHandle::IsFullyConnectedSupported()</a>.</p>
+
</div>
</div>
<a id="ac3dec65fab0e6a1a6fef52e6321b4993"></a>
@@ -15647,9 +20370,12 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<p class="reference">Referenced by <a class="el" href="_cl_context_deserializer_8cpp_source.xhtml#l00081">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>
@@ -15657,6 +20383,9 @@ Variables</h2></td></tr>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr char const* armnn::GetComparisonOperationAsCString </td>
@@ -15666,14 +20395,31 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
+ </tr>
+</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00061">61</a> of file <a class="el" href="_types_utils_8hpp_source.xhtml">TypesUtils.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">switch</span> (operation)</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">case</span> ComparisonOperation::Equal: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Equal&quot;</span>;</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</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="l00067"></a><span class="lineno"> 67</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="l00068"></a><span class="lineno"> 68</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="l00069"></a><span class="lineno"> 69</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="l00070"></a><span class="lineno"> 70</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="l00071"></a><span class="lineno"> 71</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="l00072"></a><span class="lineno"> 72</span>&#160; }</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;}</div>
+</div><!-- fragment -->
<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#l03957">armnnTfLiteParser::ComputeWrappedIndex()</a>, <a class="el" href="_converter_8cpp_source.xhtml#l00021">Converter::ConvertOperation()</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#l00081">StringifyLayerParameters&lt; ComparisonDescriptor &gt;::Serialize()</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">switch</span> (operation)</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">case</span> ComparisonOperation::Equal: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Equal&quot;</span>;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</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="l00067"></a><span class="lineno"> 67</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="l00068"></a><span class="lineno"> 68</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="l00069"></a><span class="lineno"> 69</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="l00070"></a><span class="lineno"> 70</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="l00071"></a><span class="lineno"> 71</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="l00072"></a><span class="lineno"> 72</span>&#160; }</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;}</div></div><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00081">StringifyLayerParameters&lt; ComparisonDescriptor &gt;::Serialize()</a>.</p>
+
</div>
</div>
<a id="a6bab17bfd45c2fa4592c431bc25ad10e"></a>
@@ -15681,6 +20427,9 @@ Variables</h2></td></tr>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr char const* armnn::GetComputeDeviceAsCString </td>
@@ -15690,19 +20439,30 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</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#l00034">34</a> of file <a class="el" href="_backend_id_8hpp_source.xhtml">BackendId.hpp</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><!-- fragment -->
<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="_backend_id_8hpp_source.xhtml#l00047">operator&lt;&lt;()</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 -->
+<p class="reference">Referenced by <a class="el" href="_backend_id_8hpp_source.xhtml#l00091">BackendId::BackendId()</a>, <a class="el" href="_backend_id_8hpp_source.xhtml#l00135">BackendId::IsCpuAcc()</a>, <a class="el" href="_backend_id_8hpp_source.xhtml#l00134">BackendId::IsCpuRef()</a>, <a class="el" href="_backend_id_8hpp_source.xhtml#l00136">BackendId::IsGpuAcc()</a>, <a class="el" href="_backend_id_8hpp_source.xhtml#l00141">BackendId::IsUndefined()</a>, and <a class="el" href="_backend_id_8hpp_source.xhtml#l00047">operator&lt;&lt;()</a>.</p>
+
</div>
</div>
<a id="a63833af8e1986a93f86d15397b9062c2"></a>
@@ -15730,7 +20490,22 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_workload_utils_8hpp_source.xhtml#l00038">38</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="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">switch</span> (convolutionMethod)</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">case</span> arm_compute::ConvolutionMethod::FFT:</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;FFT&quot;</span>;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordflow">case</span> arm_compute::ConvolutionMethod::DIRECT:</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Direct&quot;</span>;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">case</span> arm_compute::ConvolutionMethod::GEMM:</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;GEMM&quot;</span>;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">case</span> arm_compute::ConvolutionMethod::WINOGRAD:</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Winograd&quot;</span>;</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Unknown&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;}</div></div><!-- fragment -->
+<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="keywordflow">switch</span> (convolutionMethod)</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">case</span> arm_compute::ConvolutionMethod::FFT:</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;FFT&quot;</span>;</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordflow">case</span> arm_compute::ConvolutionMethod::DIRECT:</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Direct&quot;</span>;</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">case</span> arm_compute::ConvolutionMethod::GEMM:</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;GEMM&quot;</span>;</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">case</span> arm_compute::ConvolutionMethod::WINOGRAD:</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Winograd&quot;</span>;</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Unknown&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;}</div>
+</div><!-- fragment -->
</div>
</div>
<a id="aeef70b7611ae71e97ab55c75ef72b210"></a>
@@ -15738,6 +20513,9 @@ Variables</h2></td></tr>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr const char* armnn::GetDataLayoutName </td>
@@ -15747,14 +20525,29 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
+ </tr>
+</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00226">226</a> of file <a class="el" href="_types_utils_8hpp_source.xhtml">TypesUtils.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="keywordflow">switch</span> (dataLayout)</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">case</span> DataLayout::NCHW: <span class="keywordflow">return</span> <span class="stringliteral">&quot;NCHW&quot;</span>;</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</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="l00232"></a><span class="lineno"> 232</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="l00233"></a><span class="lineno"> 233</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="l00234"></a><span class="lineno"> 234</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="l00235"></a><span class="lineno"> 235</span>&#160; }</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160;}</div>
+</div><!-- fragment -->
<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#l00170">Convert1HWOTensorInfoToAcl()</a>, <a class="el" href="_workload_utils_8cpp_source.xhtml#l00139">Convert1HWOTensorToAcl()</a>, <a class="el" href="_common_test_utils_8cpp_source.xhtml#l00081">MakeTensorShape()</a>, <a class="el" href="_permute_depthwise_conv2d_weights_8hpp_source.xhtml#l00023">PermuteDepthwiseConv2dWeightsImpl::Run()</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#l00038">StringifyLayerParameters&lt; BatchToSpaceNdDescriptor &gt;::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00087">StringifyLayerParameters&lt; Convolution2dDescriptor &gt;::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00113">StringifyLayerParameters&lt; Convolution3dDescriptor &gt;::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00163">StringifyLayerParameters&lt; DepthwiseConvolution2dDescriptor &gt;::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00216">StringifyLayerParameters&lt; L2NormalizationDescriptor &gt;::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00253">StringifyLayerParameters&lt; NormalizationDescriptor &gt;::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00321">StringifyLayerParameters&lt; Pooling2dDescriptor &gt;::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00349">StringifyLayerParameters&lt; Pooling3dDescriptor &gt;::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00426">StringifyLayerParameters&lt; ResizeDescriptor &gt;::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00444">StringifyLayerParameters&lt; SpaceToBatchNdDescriptor &gt;::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00480">StringifyLayerParameters&lt; SpaceToDepthDescriptor &gt;::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00498">StringifyLayerParameters&lt; StridedSliceDescriptor &gt;::Serialize()</a>, and <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00554">StringifyLayerParameters&lt; TransposeConvolution2dDescriptor &gt;::Serialize()</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="keywordflow">switch</span> (dataLayout)</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">case</span> DataLayout::NCHW: <span class="keywordflow">return</span> <span class="stringliteral">&quot;NCHW&quot;</span>;</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</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="l00232"></a><span class="lineno"> 232</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="l00233"></a><span class="lineno"> 233</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="l00234"></a><span class="lineno"> 234</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="l00235"></a><span class="lineno"> 235</span>&#160; }</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160;}</div></div><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_workload_utils_8cpp_source.xhtml#l00170">Convert1HWOTensorInfoToAcl()</a>, <a class="el" href="_workload_utils_8cpp_source.xhtml#l00139">Convert1HWOTensorToAcl()</a>, <a class="el" href="_common_test_utils_8cpp_source.xhtml#l00081">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#l00038">StringifyLayerParameters&lt; BatchToSpaceNdDescriptor &gt;::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00087">StringifyLayerParameters&lt; Convolution2dDescriptor &gt;::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00113">StringifyLayerParameters&lt; Convolution3dDescriptor &gt;::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00163">StringifyLayerParameters&lt; DepthwiseConvolution2dDescriptor &gt;::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00216">StringifyLayerParameters&lt; L2NormalizationDescriptor &gt;::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00253">StringifyLayerParameters&lt; NormalizationDescriptor &gt;::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00321">StringifyLayerParameters&lt; Pooling2dDescriptor &gt;::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00349">StringifyLayerParameters&lt; Pooling3dDescriptor &gt;::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00426">StringifyLayerParameters&lt; ResizeDescriptor &gt;::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00444">StringifyLayerParameters&lt; SpaceToBatchNdDescriptor &gt;::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00480">StringifyLayerParameters&lt; SpaceToDepthDescriptor &gt;::Serialize()</a>, <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00498">StringifyLayerParameters&lt; StridedSliceDescriptor &gt;::Serialize()</a>, and <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00554">StringifyLayerParameters&lt; TransposeConvolution2dDescriptor &gt;::Serialize()</a>.</p>
+
</div>
</div>
<a id="a81b5ff8545adad19a1c9d4ca076d552c"></a>
@@ -15762,6 +20555,9 @@ Variables</h2></td></tr>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr const char* armnn::GetDataTypeName </td>
@@ -15771,14 +20567,37 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
+ </tr>
+</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00206">206</a> of file <a class="el" href="_types_utils_8hpp_source.xhtml">TypesUtils.hpp</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="keywordflow">switch</span> (dataType)</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; <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="l00211"></a><span class="lineno"> 211</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="l00212"></a><span class="lineno"> 212</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="l00213"></a><span class="lineno"> 213</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="l00214"></a><span class="lineno"> 214</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="l00215"></a><span class="lineno"> 215</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="l00216"></a><span class="lineno"> 216</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="l00217"></a><span class="lineno"> 217</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="l00218"></a><span class="lineno"> 218</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="l00219"></a><span class="lineno"> 219</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="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">default</span>:</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Unknown&quot;</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;}</div>
+</div><!-- fragment -->
<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#l00608">AttemptBackendAssignment()</a>, <a class="el" href="_profiling_details_8hpp_source.xhtml#l00118">ProfilingDetails::DetailsExist()</a>, <a class="el" href="_workload_data_8cpp_source.xhtml#l00028">GetBiasDataType()</a>, <a class="el" href="_tf_lite_parser_8cpp_source.xhtml#l05019">TfLiteParserImpl::GetBuffer()</a>, <a class="el" href="_ref_transpose_workload_8hpp_source.xhtml#l00019">RefTransposeWorkload&lt; DataType &gt;::GetName()</a>, <a class="el" href="_ref_permute_workload_8hpp_source.xhtml#l00019">RefPermuteWorkload&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#l00221">armnnUtils::GetPerAxisParams()</a>, <a class="el" href="_convert_const_dequantisation_layers_to_const_layers_8hpp_source.xhtml#l00021">ConvertConstDequantisationLayersToConstLayersImpl::Run()</a>, <a class="el" href="_tensor_utils_8cpp_source.xhtml#l00289">armnnUtils::ToFloatArray()</a>, and <a class="el" href="_types_utils_8hpp_source.xhtml#l00355">VerifyTensorInfoDataType()</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="keywordflow">switch</span> (dataType)</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; <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="l00211"></a><span class="lineno"> 211</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="l00212"></a><span class="lineno"> 212</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="l00213"></a><span class="lineno"> 213</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="l00214"></a><span class="lineno"> 214</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="l00215"></a><span class="lineno"> 215</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="l00216"></a><span class="lineno"> 216</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="l00217"></a><span class="lineno"> 217</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="l00218"></a><span class="lineno"> 218</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="l00219"></a><span class="lineno"> 219</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="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">default</span>:</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Unknown&quot;</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;}</div></div><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.xhtml#l00608">AttemptBackendAssignment()</a>, <a class="el" href="_ref_transpose_workload_8hpp_source.xhtml#l00019">RefTransposeWorkload&lt; DataType &gt;::GetName()</a>, <a class="el" href="_ref_permute_workload_8hpp_source.xhtml#l00019">RefPermuteWorkload&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#l00221">armnnUtils::GetPerAxisParams()</a>, <a class="el" href="_tensor_utils_8cpp_source.xhtml#l00289">armnnUtils::ToFloatArray()</a>, and <a class="el" href="_types_utils_8hpp_source.xhtml#l00355">VerifyTensorInfoDataType()</a>.</p>
+
</div>
</div>
<a id="aa02b9e06fb20fa3c13da0427e6ee5ab2"></a>
@@ -15786,6 +20605,9 @@ Variables</h2></td></tr>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr unsigned int armnn::GetDataTypeSize </td>
@@ -15795,14 +20617,35 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
+ </tr>
+</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00155">155</a> of file <a class="el" href="_types_utils_8hpp_source.xhtml">TypesUtils.hpp</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">switch</span> (dataType)</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> DataType::BFloat16:</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keywordflow">case</span> DataType::Float16: <span class="keywordflow">return</span> 2U;</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="keywordflow">case</span> DataType::Float32:</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keywordflow">case</span> DataType::Signed32: <span class="keywordflow">return</span> 4U;</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keywordflow">case</span> DataType::Signed64: <span class="keywordflow">return</span> 8U;</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmU8: <span class="keywordflow">return</span> 1U;</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmS8: <span class="keywordflow">return</span> 1U;</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS8: <span class="keywordflow">return</span> 1U;</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS16: <span class="keywordflow">return</span> 2U;</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordflow">case</span> DataType::Boolean: <span class="keywordflow">return</span> 1U;</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">return</span> 0U;</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;}</div>
+</div><!-- fragment -->
<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="_ref_tensor_handle_8cpp_source.xhtml#l00128">RefTensorHandle::CanBeImported()</a>, <a class="el" href="_tosa_ref_tensor_handle_8cpp_source.xhtml#l00158">TosaRefTensorHandle::CanBeImported()</a>, <a class="el" href="_converter_8cpp_source.xhtml#l00021">Converter::ConvertOperation()</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#l00914">IDeserializer::DeserializerImpl::GetNetworkOutputBindingInfo()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00427">TensorInfo::GetNumBytes()</a>, <a class="el" href="_tensor_handle_8cpp_source.xhtml#l00015">GetUnpaddedTensorStrides()</a>, <a class="el" href="_workload_utils_8cpp_source.xhtml#l00018">PermuteTensor()</a>, <a class="el" href="_convert_const_permute_layers_to_const_layers_8hpp_source.xhtml#l00020">ConvertConstPermuteLayersToConstLayers::Run()</a>, <a class="el" href="_convert_const_dequantisation_layers_to_const_layers_8hpp_source.xhtml#l00021">ConvertConstDequantisationLayersToConstLayersImpl::Run()</a>, and <a class="el" href="_canonical_utils_8cpp_source.xhtml#l00040">armnn_driver::SwizzleAndroidNn4dTensorToArmNn()</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">switch</span> (dataType)</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> DataType::BFloat16:</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keywordflow">case</span> DataType::Float16: <span class="keywordflow">return</span> 2U;</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="keywordflow">case</span> DataType::Float32:</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keywordflow">case</span> DataType::Signed32: <span class="keywordflow">return</span> 4U;</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keywordflow">case</span> DataType::Signed64: <span class="keywordflow">return</span> 8U;</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmU8: <span class="keywordflow">return</span> 1U;</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmS8: <span class="keywordflow">return</span> 1U;</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS8: <span class="keywordflow">return</span> 1U;</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS16: <span class="keywordflow">return</span> 2U;</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordflow">case</span> DataType::Boolean: <span class="keywordflow">return</span> 1U;</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">return</span> 0U;</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;}</div></div><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_ref_tensor_handle_8cpp_source.xhtml#l00128">RefTensorHandle::CanBeImported()</a>, <a class="el" href="_tosa_ref_tensor_handle_8cpp_source.xhtml#l00158">TosaRefTensorHandle::CanBeImported()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00427">TensorInfo::GetNumBytes()</a>, <a class="el" href="_tensor_handle_8cpp_source.xhtml#l00015">GetUnpaddedTensorStrides()</a>, <a class="el" href="_workload_utils_8cpp_source.xhtml#l00018">PermuteTensor()</a>, and <a class="el" href="_canonical_utils_8cpp_source.xhtml#l00040">armnn_driver::SwizzleAndroidNn4dTensorToArmNn()</a>.</p>
+
</div>
</div>
<a id="ab03dcfb3b4019d8f58a67c41681951ae"></a>
@@ -15822,9 +20665,10 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<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>
@@ -15844,7 +20688,8 @@ Variables</h2></td></tr>
</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 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>
@@ -15864,12 +20709,12 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_test_utils_8cpp_source.xhtml#l00049">49</a> of file <a class="el" href="_test_utils_8cpp_source.xhtml">TestUtils.cpp</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> optNet-&gt;<a class="code" href="classarmnn_1_1_i_optimized_network.xhtml#a374d52340ec8dc02a819acc20fb5aa92">pOptimizedNetworkImpl</a>-&gt;GetGraph();</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;}</div>
+</div><!-- fragment -->
<p class="reference">References <a class="el" href="_i_network_8hpp_source.xhtml#l00814">IOptimizedNetwork::pOptimizedNetworkImpl</a>.</p>
-<p class="reference">Referenced by <a class="el" href="_test_utils_8hpp_source.xhtml#l00034">CheckRelatedLayers()</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> optNet-&gt;<a class="code" href="classarmnn_1_1_i_optimized_network.xhtml#a374d52340ec8dc02a819acc20fb5aa92">pOptimizedNetworkImpl</a>-&gt;GetGraph();</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</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#l00814">INetwork.hpp:814</a></div></div>
-</div><!-- fragment -->
</div>
</div>
<a id="a6d9d90e2ace1cd49789835b0073196a3"></a>
@@ -15891,12 +20736,21 @@ Variables</h2></td></tr>
<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#l00023">23</a> of file <a class="el" href="_backend_helper_8cpp_source.xhtml">BackendHelper.cpp</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; BackendRegistry&amp; backendRegistry = <a class="code" href="namespacearmnn.xhtml#ac2807505b850738bc8a1991ce669dd47">armnn::BackendRegistryInstance</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">if</span> (!backendRegistry.IsBackendRegistered(backend))</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> LayerSupportHandle(<span class="keyword">nullptr</span>);</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; </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">auto</span> factoryFunc = backendRegistry.GetFactory(backend);</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">auto</span> backendObject = factoryFunc();</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordflow">return</span> LayerSupportHandle(backendObject-&gt;GetLayerSupport(), backend);</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;}</div>
+</div><!-- fragment -->
<p class="reference">References <a class="el" href="_backend_registry_8cpp_source.xhtml#l00015">BackendRegistryInstance()</a>, <a class="el" href="_backend_registry_8cpp_source.xhtml#l00057">BackendRegistry::GetFactory()</a>, and <a class="el" href="_backend_registry_8cpp_source.xhtml#l00052">BackendRegistry::IsBackendRegistered()</a>.</p>
-<p class="reference">Referenced by <a class="el" href="_backend_helper_8hpp_source.xhtml#l00035">LayerSupportHandle::LayerSupportHandle()</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; BackendRegistry&amp; backendRegistry = <a class="code" href="namespacearmnn.xhtml#ac2807505b850738bc8a1991ce669dd47">armnn::BackendRegistryInstance</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">if</span> (!backendRegistry.IsBackendRegistered(backend))</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> LayerSupportHandle(<span class="keyword">nullptr</span>);</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;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">auto</span> factoryFunc = backendRegistry.GetFactory(backend);</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">auto</span> backendObject = factoryFunc();</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordflow">return</span> LayerSupportHandle(backendObject-&gt;GetLayerSupport(), backend);</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</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#l00015">BackendRegistry.cpp:15</a></div></div>
-</div><!-- fragment -->
</div>
</div>
<a id="a9ef4b4b6c421b5fd4b62274e63d08f11"></a>
@@ -15926,7 +20780,17 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_loaded_network_8cpp_source.xhtml#l01392">1392</a> of file <a class="el" href="_loaded_network_8cpp_source.xhtml">LoadedNetwork.cpp</a>.</p>
-<div class="fragment"><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; <span class="keywordflow">for</span> (<span class="keyword">auto</span> inputTensorPair : inputTensors)</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; <a class="code" href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">LayerBindingId</a> <span class="keywordtype">id</span> = inputTensorPair.first;</div><div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160; <span class="keywordflow">if</span> (<span class="keywordtype">id</span> == layerId)</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="keywordflow">return</span> inputTensorPair.second;</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; }</div><div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Input does not exist.&quot;</span>);</div><div class="line"><a name="l01403"></a><span class="lineno"> 1403</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#l00290">Types.hpp:290</a></div></div>
+<div class="fragment"><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; <span class="keywordflow">for</span> (<span class="keyword">auto</span> inputTensorPair : inputTensors)</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; <a class="code" href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">LayerBindingId</a> <span class="keywordtype">id</span> = inputTensorPair.first;</div>
+<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160; <span class="keywordflow">if</span> (<span class="keywordtype">id</span> == layerId)</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="keywordflow">return</span> inputTensorPair.second;</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; }</div>
+<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Input does not exist.&quot;</span>);</div>
+<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
@@ -15957,10 +20821,13 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_workload_utils_8hpp_source.xhtml#l00036">36</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#l00173">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="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> ITensorHandle* tensorHandle = data.m_Inputs[idx];</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</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="l00040"></a><span class="lineno"> 40</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#l00048">Types.hpp:48</a></div></div>
+<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> ITensorHandle* tensorHandle = data.m_Inputs[idx];</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</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="l00040"></a><span class="lineno"> 40</span>&#160;}</div>
</div><!-- fragment -->
+<p class="reference">References <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml#a9afbc055a017adf1bc38ee137bca6e90">ITensorHandle::Map()</a>.</p>
+
</div>
</div>
<a id="ac44cb4d413a43342b120b2c4d047d648"></a>
@@ -15990,7 +20857,10 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_workload_utils_8hpp_source.xhtml#l00080">80</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="l00081"></a><span class="lineno"> 81</span>&#160;{</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">return</span> GetInputTensorData&lt;BFloat16&gt;(idx, data);</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;}</div></div><!-- fragment -->
+<div class="fragment"><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;{</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">return</span> GetInputTensorData&lt;BFloat16&gt;(idx, data);</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;}</div>
+</div><!-- fragment -->
</div>
</div>
<a id="a691846a9eee59b0cd5b22fb5f674e007"></a>
@@ -16020,7 +20890,10 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_workload_utils_8hpp_source.xhtml#l00056">56</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="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> GetInputTensorData&lt;float&gt;(idx, data);</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;}</div></div><!-- fragment -->
+<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; <span class="keywordflow">return</span> GetInputTensorData&lt;float&gt;(idx, data);</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;}</div>
+</div><!-- fragment -->
</div>
</div>
<a id="a084b0ce273bef78aa314bd97fc574b84"></a>
@@ -16050,7 +20923,10 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_workload_utils_8hpp_source.xhtml#l00068">68</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="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> GetInputTensorData&lt;Half&gt;(idx, data);</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;}</div></div><!-- fragment -->
+<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> GetInputTensorData&lt;Half&gt;(idx, data);</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;}</div>
+</div><!-- fragment -->
</div>
</div>
<a id="a2b8ec686784330e8f20e4444f1ed7e98"></a>
@@ -16078,12 +20954,18 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.xhtml#l00777">777</a> of file <a class="el" href="_network_8cpp_source.xhtml">Network.cpp</a>.</p>
-
+<div class="fragment"><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160;{</div>
+<div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> dataTypeIn = layer-&gt;GetNumInputSlots() == 0 ? DataType::Float32 :</div>
+<div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; layer-&gt;GetInputSlot(0).GetConnectedOutputSlot()-&gt;GetTensorInfo().GetDataType();</div>
+<div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> dataTypeOut = layer-&gt;GetNumOutputSlots() == 0 ? DataType::Float32 :</div>
+<div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; layer-&gt;GetOutputSlot(0).GetTensorInfo().GetDataType();</div>
+<div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; <span class="keywordflow">return</span> {dataTypeIn, dataTypeOut};</div>
+<div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160;}</div>
+</div><!-- fragment -->
<p class="reference">References <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#l00324">Layer::GetInputSlot()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00321">Layer::GetNumInputSlots()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00322">Layer::GetNumOutputSlots()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00326">Layer::GetOutputSlot()</a>, and <a class="el" href="_layer_8cpp_source.xhtml#l00092">OutputSlot::GetTensorInfo()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.xhtml#l00898">AssignBackends()</a>, and <a class="el" href="_network_8cpp_source.xhtml#l00788">AssignBackendsIConnectable()</a>.</p>
-<div class="fragment"><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160;{</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> dataTypeIn = layer-&gt;GetNumInputSlots() == 0 ? DataType::Float32 :</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; layer-&gt;GetInputSlot(0).GetConnectedOutputSlot()-&gt;GetTensorInfo().GetDataType();</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> dataTypeOut = layer-&gt;GetNumOutputSlots() == 0 ? DataType::Float32 :</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; layer-&gt;GetOutputSlot(0).GetTensorInfo().GetDataType();</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; <span class="keywordflow">return</span> {dataTypeIn, dataTypeOut};</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</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#l00048">Types.hpp:48</a></div></div>
-</div><!-- fragment -->
+
</div>
</div>
<a id="addb6b14dd1b632263ffe77430259a7c4"></a>
@@ -16103,13 +20985,22 @@ Variables</h2></td></tr>
</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>
-
+<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><!-- fragment -->
<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#l00388">LIST_OF_LAYER_TYPE</a>.</p>
<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.xhtml#l00608">AttemptBackendAssignment()</a>, <a class="el" href="_network_8cpp_source.xhtml#l00571">CheckScaleSetOnQuantizedType()</a>, <a class="el" href="_test_utils_8cpp_source.xhtml#l00014">Connect()</a>, <a class="el" href="_strategy_base_8hpp_source.xhtml#l00033">StrategyBase&lt; DefaultStrategy &gt;::ExecuteStrategy()</a>, <a class="el" href="_layer_8cpp_source.xhtml#l00397">Layer::InferOutputShapes()</a>, <a class="el" href="_graph_8cpp_source.xhtml#l00568">Graph::InferTensorInfos()</a>, <a class="el" href="_graph_8cpp_source.xhtml#l00063">Graph::Print()</a>, <a class="el" href="_network_8cpp_source.xhtml#l00556">ReturnWithError()</a>, <a class="el" href="_layer_8cpp_source.xhtml#l00505">Layer::SerializeLayerParameters()</a>, <a class="el" href="_graph_8cpp_source.xhtml#l00120">Graph::SerializeToDot()</a>, <a class="el" href="_elementwise_base_layer_8cpp_source.xhtml#l00061">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#l00545">Graph::VerifyConstantLayerSetTensorInfo()</a>, and <a class="el" href="_layer_8cpp_source.xhtml#l00378">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#l00388">Types.hpp:388</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>
@@ -16117,6 +21008,9 @@ Variables</h2></td></tr>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr char const* armnn::GetLogicalBinaryOperationAsCString </td>
@@ -16126,14 +21020,25 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
+ </tr>
+</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00091">91</a> of file <a class="el" href="_types_utils_8hpp_source.xhtml">TypesUtils.hpp</a>.</p>
-
+<div class="fragment"><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">switch</span> (operation)</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> LogicalBinaryOperation::LogicalAnd: <span class="keywordflow">return</span> <span class="stringliteral">&quot;LogicalAnd&quot;</span>;</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</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="l00097"></a><span class="lineno"> 97</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="l00098"></a><span class="lineno"> 98</span>&#160; }</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;}</div>
+</div><!-- fragment -->
<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="_converter_8cpp_source.xhtml#l00021">Converter::ConvertOperation()</a>, and <a class="el" href="_ref_logical_binary_workload_8cpp_source.xhtml#l00030">RefLogicalBinaryWorkload::ExecuteAsync()</a>.</p>
-<div class="fragment"><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">switch</span> (operation)</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> LogicalBinaryOperation::LogicalAnd: <span class="keywordflow">return</span> <span class="stringliteral">&quot;LogicalAnd&quot;</span>;</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</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="l00097"></a><span class="lineno"> 97</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="l00098"></a><span class="lineno"> 98</span>&#160; }</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;}</div></div><!-- fragment -->
</div>
</div>
<a id="aa0a94554d6ef64e32793b3d54b2563f0"></a>
@@ -16141,6 +21046,9 @@ Variables</h2></td></tr>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr const char* armnn::GetMemBlockStrategyTypeName </td>
@@ -16150,14 +21058,27 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
+ </tr>
+</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00268">268</a> of file <a class="el" href="_types_utils_8hpp_source.xhtml">TypesUtils.hpp</a>.</p>
-
+<div class="fragment"><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="keywordflow">switch</span> (memBlockStrategyType)</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="keywordflow">case</span> MemBlockStrategyType::SingleAxisPacking: <span class="keywordflow">return</span> <span class="stringliteral">&quot;SingleAxisPacking&quot;</span>;</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</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="l00274"></a><span class="lineno"> 274</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="l00275"></a><span class="lineno"> 275</span>&#160; }</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160;}</div>
+</div><!-- fragment -->
<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#l00323">RuntimeImpl::RuntimeImpl()</a>.</p>
-<div class="fragment"><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="keywordflow">switch</span> (memBlockStrategyType)</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="keywordflow">case</span> MemBlockStrategyType::SingleAxisPacking: <span class="keywordflow">return</span> <span class="stringliteral">&quot;SingleAxisPacking&quot;</span>;</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</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="l00274"></a><span class="lineno"> 274</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="l00275"></a><span class="lineno"> 275</span>&#160; }</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160;}</div></div><!-- fragment -->
+
</div>
</div>
<a id="a7c8192a429fc68220e4fc308062a02ba"></a>
@@ -16177,9 +21098,18 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<p class="reference">Referenced by <a class="el" href="_runtime_8cpp_source.xhtml#l00323">RuntimeImpl::RuntimeImpl()</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>
@@ -16198,7 +21128,16 @@ Variables</h2></td></tr>
</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>
-<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 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>
@@ -16218,12 +21157,12 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_test_utils_8cpp_source.xhtml#l00054">54</a> of file <a class="el" href="_test_utils_8cpp_source.xhtml">TestUtils.cpp</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="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="l00057"></a><span class="lineno"> 57</span>&#160;}</div>
+</div><!-- fragment -->
<p class="reference">References <a class="el" href="_i_network_8hpp_source.xhtml#l00814">IOptimizedNetwork::pOptimizedNetworkImpl</a>.</p>
-<p class="reference">Referenced by <a class="el" href="_test_utils_8hpp_source.xhtml#l00034">CheckRelatedLayers()</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="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="l00057"></a><span class="lineno"> 57</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#l00814">INetwork.hpp:814</a></div></div>
-</div><!-- fragment -->
</div>
</div>
<a id="aeadd602e128a2be97161345b48533417"></a>
@@ -16231,6 +21170,9 @@ Variables</h2></td></tr>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr const char* armnn::GetNormalizationAlgorithmChannelAsCString </td>
@@ -16240,14 +21182,27 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
+ </tr>
+</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00238">238</a> of file <a class="el" href="_types_utils_8hpp_source.xhtml">TypesUtils.hpp</a>.</p>
-
+<div class="fragment"><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="keywordflow">switch</span> (channel)</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; <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="l00243"></a><span class="lineno"> 243</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="l00244"></a><span class="lineno"> 244</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="l00245"></a><span class="lineno"> 245</span>&#160; }</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160;}</div>
+</div><!-- fragment -->
<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#l00253">StringifyLayerParameters&lt; NormalizationDescriptor &gt;::Serialize()</a>.</p>
-<div class="fragment"><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="keywordflow">switch</span> (channel)</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; <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="l00243"></a><span class="lineno"> 243</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="l00244"></a><span class="lineno"> 244</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="l00245"></a><span class="lineno"> 245</span>&#160; }</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160;}</div></div><!-- fragment -->
+
</div>
</div>
<a id="ad57460ea53cd0b519a3b3547eaf1db7c"></a>
@@ -16255,6 +21210,9 @@ Variables</h2></td></tr>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr const char* armnn::GetNormalizationAlgorithmMethodAsCString </td>
@@ -16264,14 +21222,27 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
+ </tr>
+</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00248">248</a> of file <a class="el" href="_types_utils_8hpp_source.xhtml">TypesUtils.hpp</a>.</p>
-
+<div class="fragment"><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; <span class="keywordflow">switch</span> (method)</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">case</span> NormalizationAlgorithmMethod::LocalBrightness: <span class="keywordflow">return</span> <span class="stringliteral">&quot;LocalBrightness&quot;</span>;</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</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="l00254"></a><span class="lineno"> 254</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="l00255"></a><span class="lineno"> 255</span>&#160; }</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;}</div>
+</div><!-- fragment -->
<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#l00253">StringifyLayerParameters&lt; NormalizationDescriptor &gt;::Serialize()</a>.</p>
-<div class="fragment"><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; <span class="keywordflow">switch</span> (method)</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">case</span> NormalizationAlgorithmMethod::LocalBrightness: <span class="keywordflow">return</span> <span class="stringliteral">&quot;LocalBrightness&quot;</span>;</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</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="l00254"></a><span class="lineno"> 254</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="l00255"></a><span class="lineno"> 255</span>&#160; }</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;}</div></div><!-- fragment -->
+
</div>
</div>
<a id="a3f8e72f86ecaf365978a993127ea5957"></a>
@@ -16291,9 +21262,17 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_fully_connected_workload_8cpp_source.xhtml#l00016">16</a> of file <a class="el" href="_ref_fully_connected_workload_8cpp_source.xhtml">RefFullyConnectedWorkload.cpp</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> numActivations = 1; <span class="comment">// Total number of activations in the input.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 1; i &lt; inputInfo.GetNumDimensions(); i++)</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; numActivations *= inputInfo.GetShape()[i];</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> numActivations;</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;}</div>
+</div><!-- fragment -->
<p class="reference">References <a class="el" href="_tensor_8hpp_source.xhtml#l00195">TensorInfo::GetNumDimensions()</a>, and <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</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> numActivations = 1; <span class="comment">// Total number of activations in the input.</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 1; i &lt; inputInfo.GetNumDimensions(); i++)</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; numActivations *= inputInfo.GetShape()[i];</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> numActivations;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;}</div></div><!-- fragment -->
+
</div>
</div>
<a id="ae266ee8bf362cbf8a88ab6e6b389791a"></a>
@@ -16315,12 +21294,21 @@ Variables</h2></td></tr>
<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#l00120">120</a> of file <a class="el" href="_backend_helper_8cpp_source.xhtml">BackendHelper.cpp</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; <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="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keywordflow">if</span> (backendRegistry.IsBackendRegistered(backend))</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="keyword">auto</span> factoryFunc = backendRegistry.GetFactory(backend);</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keyword">auto</span> backendObject = factoryFunc();</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordflow">return</span> backendObject-&gt;GetNumberOfCacheFiles();</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">return</span> 0;</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;}</div>
+</div><!-- fragment -->
<p class="reference">References <a class="el" href="_backend_registry_8cpp_source.xhtml#l00015">BackendRegistryInstance()</a>.</p>
-<p class="reference">Referenced by <a class="el" href="_armnn_driver_8hpp_source.xhtml#l00094">ArmnnDriver::getNumberOfCacheFilesNeeded()</a>, <a class="el" href="_backend_helper_8hpp_source.xhtml#l00035">LayerSupportHandle::LayerSupportHandle()</a>, <a class="el" href="_armnn_driver_impl_8cpp_source.xhtml#l00099">ArmnnDriverImpl::PrepareArmnnModel()</a>, and <a class="el" href="_armnn_driver_impl_8cpp_source.xhtml#l00338">ArmnnDriverImpl::PrepareArmnnModelFromCache()</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; <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="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keywordflow">if</span> (backendRegistry.IsBackendRegistered(backend))</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="keyword">auto</span> factoryFunc = backendRegistry.GetFactory(backend);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keyword">auto</span> backendObject = factoryFunc();</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordflow">return</span> backendObject-&gt;GetNumberOfCacheFiles();</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">return</span> 0;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</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#l00015">BackendRegistry.cpp:15</a></div></div>
-</div><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_armnn_driver_8hpp_source.xhtml#l00094">ArmnnDriver::getNumberOfCacheFilesNeeded()</a>, <a class="el" href="_armnn_driver_impl_8cpp_source.xhtml#l00099">ArmnnDriverImpl::PrepareArmnnModel()</a>, and <a class="el" href="_armnn_driver_impl_8cpp_source.xhtml#l00338">ArmnnDriverImpl::PrepareArmnnModelFromCache()</a>.</p>
+
</div>
</div>
<a id="aed508ea8d7b3ef4e171cb6f178acf086"></a>
@@ -16340,9 +21328,17 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_descriptors_8cpp_source.xhtml#l00428">428</a> of file <a class="el" href="_descriptors_8cpp_source.xhtml">Descriptors.cpp</a>.</p>
+<div class="fragment"><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; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numInputs = 2;</div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <span class="keywordflow">if</span> (biasEnabled)</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; {</div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; numInputs = 3;</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; }</div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <span class="keywordflow">return</span> numInputs;</div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160;}</div>
+</div><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_descriptors_8cpp_source.xhtml#l00448">FullyConnectedDescriptor::GetNumInputs()</a>, <a class="el" href="_descriptors_8cpp_source.xhtml#l00443">Convolution2dDescriptor::GetNumInputs()</a>, <a class="el" href="_descriptors_8cpp_source.xhtml#l00438">Convolution3dDescriptor::GetNumInputs()</a>, and <a class="el" href="_descriptors_8cpp_source.xhtml#l00453">DepthwiseConvolution2dDescriptor::GetNumInputs()</a>.</p>
-<p class="reference">Referenced by <a class="el" href="_descriptors_8cpp_source.xhtml#l00448">FullyConnectedDescriptor::GetNumInputs()</a>, <a class="el" href="_descriptors_8cpp_source.xhtml#l00443">Convolution2dDescriptor::GetNumInputs()</a>, <a class="el" href="_descriptors_8cpp_source.xhtml#l00438">Convolution3dDescriptor::GetNumInputs()</a>, <a class="el" href="_descriptors_8cpp_source.xhtml#l00453">DepthwiseConvolution2dDescriptor::GetNumInputs()</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00483">FullyConnectedDescriptor::operator==()</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00517">Convolution2dDescriptor::operator==()</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00575">Convolution3dDescriptor::operator==()</a>, and <a class="el" href="_descriptors_8hpp_source.xhtml#l00642">DepthwiseConvolution2dDescriptor::operator==()</a>.</p>
-<div class="fragment"><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; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numInputs = 2;</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <span class="keywordflow">if</span> (biasEnabled)</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; {</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; numInputs = 3;</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; }</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <span class="keywordflow">return</span> numInputs;</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160;}</div></div><!-- fragment -->
</div>
</div>
<a id="adafb0fd0a3f6435c2bdf41f971761ecf"></a>
@@ -16396,15 +21392,23 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_space_to_batch_nd_8cpp_source.xhtml#l00015">15</a> of file <a class="el" href="_space_to_batch_nd_8cpp_source.xhtml">SpaceToBatchNd.cpp</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><!-- fragment -->
<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>, and <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00025">DataLayoutIndexed::GetWidthIndex()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_space_to_batch_nd_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>
@@ -16412,6 +21416,9 @@ Variables</h2></td></tr>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr char const* armnn::GetOutputShapeRoundingAsCString </td>
@@ -16421,14 +21428,27 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
+ </tr>
+</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00112">112</a> of file <a class="el" href="_types_utils_8hpp_source.xhtml">TypesUtils.hpp</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">switch</span> (rounding)</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">case</span> OutputShapeRounding::Ceiling: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Ceiling&quot;</span>;</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</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="l00118"></a><span class="lineno"> 118</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="l00119"></a><span class="lineno"> 119</span>&#160; }</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;}</div>
+</div><!-- fragment -->
<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#l00321">StringifyLayerParameters&lt; Pooling2dDescriptor &gt;::Serialize()</a>, and <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00349">StringifyLayerParameters&lt; Pooling3dDescriptor &gt;::Serialize()</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">switch</span> (rounding)</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">case</span> OutputShapeRounding::Ceiling: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Ceiling&quot;</span>;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</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="l00118"></a><span class="lineno"> 118</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="l00119"></a><span class="lineno"> 119</span>&#160; }</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;}</div></div><!-- fragment -->
+
</div>
</div>
<a id="ac624e40d8096e61c73b246934f18afd0"></a>
@@ -16458,7 +21478,17 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_loaded_network_8cpp_source.xhtml#l01405">1405</a> of file <a class="el" href="_loaded_network_8cpp_source.xhtml">LoadedNetwork.cpp</a>.</p>
-<div class="fragment"><div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>&#160;{</div><div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> outputTensorPair : outputTensors)</div><div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>&#160; {</div><div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>&#160; <a class="code" href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">LayerBindingId</a> <span class="keywordtype">id</span> = outputTensorPair.first;</div><div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>&#160; <span class="keywordflow">if</span> (<span class="keywordtype">id</span> == layerId)</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">return</span> outputTensorPair.second;</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; }</div><div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Output does not exist.&quot;</span>);</div><div class="line"><a name="l01416"></a><span class="lineno"> 1416</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#l00290">Types.hpp:290</a></div></div>
+<div class="fragment"><div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>&#160;{</div>
+<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> outputTensorPair : outputTensors)</div>
+<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>&#160; {</div>
+<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>&#160; <a class="code" href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">LayerBindingId</a> <span class="keywordtype">id</span> = outputTensorPair.first;</div>
+<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>&#160; <span class="keywordflow">if</span> (<span class="keywordtype">id</span> == layerId)</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">return</span> outputTensorPair.second;</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; }</div>
+<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Output does not exist.&quot;</span>);</div>
+<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
@@ -16479,10 +21509,12 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_workload_utils_8hpp_source.xhtml#l00050">50</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="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> <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="l00053"></a><span class="lineno"> 53</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#l00048">Types.hpp:48</a></div></div>
+<div class="fragment"><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> <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="l00053"></a><span class="lineno"> 53</span>&#160;}</div>
</div><!-- fragment -->
+<p class="reference">References <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml#a9afbc055a017adf1bc38ee137bca6e90">ITensorHandle::Map()</a>.</p>
+
</div>
</div>
<a id="ae9f37e0b5f15afd89a29788a319da9ec"></a>
@@ -16512,12 +21544,13 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_workload_utils_8hpp_source.xhtml#l00173">173</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="l00174"></a><span class="lineno"> 174</span>&#160;{</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; ITensorHandle* tensorHandle = data.m_Outputs[idx];</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</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="l00177"></a><span class="lineno"> 177</span>&#160;}</div>
+</div><!-- fragment -->
<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#l00036">GetInputTensorData()</a>, and <a class="el" href="_neon_workload_utils_8hpp_source.xhtml#l00153">SetNeonSliceData()</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; ITensorHandle* tensorHandle = data.m_Outputs[idx];</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</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="l00177"></a><span class="lineno"> 177</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#l00048">Types.hpp:48</a></div></div>
-</div><!-- fragment -->
</div>
</div>
<a id="a85ace5e5f41a093622a8c04150d24c60"></a>
@@ -16547,7 +21580,10 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_workload_utils_8hpp_source.xhtml#l00086">86</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="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> GetOutputTensorData&lt;BFloat16&gt;(idx, data);</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;}</div></div><!-- fragment -->
+<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">return</span> GetOutputTensorData&lt;BFloat16&gt;(idx, data);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;}</div>
+</div><!-- fragment -->
</div>
</div>
<a id="ab5f0afc1e37fd100843ecd55d8f284c1"></a>
@@ -16577,7 +21613,10 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_workload_utils_8hpp_source.xhtml#l00062">62</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="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> GetOutputTensorData&lt;float&gt;(idx, data);</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;}</div></div><!-- fragment -->
+<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; <span class="keywordflow">return</span> GetOutputTensorData&lt;float&gt;(idx, data);</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;}</div>
+</div><!-- fragment -->
</div>
</div>
<a id="ab98e77207c3d676b0b9ffa67357dbc6a"></a>
@@ -16607,7 +21646,10 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_ref_workload_utils_8hpp_source.xhtml#l00074">74</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="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">return</span> GetOutputTensorData&lt;Half&gt;(idx, data);</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;}</div></div><!-- fragment -->
+<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; <span class="keywordflow">return</span> GetOutputTensorData&lt;Half&gt;(idx, data);</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;}</div>
+</div><!-- fragment -->
</div>
</div>
<a id="a129bde68152f5892e6abdedcb62aa983"></a>
@@ -16615,6 +21657,9 @@ Variables</h2></td></tr>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr char const* armnn::GetPaddingMethodAsCString </td>
@@ -16624,14 +21669,27 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
+ </tr>
+</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00122">122</a> of file <a class="el" href="_types_utils_8hpp_source.xhtml">TypesUtils.hpp</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; <span class="keywordflow">switch</span> (method)</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> PaddingMethod::Exclude: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Exclude&quot;</span>;</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</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="l00128"></a><span class="lineno"> 128</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="l00129"></a><span class="lineno"> 129</span>&#160; }</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;}</div>
+</div><!-- fragment -->
<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#l00321">StringifyLayerParameters&lt; Pooling2dDescriptor &gt;::Serialize()</a>, and <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00349">StringifyLayerParameters&lt; Pooling3dDescriptor &gt;::Serialize()</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; <span class="keywordflow">switch</span> (method)</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> PaddingMethod::Exclude: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Exclude&quot;</span>;</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</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="l00128"></a><span class="lineno"> 128</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="l00129"></a><span class="lineno"> 129</span>&#160; }</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;}</div></div><!-- fragment -->
+
</div>
</div>
<a id="adb4d7f45aaa839541a90821a21d69c82"></a>
@@ -16639,6 +21697,9 @@ Variables</h2></td></tr>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr char const* armnn::GetPaddingModeAsCString </td>
@@ -16648,14 +21709,28 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
+ </tr>
+</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00132">132</a> of file <a class="el" href="_types_utils_8hpp_source.xhtml">TypesUtils.hpp</a>.</p>
-
+<div class="fragment"><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">switch</span> (mode)</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">case</span> PaddingMode::Constant: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Exclude&quot;</span>;</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</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="l00138"></a><span class="lineno"> 138</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="l00139"></a><span class="lineno"> 139</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="l00140"></a><span class="lineno"> 140</span>&#160; }</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;}</div>
+</div><!-- fragment -->
<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#l00294">StringifyLayerParameters&lt; PadDescriptor &gt;::Serialize()</a>.</p>
-<div class="fragment"><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">switch</span> (mode)</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">case</span> PaddingMode::Constant: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Exclude&quot;</span>;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</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="l00138"></a><span class="lineno"> 138</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="l00139"></a><span class="lineno"> 139</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="l00140"></a><span class="lineno"> 140</span>&#160; }</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;}</div></div><!-- fragment -->
+
</div>
</div>
<a id="a517314c21ac5309b90408da162212f9d"></a>
@@ -16663,6 +21738,9 @@ Variables</h2></td></tr>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr char const* armnn::GetPoolingAlgorithmAsCString </td>
@@ -16672,14 +21750,28 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
+ </tr>
+</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00101">101</a> of file <a class="el" href="_types_utils_8hpp_source.xhtml">TypesUtils.hpp</a>.</p>
-
+<div class="fragment"><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">switch</span> (pooling)</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">case</span> PoolingAlgorithm::Average: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Average&quot;</span>;</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</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="l00107"></a><span class="lineno"> 107</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="l00108"></a><span class="lineno"> 108</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="l00109"></a><span class="lineno"> 109</span>&#160; }</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;}</div>
+</div><!-- fragment -->
<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#l00321">StringifyLayerParameters&lt; Pooling2dDescriptor &gt;::Serialize()</a>, and <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00349">StringifyLayerParameters&lt; Pooling3dDescriptor &gt;::Serialize()</a>.</p>
-<div class="fragment"><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">switch</span> (pooling)</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">case</span> PoolingAlgorithm::Average: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Average&quot;</span>;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</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="l00107"></a><span class="lineno"> 107</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="l00108"></a><span class="lineno"> 108</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="l00109"></a><span class="lineno"> 109</span>&#160; }</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;}</div></div><!-- fragment -->
+
</div>
</div>
<a id="a292c96e5bbde0ca0242b1138bea6195d"></a>
@@ -16699,9 +21791,10 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_test_utils_8cpp_source.xhtml#l00059">59</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="_test_utils_8hpp_source.xhtml#l00034">CheckRelatedLayers()</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> *(runtime-&gt;m_ProfilingService.get());</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;}</div></div><!-- fragment -->
+<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> *(runtime-&gt;m_ProfilingService.get());</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;}</div>
+</div><!-- fragment -->
</div>
</div>
<a id="a3c1f8116bfc753b5a72ae00d9f92a595"></a>
@@ -16709,6 +21802,9 @@ Variables</h2></td></tr>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr char const* armnn::GetReduceOperationAsCString </td>
@@ -16718,14 +21814,30 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
+ </tr>
+</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00143">143</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>
+<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">switch</span> (reduce_operation)</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> ReduceOperation::Sum: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Sum&quot;</span>;</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</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="l00149"></a><span class="lineno"> 149</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="l00150"></a><span class="lineno"> 150</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="l00151"></a><span class="lineno"> 151</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="l00152"></a><span class="lineno"> 152</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="l00153"></a><span class="lineno"> 153</span>&#160; }</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;}</div>
+</div><!-- fragment -->
+<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#abc05539fc6e7907f32ef0fb242e3b3b0a78d811e98514cd165dda532286610fd2">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#l00398">StringifyLayerParameters&lt; ReduceDescriptor &gt;::Serialize()</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">switch</span> (reduce_operation)</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> ReduceOperation::Sum: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Sum&quot;</span>;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</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="l00149"></a><span class="lineno"> 149</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="l00150"></a><span class="lineno"> 150</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="l00151"></a><span class="lineno"> 151</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="l00152"></a><span class="lineno"> 152</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="l00153"></a><span class="lineno"> 153</span>&#160; }</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;}</div></div><!-- fragment -->
+
</div>
</div>
<a id="aded981a42027bd3302b9c0f09d988659"></a>
@@ -16733,6 +21845,9 @@ Variables</h2></td></tr>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr const char* armnn::GetResizeMethodAsCString </td>
@@ -16742,14 +21857,27 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
+ </tr>
+</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00258">258</a> of file <a class="el" href="_types_utils_8hpp_source.xhtml">TypesUtils.hpp</a>.</p>
-
+<div class="fragment"><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">switch</span> (method)</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; {</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keywordflow">case</span> ResizeMethod::Bilinear: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Bilinear&quot;</span>;</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</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="l00264"></a><span class="lineno"> 264</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="l00265"></a><span class="lineno"> 265</span>&#160; }</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;}</div>
+</div><!-- fragment -->
<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="_converter_8cpp_source.xhtml#l00021">Converter::ConvertOperation()</a>, and <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00426">StringifyLayerParameters&lt; ResizeDescriptor &gt;::Serialize()</a>.</p>
-<div class="fragment"><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">switch</span> (method)</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; {</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keywordflow">case</span> ResizeMethod::Bilinear: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Bilinear&quot;</span>;</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</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="l00264"></a><span class="lineno"> 264</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="l00265"></a><span class="lineno"> 265</span>&#160; }</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;}</div></div><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00426">StringifyLayerParameters&lt; ResizeDescriptor &gt;::Serialize()</a>.</p>
+
</div>
</div>
<a id="ab4c4804c2b7c7b4b25a8eca3272e12d4"></a>
@@ -16777,7 +21905,10 @@ Variables</h2></td></tr>
</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 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>
@@ -16785,6 +21916,9 @@ Variables</h2></td></tr>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr char const* armnn::GetStatusAsCString </td>
@@ -16794,16 +21928,27 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
+ </tr>
+</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00021">21</a> of file <a class="el" href="_types_utils_8hpp_source.xhtml">TypesUtils.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; <span class="keywordflow">switch</span> (status)</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#a67a0db04d321a74b7e7fcfd3f1a3f70ba505a83f220c02df2f85c3810cd9ceb38">armnn::Status::Success</a>: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Status::Success&quot;</span>;</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#a67a0db04d321a74b7e7fcfd3f1a3f70bae139a585510a502bbf1841cf589f5086">armnn::Status::Failure</a>: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Status::Failure&quot;</span>;</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</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="l00028"></a><span class="lineno"> 28</span>&#160; }</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;}</div>
+</div><!-- fragment -->
<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#l00301">operator&lt;&lt;()</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> (status)</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#a67a0db04d321a74b7e7fcfd3f1a3f70ba505a83f220c02df2f85c3810cd9ceb38">armnn::Status::Success</a>: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Status::Success&quot;</span>;</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#a67a0db04d321a74b7e7fcfd3f1a3f70bae139a585510a502bbf1841cf589f5086">armnn::Status::Failure</a>: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Status::Failure&quot;</span>;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</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="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="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="aa815fde54f6d8e8aa5b4f0301cf4178b"></a>
@@ -16833,9 +21978,15 @@ Variables</h2></td></tr>
<p>float32 helpers </p>
<p class="definition">Definition at line <a class="el" href="_ref_workload_utils_8hpp_source.xhtml#l00027">27</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="l00028"></a><span class="lineno"> 28</span>&#160;{</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="comment">// We know that reference workloads use RefTensorHandles for inputs and outputs</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keyword">const</span> TensorHandleType* refTensorHandle =</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; PolymorphicDowncast&lt;const TensorHandleType*&gt;(tensorHandle);</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordflow">return</span> refTensorHandle-&gt;GetTensorInfo();</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;}</div>
+</div><!-- fragment -->
+<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="_splitter_8cpp_source.xhtml#l00021">Split()</a>, <a class="el" href="_splitter_8hpp_source.xhtml#l00017">Splitter()</a>, <a class="el" href="_fill_layer_8cpp_source.xhtml#l00034">FillLayer::ValidateTensorShapesFromInputs()</a>, <a class="el" href="_switch_layer_8cpp_source.xhtml#l00032">SwitchLayer::ValidateTensorShapesFromInputs()</a>, <a class="el" href="_constant_layer_8cpp_source.xhtml#l00045">ConstantLayer::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="_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>
-<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_gather_nd_workload_8cpp_source.xhtml#l00021">RefGatherNdWorkload::ExecuteAsync()</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_fake_quantization_float32_workload_8cpp_source.xhtml#l00034">RefFakeQuantizationFloat32Workload::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_channel_shuffle_workload_8cpp_source.xhtml#l00021">RefChannelShuffleWorkload::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_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_space_to_depth_workload_8cpp_source.xhtml#l00020">RefSpaceToDepthWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_stack_workload_8cpp_source.xhtml#l00026">RefStackWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_batch_to_space_nd_workload_8cpp_source.xhtml#l00019">RefBatchToSpaceNdWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_instance_normalization_workload_8cpp_source.xhtml#l00026">RefInstanceNormalizationWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_slice_workload_8cpp_source.xhtml#l00021">RefSliceWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_detection_post_process_workload_8cpp_source.xhtml#l00026">RefDetectionPostProcessWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_prelu_workload_8cpp_source.xhtml#l00026">RefPreluWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_arg_min_max_workload_8cpp_source.xhtml#l00027">RefArgMinMaxWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_quantize_workload_8cpp_source.xhtml#l00042">RefQuantizeWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_depthwise_convolution2d_workload_8cpp_source.xhtml#l00044">RefDepthwiseConvolution2dWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_batch_normalization_workload_8cpp_source.xhtml#l00030">RefBatchNormalizationWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_dequantize_workload_8cpp_source.xhtml#l00020">RefDequantizeWorkload::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_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_reduce_workload_8cpp_source.xhtml#l00027">RefReduceWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_q_lstm_workload_8cpp_source.xhtml#l00051">RefQLstmWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_batch_mat_mul_workload_8cpp_source.xhtml#l00024">RefBatchMatMulWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_convolution3d_workload_8cpp_source.xhtml#l00040">RefConvolution3dWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_logical_binary_workload_8cpp_source.xhtml#l00030">RefLogicalBinaryWorkload::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_convolution2d_workload_8cpp_source.xhtml#l00038">RefConvolution2dWorkload::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_gather_workload_8cpp_source.xhtml#l00021">RefGatherWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_comparison_workload_8cpp_source.xhtml#l00050">RefComparisonWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_transpose_convolution2d_workload_8cpp_source.xhtml#l00041">RefTransposeConvolution2dWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_fully_connected_workload_8cpp_source.xhtml#l00042">RefFullyConnectedWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_rank_workload_8hpp_source.xhtml#l00025">RefRankWorkload::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_unidirectional_sequence_lstm_workload_8cpp_source.xhtml#l00051">RefUnidirectionalSequenceLstmWorkload::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_debug_workload_8cpp_source.xhtml#l00024">RefDebugWorkload&lt; DataType &gt;::ExecuteAsync()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00145">OutputSlot::GetNumConnections()</a>, <a class="el" href="_layer_8cpp_source.xhtml#l00145">OutputSlot::MoveAllConnections()</a>, <a class="el" href="_ref_comparison_workload_8cpp_source.xhtml#l00027">RefComparisonWorkload::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="l00028"></a><span class="lineno"> 28</span>&#160;{</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="comment">// We know that reference workloads use RefTensorHandles for inputs and outputs</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keyword">const</span> TensorHandleType* refTensorHandle =</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; PolymorphicDowncast&lt;const TensorHandleType*&gt;(tensorHandle);</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordflow">return</span> refTensorHandle-&gt;GetTensorInfo();</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;}</div></div><!-- fragment -->
</div>
</div>
<a id="a441621f00fd5665898c81a5ae3473c6b"></a>
@@ -16863,12 +22014,14 @@ Variables</h2></td></tr>
</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>
-
+<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><!-- fragment -->
<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="_runtime_8cpp_source.xhtml#l00644">RuntimeImpl::EnqueueWorkload()</a>, <a class="el" href="_runtime_8cpp_source.xhtml#l00696">RuntimeImpl::Execute()</a>, <a class="el" href="_runtime_8cpp_source.xhtml#l00323">RuntimeImpl::RuntimeImpl()</a>, and <a class="el" href="_runtime_8cpp_source.xhtml#l00548">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 -->
+<p class="reference">Referenced by <a class="el" href="_runtime_8cpp_source.xhtml#l00644">RuntimeImpl::EnqueueWorkload()</a>, <a class="el" href="_runtime_8cpp_source.xhtml#l00696">RuntimeImpl::Execute()</a>, and <a class="el" href="_runtime_8cpp_source.xhtml#l00548">RuntimeImpl::~RuntimeImpl()</a>.</p>
+
</div>
</div>
<a id="ac895f6f6897ce335b7b433201bae0b48"></a>
@@ -16895,9 +22048,12 @@ Variables</h2></td></tr>
</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>
+<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 -->
+<p class="reference">Referenced by <a class="el" href="_runtime_8cpp_source.xhtml#l00644">RuntimeImpl::EnqueueWorkload()</a>, <a class="el" href="_runtime_8cpp_source.xhtml#l00696">RuntimeImpl::Execute()</a>, <a class="el" href="_timer_8hpp_source.xhtml#l00019">GetTimeDuration()</a>, <a class="el" href="_runtime_8cpp_source.xhtml#l00323">RuntimeImpl::RuntimeImpl()</a>, and <a class="el" href="_runtime_8cpp_source.xhtml#l00548">RuntimeImpl::~RuntimeImpl()</a>.</p>
-<p class="reference">Referenced by <a class="el" href="_runtime_8cpp_source.xhtml#l00644">RuntimeImpl::EnqueueWorkload()</a>, <a class="el" href="_runtime_8cpp_source.xhtml#l00696">RuntimeImpl::Execute()</a>, <a class="el" href="_timer_8hpp_source.xhtml#l00019">GetTimeDuration()</a>, <a class="el" href="_runtime_8cpp_source.xhtml#l00323">RuntimeImpl::RuntimeImpl()</a>, <a class="el" href="_threadpool_8cpp_source.xhtml#l00102">Threadpool::TerminateThreadPool()</a>, and <a class="el" href="_runtime_8cpp_source.xhtml#l00548">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>
@@ -16905,6 +22061,9 @@ Variables</h2></td></tr>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr char const* armnn::GetUnaryOperationAsCString </td>
@@ -16914,14 +22073,33 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
+ </tr>
+</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00075">75</a> of file <a class="el" href="_types_utils_8hpp_source.xhtml">TypesUtils.hpp</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; <span class="keywordflow">switch</span> (operation)</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">case</span> UnaryOperation::Abs: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Abs&quot;</span>;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</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="l00081"></a><span class="lineno"> 81</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="l00082"></a><span class="lineno"> 82</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="l00083"></a><span class="lineno"> 83</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="l00084"></a><span class="lineno"> 84</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="l00085"></a><span class="lineno"> 85</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="l00086"></a><span class="lineno"> 86</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="l00087"></a><span class="lineno"> 87</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="l00088"></a><span class="lineno"> 88</span>&#160; }</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;}</div>
+</div><!-- fragment -->
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8a1e34af023adeb7d5f484f8eb4b9826b6">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#a1cfaa710db2a54673b21d2ea2da757c8aae77f3ad25595e35b327334d89410054">Sqrt</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="_serialize_layer_parameters_8cpp_source.xhtml#l00190">StringifyLayerParameters&lt; ElementwiseUnaryDescriptor &gt;::Serialize()</a>.</p>
-<p class="reference">Referenced by <a class="el" href="_tf_lite_parser_8cpp_source.xhtml#l03957">armnnTfLiteParser::ComputeWrappedIndex()</a>, <a class="el" href="_converter_8cpp_source.xhtml#l00021">Converter::ConvertOperation()</a>, <a class="el" href="_ref_elementwise_unary_workload_8cpp_source.xhtml#l00038">RefElementwiseUnaryWorkload::ExecuteAsync()</a>, <a class="el" href="_ref_logical_unary_workload_8cpp_source.xhtml#l00030">RefLogicalUnaryWorkload::ExecuteAsync()</a>, and <a class="el" href="_serialize_layer_parameters_8cpp_source.xhtml#l00190">StringifyLayerParameters&lt; ElementwiseUnaryDescriptor &gt;::Serialize()</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; <span class="keywordflow">switch</span> (operation)</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">case</span> UnaryOperation::Abs: <span class="keywordflow">return</span> <span class="stringliteral">&quot;Abs&quot;</span>;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</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="l00081"></a><span class="lineno"> 81</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="l00082"></a><span class="lineno"> 82</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="l00083"></a><span class="lineno"> 83</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="l00084"></a><span class="lineno"> 84</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="l00085"></a><span class="lineno"> 85</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="l00086"></a><span class="lineno"> 86</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="l00087"></a><span class="lineno"> 87</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="l00088"></a><span class="lineno"> 88</span>&#160; }</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;}</div></div><!-- fragment -->
</div>
</div>
<a id="a36e8f52330a21eeab3cc7c4e030f3583"></a>
@@ -16941,12 +22119,25 @@ Variables</h2></td></tr>
</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#l00155">GetDataTypeSize()</a>, and <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</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><!-- fragment -->
+<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#l00155">GetDataTypeSize()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00174">TensorShape::GetNumDimensions()</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_tensor_handle_8hpp_source.xhtml#l00039">RefTensorHandle::GetStrides()</a>, <a class="el" href="_sample_tensor_handle_8hpp_source.xhtml#l00039">SampleTensorHandle::GetStrides()</a>, <a class="el" href="_tosa_ref_tensor_handle_8hpp_source.xhtml#l00039">TosaRefTensorHandle::GetStrides()</a>, and <a class="el" href="_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#l00155">TypesUtils.hpp:155</a></div></div>
-</div><!-- fragment -->
+
</div>
</div>
<a id="aa09a8bb02eed50715082d8b7fccd2f8d"></a>
@@ -16965,14 +22156,16 @@ Variables</h2></td></tr>
</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 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><!-- fragment -->
+<p class="reference">References <a class="el" href="include_2armnn_2_version_8hpp_source.xhtml#l00022">ARMNN_VERSION</a>.</p>
+
</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>
+<a id="a78fe085e22e9822075ad791aa5cc34d5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a78fe085e22e9822075ad791aa5cc34d5">&#9670;&nbsp;</a></span>HasCapability() <span class="overload">[1/4]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -16980,14 +22173,14 @@ Variables</h2></td></tr>
<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>
+ <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="namespacearmnn.xhtml#aa9c506b558b8aa33a228b15164f40dc3">BackendCapabilities</a> &amp;&#160;</td>
- <td class="paramname"><em>capabilities</em>&#160;</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>
@@ -16997,19 +22190,27 @@ Variables</h2></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#l00065">65</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#l00037">GetCapability()</a>.</p>
+<p>Convenience function to check if a given capability matches a capability in a backend. </p>
-<p class="reference">Referenced by <a class="el" href="_backend_helper_8cpp_source.xhtml#l00107">HasCapability()</a>, <a class="el" href="_loaded_network_8cpp_source.xhtml#l01418">LoadedNetwork::ImportInputs()</a>, <a class="el" href="_loaded_network_8cpp_source.xhtml#l01560">LoadedNetwork::ImportOutputs()</a>, <a class="el" href="_backend_helper_8hpp_source.xhtml#l00035">LayerSupportHandle::LayerSupportHandle()</a>, <a class="el" href="_loaded_network_8cpp_source.xhtml#l00170">LoadedNetwork::MakeLoadedNetwork()</a>, and <a class="el" href="_runtime_8cpp_source.xhtml#l00323">RuntimeImpl::RuntimeImpl()</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; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a71c3bdadfe1c69aba2cbf054bff47744">GetCapability</a>(name, capabilities).has_value();</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</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#l00037">BackendHelper.cpp:37</a></div></div>
+<p class="definition">Definition at line <a class="el" href="_backend_helper_8cpp_source.xhtml#l00107">107</a> of file <a class="el" href="_backend_helper_8cpp_source.xhtml">BackendHelper.cpp</a>.</p>
+<div class="fragment"><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">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="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordflow">if</span> (backendRegistry.IsBackendRegistered(backend))</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">auto</span> factoryFunc = backendRegistry.GetFactory(backend);</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keyword">auto</span> backendObject = factoryFunc();</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keyword">auto</span> capabilities = backendObject-&gt;GetCapabilities();</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#abd839f0f103c1ae19a4b38d59b869108">HasCapability</a>(backendOption, capabilities);</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">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;}</div>
</div><!-- fragment -->
+<p class="reference">References <a class="el" href="_backend_registry_8cpp_source.xhtml#l00015">BackendRegistryInstance()</a>, and <a class="el" href="_backend_helper_8cpp_source.xhtml#l00065">HasCapability()</a>.</p>
+
</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>
+<a id="ae702febbc6139e20b2b8c4f03ff89b01"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae702febbc6139e20b2b8c4f03ff89b01">&#9670;&nbsp;</a></span>HasCapability() <span class="overload">[2/4]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -17017,14 +22218,14 @@ Variables</h2></td></tr>
<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>
+ <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="classarmnn_1_1_backend_id.xhtml">armnn::BackendId</a> &amp;&#160;</td>
- <td class="paramname"><em>backend</em>&#160;</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>
@@ -17034,17 +22235,46 @@ Variables</h2></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#l00070">70</a> of file <a class="el" href="_backend_helper_8cpp_source.xhtml">BackendHelper.cpp</a>.</p>
+<p>Convenience function to check if a given capability matches a capability in a BackendCapabilities struct. </p>
-<p class="reference">References <a class="el" href="_backend_helper_8cpp_source.xhtml#l00037">GetCapability()</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; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a71c3bdadfe1c69aba2cbf054bff47744">GetCapability</a>(name, backend).has_value();</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</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#l00037">BackendHelper.cpp:37</a></div></div>
+<p class="definition">Definition at line <a class="el" href="_backend_helper_8cpp_source.xhtml#l00075">75</a> of file <a class="el" href="_backend_helper_8cpp_source.xhtml">BackendHelper.cpp</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; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i=0; i &lt; capabilities.GetOptionCount(); 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="keyword">auto</span>&amp; backendCapability = capabilities.GetOption(i);</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">if</span> (capability.GetName() == backendCapability.GetName())</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> (capability.GetValue().IsBool() &amp;&amp; backendCapability.GetValue().IsBool())</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; {</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">return</span> capability.GetValue().AsBool() == backendCapability.GetValue().AsBool();</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">else</span> <span class="keywordflow">if</span> (capability.GetValue().IsFloat() &amp;&amp; backendCapability.GetValue().IsFloat())</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> capability.GetValue().AsFloat() == backendCapability.GetValue().AsFloat();</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> <span class="keywordflow">if</span> (capability.GetValue().IsInt() &amp;&amp; backendCapability.GetValue().IsInt())</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">return</span> capability.GetValue().AsInt() == backendCapability.GetValue().AsInt();</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">else</span> <span class="keywordflow">if</span> (capability.GetValue().IsString() &amp;&amp; backendCapability.GetValue().IsString())</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> capability.GetValue().AsString() == backendCapability.GetValue().AsString();</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">else</span> <span class="keywordflow">if</span> (capability.GetValue().IsUnsignedInt() &amp;&amp; backendCapability.GetValue().IsUnsignedInt())</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="keywordflow">return</span> capability.GetValue().AsUnsignedInt() == backendCapability.GetValue().AsUnsignedInt();</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; }</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;}</div>
</div><!-- fragment -->
+<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>
</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>
+<a id="a8439e8b224a1fb7abdf449c8e6775469"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8439e8b224a1fb7abdf449c8e6775469">&#9670;&nbsp;</a></span>HasCapability() <span class="overload">[3/4]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -17052,14 +22282,14 @@ Variables</h2></td></tr>
<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>
+ <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>
+ <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>
@@ -17069,16 +22299,19 @@ Variables</h2></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>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#l00075">75</a> of file <a class="el" href="_backend_helper_8cpp_source.xhtml">BackendHelper.cpp</a>.</p>
+<p class="definition">Definition at line <a class="el" href="_backend_helper_8cpp_source.xhtml#l00070">70</a> of file <a class="el" href="_backend_helper_8cpp_source.xhtml">BackendHelper.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; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a71c3bdadfe1c69aba2cbf054bff47744">GetCapability</a>(name, backend).has_value();</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;}</div>
+</div><!-- fragment -->
+<p class="reference">References <a class="el" href="_backend_helper_8cpp_source.xhtml#l00037">GetCapability()</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="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">size_t</span> i=0; i &lt; capabilities.GetOptionCount(); 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="keyword">auto</span>&amp; backendCapability = capabilities.GetOption(i);</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">if</span> (capability.GetName() == backendCapability.GetName())</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> (capability.GetValue().IsBool() &amp;&amp; backendCapability.GetValue().IsBool())</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; {</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">return</span> capability.GetValue().AsBool() == backendCapability.GetValue().AsBool();</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">else</span> <span class="keywordflow">if</span> (capability.GetValue().IsFloat() &amp;&amp; backendCapability.GetValue().IsFloat())</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> capability.GetValue().AsFloat() == backendCapability.GetValue().AsFloat();</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> <span class="keywordflow">if</span> (capability.GetValue().IsInt() &amp;&amp; backendCapability.GetValue().IsInt())</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">return</span> capability.GetValue().AsInt() == backendCapability.GetValue().AsInt();</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">else</span> <span class="keywordflow">if</span> (capability.GetValue().IsString() &amp;&amp; backendCapability.GetValue().IsString())</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> capability.GetValue().AsString() == backendCapability.GetValue().AsString();</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">else</span> <span class="keywordflow">if</span> (capability.GetValue().IsUnsignedInt() &amp;&amp; backendCapability.GetValue().IsUnsignedInt())</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="keywordflow">return</span> capability.GetValue().AsUnsignedInt() == backendCapability.GetValue().AsUnsignedInt();</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; }</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</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>
+<a id="abd839f0f103c1ae19a4b38d59b869108"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abd839f0f103c1ae19a4b38d59b869108">&#9670;&nbsp;</a></span>HasCapability() <span class="overload">[4/4]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -17086,14 +22319,14 @@ Variables</h2></td></tr>
<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>
+ <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>
+ <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>
@@ -17103,14 +22336,17 @@ Variables</h2></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#l00107">107</a> of file <a class="el" href="_backend_helper_8cpp_source.xhtml">BackendHelper.cpp</a>.</p>
+<p>Convenience function to check if a capability exists in a BackendCapabilites struct. </p>
-<p class="reference">References <a class="el" href="_backend_registry_8cpp_source.xhtml#l00015">BackendRegistryInstance()</a>, and <a class="el" href="_backend_helper_8cpp_source.xhtml#l00065">HasCapability()</a>.</p>
-<div class="fragment"><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">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="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordflow">if</span> (backendRegistry.IsBackendRegistered(backend))</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">auto</span> factoryFunc = backendRegistry.GetFactory(backend);</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keyword">auto</span> backendObject = factoryFunc();</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keyword">auto</span> capabilities = backendObject-&gt;GetCapabilities();</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#abd839f0f103c1ae19a4b38d59b869108">HasCapability</a>(backendOption, capabilities);</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">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</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#l00065">BackendHelper.cpp:65</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#l00015">BackendRegistry.cpp:15</a></div></div>
+<p class="definition">Definition at line <a class="el" href="_backend_helper_8cpp_source.xhtml#l00065">65</a> of file <a class="el" href="_backend_helper_8cpp_source.xhtml">BackendHelper.cpp</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; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a71c3bdadfe1c69aba2cbf054bff47744">GetCapability</a>(name, capabilities).has_value();</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;}</div>
</div><!-- fragment -->
+<p class="reference">References <a class="el" href="_backend_helper_8cpp_source.xhtml#l00037">GetCapability()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_backend_helper_8cpp_source.xhtml#l00107">HasCapability()</a>, <a class="el" href="_loaded_network_8cpp_source.xhtml#l01418">LoadedNetwork::ImportInputs()</a>, <a class="el" href="_loaded_network_8cpp_source.xhtml#l01560">LoadedNetwork::ImportOutputs()</a>, and <a class="el" href="_runtime_8cpp_source.xhtml#l00323">RuntimeImpl::RuntimeImpl()</a>.</p>
+
</div>
</div>
<a id="a44affeeb090c3c6a3062830562672e84"></a>
@@ -17138,9 +22374,10 @@ Variables</h2></td></tr>
</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>
+<div class="fragment"><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;{}</div>
+</div><!-- fragment -->
+<p class="reference">Referenced by <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="_arg_min_max_8cpp_source.xhtml#l00016">ArgMinMax()</a>, <a class="el" href="_network_8cpp_source.xhtml#l01253">CalculateSlotOptionForOutput()</a>, <a class="el" href="include_2armnn_2backends_2_i_tensor_handle_8hpp_source.xhtml#l00085">ITensorHandle::CanBeImported()</a>, <a class="el" href="_cl_tensor_handle_8hpp_source.xhtml#l00133">ClTensorHandle::CanBeImported()</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_depth_layer_8cpp_source.xhtml#l00038">SpaceToDepthLayer::Clone()</a>, <a class="el" href="_space_to_batch_nd_layer_8cpp_source.xhtml#l00037">SpaceToBatchNdLayer::Clone()</a>, <a class="el" href="_dynamic_backend_utils_8cpp_source.xhtml#l00037">DynamicBackendUtils::CloseHandle()</a>, <a class="el" href="_cl_unidirectional_sequence_lstm_float_workload_8cpp_source.xhtml#l00508">ClUnidirectionalSequenceLstmFloatWorkloadValidate()</a>, <a class="el" href="_conversion_utils_8cpp_source.xhtml#l00079">ConstTensorPin::ConstTensorPin()</a>, <a class="el" href="_workload_utils_8hpp_source.xhtml#l00046">CopyTensorContentsGeneric()</a>, <a class="el" href="_i_backend_internal_8hpp_source.xhtml#l00215">IBackendInternal::CreateExecutionData()</a>, <a class="el" href="_ref_tensor_handle_factory_8cpp_source.xhtml#l00022">RefTensorHandleFactory::CreateSubTensorHandle()</a>, <a class="el" href="_tosa_ref_tensor_handle_factory_8cpp_source.xhtml#l00022">TosaRefTensorHandleFactory::CreateSubTensorHandle()</a>, <a class="el" href="_sample_dynamic_tensor_handle_factory_8cpp_source.xhtml#l00023">SampleDynamicTensorHandleFactory::CreateSubTensorHandle()</a>, <a class="el" href="_sample_dynamic_workload_factory_8hpp_source.xhtml#l00033">SampleDynamicWorkloadFactory::CreateSubTensorHandle()</a>, <a class="el" href="_tosa_ref_workload_factory_8hpp_source.xhtml#l00040">TosaRefWorkloadFactory::CreateSubTensorHandle()</a>, <a class="el" href="_ref_workload_factory_8hpp_source.xhtml#l00052">RefWorkloadFactory::CreateSubTensorHandle()</a>, <a class="el" href="_ref_tensor_handle_factory_8cpp_source.xhtml#l00035">RefTensorHandleFactory::CreateTensorHandle()</a>, <a class="el" href="_tosa_ref_tensor_handle_factory_8cpp_source.xhtml#l00036">TosaRefTensorHandleFactory::CreateTensorHandle()</a>, <a class="el" href="_sample_dynamic_tensor_handle_factory_8cpp_source.xhtml#l00037">SampleDynamicTensorHandleFactory::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="_tosa_ref_workload_factory_8cpp_source.xhtml#l00092">TosaRefWorkloadFactory::CreateTensorHandle()</a>, <a class="el" href="_ref_workload_factory_8cpp_source.xhtml#l00126">RefWorkloadFactory::CreateTensorHandle()</a>, <a class="el" href="include_2armnn_2backends_2_i_tensor_handle_factory_8hpp_source.xhtml#l00067">ITensorHandleFactory::CreateTensorHandle()</a>, <a class="el" href="_output_layer_8hpp_source.xhtml#l00027">OutputLayer::CreateTensorHandles()</a>, <a class="el" href="_unmap_layer_8cpp_source.xhtml#l00027">UnmapLayer::CreateWorkload()</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="_merge_layer_8cpp_source.xhtml#l00019">MergeLayer::CreateWorkload()</a>, <a class="el" href="_output_layer_8cpp_source.xhtml#l00021">OutputLayer::CreateWorkload()</a>, <a class="el" href="_stand_in_layer_8cpp_source.xhtml#l00017">StandInLayer::CreateWorkload()</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">Float16Decoder::DecodeTensor()</a>, <a class="el" href="_base_iterator_8hpp_source.xhtml#l00314">Float32Decoder::DecodeTensor()</a>, <a class="el" href="_base_iterator_8hpp_source.xhtml#l00341">ScaledInt32Decoder::DecodeTensor()</a>, <a class="el" href="_base_iterator_8hpp_source.xhtml#l00377">Int32Decoder::DecodeTensor()</a>, <a class="el" href="_base_iterator_8hpp_source.xhtml#l00409">Int32ToInt32tDecoder::DecodeTensor()</a>, <a class="el" href="_base_iterator_8hpp_source.xhtml#l00441">BooleanDecoder::DecodeTensor()</a>, <a class="el" href="_base_iterator_8hpp_source.xhtml#l00474">BooleanDecoderBool::DecodeTensor()</a>, <a class="el" href="_base_iterator_8hpp_source.xhtml#l00800">QSymm8PerAxisDecoder::DecodeTensor()</a>, <a class="el" href="_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="_detection_post_process_8cpp_source.xhtml#l00140">DetectionPostProcess()</a>, <a class="el" href="_profiling_8cpp_source.xhtml#l00229">ProfilerImpl::EndEvent()</a>, <a class="el" href="_serializer_8cpp_source.xhtml#l01972">SerializerStrategy::ExecuteStrategy()</a>, <a class="el" href="_unmap_layer_8cpp_source.xhtml#l00044">UnmapLayer::ExecuteStrategy()</a>, <a class="el" href="_map_layer_8cpp_source.xhtml#l00044">MapLayer::ExecuteStrategy()</a>, <a class="el" href="_mem_import_layer_8cpp_source.xhtml#l00052">MemImportLayer::ExecuteStrategy()</a>, <a class="el" href="_fake_quantization_layer_8cpp_source.xhtml#l00049">FakeQuantizationLayer::ExecuteStrategy()</a>, <a class="el" href="_strategy_base_8hpp_source.xhtml#l00033">StrategyBase&lt; DefaultStrategy &gt;::ExecuteStrategy()</a>, <a class="el" href="_execution_frame_8cpp_source.xhtml#l00014">ExecutionFrame::ExecuteWorkloads()</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="_gather_8cpp_source.xhtml#l00014">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#l00093">ITensorHandleFactory::GetCapabilities()</a>, <a class="el" href="_dynamic_backend_utils_8hpp_source.xhtml#l00062">DynamicBackendUtils::GetEntryPoint()</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#l00898">IDeserializer::DeserializerImpl::GetNetworkInputBindingInfo()</a>, <a class="el" href="_deserializer_8cpp_source.xhtml#l00914">IDeserializer::DeserializerImpl::GetNetworkOutputBindingInfo()</a>, <a class="el" href="_deserializer_8cpp_source.xhtml#l02821">IDeserializer::DeserializerImpl::GetNormalizationDescriptor()</a>, <a class="el" href="_deserializer_8cpp_source.xhtml#l02267">IDeserializer::DeserializerImpl::GetPooling2dDescriptor()</a>, <a class="el" href="_deserializer_8cpp_source.xhtml#l02362">IDeserializer::DeserializerImpl::GetPooling3dDescriptor()</a>, <a class="el" href="_dynamic_backend_utils_8cpp_source.xhtml#l00178">DynamicBackendUtils::GetSharedObjects()</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#l00667">NeonLayerSupport::IsActivationSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00612">RefLayerSupport::IsArgMinMaxSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00644">RefLayerSupport::IsBatchMatMulSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00689">RefLayerSupport::IsBatchNormalizationSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00735">RefLayerSupport::IsBatchToSpaceNdSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00813">RefLayerSupport::IsChannelShuffleSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00845">RefLayerSupport::IsComparisonSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00876">RefLayerSupport::IsConcatSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00836">NeonLayerSupport::IsConvertFp16ToFp32Supported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00846">NeonLayerSupport::IsConvertFp32ToFp16Supported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00967">RefLayerSupport::IsConvolution2dSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01036">RefLayerSupport::IsConvolution3dSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01134">RefLayerSupport::IsDepthToSpaceSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01163">RefLayerSupport::IsDepthwiseConvolutionSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01267">RefLayerSupport::IsDetectionPostProcessSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01346">RefLayerSupport::IsElementwiseUnarySupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01397">RefLayerSupport::IsFakeQuantizationSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01030">NeonLayerSupport::IsFillSupported()</a>, <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00990">ClLayerSupport::IsFillSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01415">RefLayerSupport::IsFillSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01042">NeonLayerSupport::IsFloorSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01440">RefLayerSupport::IsFloorSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01559">RefLayerSupport::IsGatherSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01598">RefLayerSupport::IsInstanceNormalizationSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01629">RefLayerSupport::IsL2NormalizationSupported()</a>, <a class="el" href="_tosa_ref_layer_support_8cpp_source.xhtml#l00021">TosaRefLayerSupport::IsLayerSupported()</a>, <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01085">ClLayerSupport::IsLogicalBinarySupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01663">RefLayerSupport::IsLogicalBinarySupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01688">RefLayerSupport::IsLogSoftmaxSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01714">RefLayerSupport::IsLstmSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02027">RefLayerSupport::IsNormalizationSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02065">RefLayerSupport::IsPadSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02095">RefLayerSupport::IsPermuteSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02126">RefLayerSupport::IsPooling2dSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02156">RefLayerSupport::IsPooling3dSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02187">RefLayerSupport::IsQLstmSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02246">RefLayerSupport::IsRankSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02261">RefLayerSupport::IsReduceSupported()</a>, <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01330">ClLayerSupport::IsReshapeSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01382">NeonLayerSupport::IsReshapeSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02290">RefLayerSupport::IsReshapeSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02314">RefLayerSupport::IsResizeSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02343">RefLayerSupport::IsShapeSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02361">RefLayerSupport::IsSliceSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02389">RefLayerSupport::IsSoftmaxSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02418">RefLayerSupport::IsSpaceToBatchNdSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02446">RefLayerSupport::IsSpaceToDepthSupported()</a>, <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01387">ClLayerSupport::IsSplitterSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01450">NeonLayerSupport::IsSplitterSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02476">RefLayerSupport::IsSplitterSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02506">RefLayerSupport::IsStackSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02539">RefLayerSupport::IsStridedSliceSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02638">RefLayerSupport::IsTransposeConvolution2dSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02706">RefLayerSupport::IsTransposeSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02737">RefLayerSupport::IsUnidirectionalSequenceLstmSupported()</a>, <a class="el" href="_layer_8cpp_source.xhtml#l00220">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#l00355">ClImportSubTensorHandle::Map()</a>, <a class="el" href="_neon_convolution3d_workload_8cpp_source.xhtml#l00056">NeonConvolution3dWorkload::NeonConvolution3dWorkload()</a>, <a class="el" href="_dynamic_backend_utils_8cpp_source.xhtml#l00016">DynamicBackendUtils::OpenHandle()</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="_workload_8hpp_source.xhtml#l00069">BaseWorkload&lt; SplitterQueueDescriptor &gt;::ReplaceInputTensorHandle()</a>, <a class="el" href="_workload_8hpp_source.xhtml#l00076">BaseWorkload&lt; SplitterQueueDescriptor &gt;::ReplaceOutputTensorHandle()</a>, <a class="el" href="_optimize_inverse_conversions_8hpp_source.xhtml#l00021">OptimizeInverseConversionsImpl::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#l00071">ConvertConstants&lt; Converter, Predicate &gt;::Run()</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#l00369">ClImportSubTensorHandle::SetMemoryGroup()</a>, <a class="el" href="_slice_8cpp_source.xhtml#l00014">Slice()</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="_layer_support_common_8hpp_source.xhtml#l00054">TrueFunc()</a>, <a class="el" href="_cl_backend_8hpp_source.xhtml#l00276">ClBackend::ClBackendCustomAllocatorMemoryRegion::unmap()</a>, <a class="el" href="_i_backend_internal_8hpp_source.xhtml#l00225">IBackendInternal::UpdateExecutionData()</a>, <a class="el" href="_cl_backend_8hpp_source.xhtml#l00098">ClBackend::UseCustomMemoryAllocator()</a>, <a class="el" href="_i_backend_internal_8hpp_source.xhtml#l00182">IBackendInternal::UseCustomMemoryAllocator()</a>, <a class="el" href="_working_mem_handle_8cpp_source.xhtml#l00018">WorkingMemHandle::WorkingMemHandle()</a>, <a class="el" href="_graph_8hpp_source.xhtml#l00414">Graph::LayerInGraph&lt; InputLayer &gt;::~LayerInGraph()</a>, and <a class="el" href="_graph_8hpp_source.xhtml#l00440">Graph::LayerInGraph&lt; OutputLayer &gt;::~LayerInGraph()</a>.</p>
-<p class="reference">Referenced by <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="_arg_min_max_8cpp_source.xhtml#l00016">ArgMinMax()</a>, <a class="el" href="_network_8cpp_source.xhtml#l01253">CalculateSlotOptionForOutput()</a>, <a class="el" href="include_2armnn_2backends_2_i_tensor_handle_8hpp_source.xhtml#l00085">ITensorHandle::CanBeImported()</a>, <a class="el" href="_cl_tensor_handle_8hpp_source.xhtml#l00133">ClTensorHandle::CanBeImported()</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="_dynamic_backend_utils_8cpp_source.xhtml#l00037">DynamicBackendUtils::CloseHandle()</a>, <a class="el" href="_cl_unidirectional_sequence_lstm_float_workload_8cpp_source.xhtml#l00508">ClUnidirectionalSequenceLstmFloatWorkloadValidate()</a>, <a class="el" href="_conversion_utils_8cpp_source.xhtml#l00079">ConstTensorPin::ConstTensorPin()</a>, <a class="el" href="_workload_utils_8hpp_source.xhtml#l00046">CopyTensorContentsGeneric()</a>, <a class="el" href="_i_backend_internal_8hpp_source.xhtml#l00215">IBackendInternal::CreateExecutionData()</a>, <a class="el" href="_ref_tensor_handle_factory_8cpp_source.xhtml#l00022">RefTensorHandleFactory::CreateSubTensorHandle()</a>, <a class="el" href="_tosa_ref_tensor_handle_factory_8cpp_source.xhtml#l00022">TosaRefTensorHandleFactory::CreateSubTensorHandle()</a>, <a class="el" href="_sample_dynamic_tensor_handle_factory_8cpp_source.xhtml#l00023">SampleDynamicTensorHandleFactory::CreateSubTensorHandle()</a>, <a class="el" href="_sample_dynamic_workload_factory_8hpp_source.xhtml#l00033">SampleDynamicWorkloadFactory::CreateSubTensorHandle()</a>, <a class="el" href="_tosa_ref_workload_factory_8hpp_source.xhtml#l00040">TosaRefWorkloadFactory::CreateSubTensorHandle()</a>, <a class="el" href="_ref_workload_factory_8hpp_source.xhtml#l00052">RefWorkloadFactory::CreateSubTensorHandle()</a>, <a class="el" href="_ref_tensor_handle_factory_8cpp_source.xhtml#l00035">RefTensorHandleFactory::CreateTensorHandle()</a>, <a class="el" href="_tosa_ref_tensor_handle_factory_8cpp_source.xhtml#l00036">TosaRefTensorHandleFactory::CreateTensorHandle()</a>, <a class="el" href="_sample_dynamic_tensor_handle_factory_8cpp_source.xhtml#l00037">SampleDynamicTensorHandleFactory::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="_tosa_ref_workload_factory_8cpp_source.xhtml#l00092">TosaRefWorkloadFactory::CreateTensorHandle()</a>, <a class="el" href="_ref_workload_factory_8cpp_source.xhtml#l00126">RefWorkloadFactory::CreateTensorHandle()</a>, <a class="el" href="include_2armnn_2backends_2_i_tensor_handle_factory_8hpp_source.xhtml#l00067">ITensorHandleFactory::CreateTensorHandle()</a>, <a class="el" href="_output_layer_8hpp_source.xhtml#l00027">OutputLayer::CreateTensorHandles()</a>, <a class="el" href="_merge_layer_8cpp_source.xhtml#l00019">MergeLayer::CreateWorkload()</a>, <a class="el" href="_output_layer_8cpp_source.xhtml#l00021">OutputLayer::CreateWorkload()</a>, <a class="el" href="_unmap_layer_8cpp_source.xhtml#l00027">UnmapLayer::CreateWorkload()</a>, <a class="el" href="_input_layer_8cpp_source.xhtml#l00020">InputLayer::CreateWorkload()</a>, <a class="el" href="_map_layer_8cpp_source.xhtml#l00027">MapLayer::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="_stand_in_layer_8cpp_source.xhtml#l00017">StandInLayer::CreateWorkload()</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">Float16Decoder::DecodeTensor()</a>, <a class="el" href="_base_iterator_8hpp_source.xhtml#l00314">Float32Decoder::DecodeTensor()</a>, <a class="el" href="_base_iterator_8hpp_source.xhtml#l00341">ScaledInt32Decoder::DecodeTensor()</a>, <a class="el" href="_base_iterator_8hpp_source.xhtml#l00377">Int32Decoder::DecodeTensor()</a>, <a class="el" href="_base_iterator_8hpp_source.xhtml#l00409">Int32ToInt32tDecoder::DecodeTensor()</a>, <a class="el" href="_base_iterator_8hpp_source.xhtml#l00441">BooleanDecoder::DecodeTensor()</a>, <a class="el" href="_base_iterator_8hpp_source.xhtml#l00474">BooleanDecoderBool::DecodeTensor()</a>, <a class="el" href="_base_iterator_8hpp_source.xhtml#l00800">QSymm8PerAxisDecoder::DecodeTensor()</a>, <a class="el" href="_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="_detection_post_process_8cpp_source.xhtml#l00140">DetectionPostProcess()</a>, <a class="el" href="_profiling_8cpp_source.xhtml#l00229">ProfilerImpl::EndEvent()</a>, <a class="el" href="_ref_strided_slice_workload_8cpp_source.xhtml#l00023">RefStridedSliceWorkload::ExecuteAsync()</a>, <a class="el" href="_serializer_8cpp_source.xhtml#l01972">SerializerStrategy::ExecuteStrategy()</a>, <a class="el" href="_unmap_layer_8cpp_source.xhtml#l00044">UnmapLayer::ExecuteStrategy()</a>, <a class="el" href="_map_layer_8cpp_source.xhtml#l00044">MapLayer::ExecuteStrategy()</a>, <a class="el" href="_mem_import_layer_8cpp_source.xhtml#l00052">MemImportLayer::ExecuteStrategy()</a>, <a class="el" href="_fake_quantization_layer_8cpp_source.xhtml#l00049">FakeQuantizationLayer::ExecuteStrategy()</a>, <a class="el" href="_strategy_base_8hpp_source.xhtml#l00033">StrategyBase&lt; DefaultStrategy &gt;::ExecuteStrategy()</a>, <a class="el" href="_execution_frame_8cpp_source.xhtml#l00014">ExecutionFrame::ExecuteWorkloads()</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="_gather_8cpp_source.xhtml#l00014">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#l00093">ITensorHandleFactory::GetCapabilities()</a>, <a class="el" href="_dynamic_backend_utils_8hpp_source.xhtml#l00062">DynamicBackendUtils::GetEntryPoint()</a>, <a class="el" href="_serializer_8cpp_source.xhtml#l00086">armnnSerializer::GetFlatBufferArgMinMaxFunction()</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#l00898">IDeserializer::DeserializerImpl::GetNetworkInputBindingInfo()</a>, <a class="el" href="_deserializer_8cpp_source.xhtml#l00914">IDeserializer::DeserializerImpl::GetNetworkOutputBindingInfo()</a>, <a class="el" href="_deserializer_8cpp_source.xhtml#l02821">IDeserializer::DeserializerImpl::GetNormalizationDescriptor()</a>, <a class="el" href="_deserializer_8cpp_source.xhtml#l02267">IDeserializer::DeserializerImpl::GetPooling2dDescriptor()</a>, <a class="el" href="_deserializer_8cpp_source.xhtml#l02362">IDeserializer::DeserializerImpl::GetPooling3dDescriptor()</a>, <a class="el" href="_dynamic_backend_utils_8cpp_source.xhtml#l00178">DynamicBackendUtils::GetSharedObjects()</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#l00667">NeonLayerSupport::IsActivationSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00612">RefLayerSupport::IsArgMinMaxSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00644">RefLayerSupport::IsBatchMatMulSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00689">RefLayerSupport::IsBatchNormalizationSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00735">RefLayerSupport::IsBatchToSpaceNdSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00813">RefLayerSupport::IsChannelShuffleSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00845">RefLayerSupport::IsComparisonSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00876">RefLayerSupport::IsConcatSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00836">NeonLayerSupport::IsConvertFp16ToFp32Supported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00846">NeonLayerSupport::IsConvertFp32ToFp16Supported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00967">RefLayerSupport::IsConvolution2dSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01036">RefLayerSupport::IsConvolution3dSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01134">RefLayerSupport::IsDepthToSpaceSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01163">RefLayerSupport::IsDepthwiseConvolutionSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01267">RefLayerSupport::IsDetectionPostProcessSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01346">RefLayerSupport::IsElementwiseUnarySupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01397">RefLayerSupport::IsFakeQuantizationSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01030">NeonLayerSupport::IsFillSupported()</a>, <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00990">ClLayerSupport::IsFillSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01415">RefLayerSupport::IsFillSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01042">NeonLayerSupport::IsFloorSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01440">RefLayerSupport::IsFloorSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01559">RefLayerSupport::IsGatherSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01598">RefLayerSupport::IsInstanceNormalizationSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01629">RefLayerSupport::IsL2NormalizationSupported()</a>, <a class="el" href="_mock_backend_8cpp_source.xhtml#l00096">IsLayerOptimizable()</a>, <a class="el" href="_tosa_ref_layer_support_8cpp_source.xhtml#l00021">TosaRefLayerSupport::IsLayerSupported()</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#l01085">ClLayerSupport::IsLogicalBinarySupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01663">RefLayerSupport::IsLogicalBinarySupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01688">RefLayerSupport::IsLogSoftmaxSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01714">RefLayerSupport::IsLstmSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02027">RefLayerSupport::IsNormalizationSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02065">RefLayerSupport::IsPadSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02095">RefLayerSupport::IsPermuteSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02126">RefLayerSupport::IsPooling2dSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02156">RefLayerSupport::IsPooling3dSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02187">RefLayerSupport::IsQLstmSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02246">RefLayerSupport::IsRankSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02261">RefLayerSupport::IsReduceSupported()</a>, <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01330">ClLayerSupport::IsReshapeSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01382">NeonLayerSupport::IsReshapeSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02290">RefLayerSupport::IsReshapeSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02314">RefLayerSupport::IsResizeSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02343">RefLayerSupport::IsShapeSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02361">RefLayerSupport::IsSliceSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02389">RefLayerSupport::IsSoftmaxSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02418">RefLayerSupport::IsSpaceToBatchNdSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02446">RefLayerSupport::IsSpaceToDepthSupported()</a>, <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01387">ClLayerSupport::IsSplitterSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01450">NeonLayerSupport::IsSplitterSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02476">RefLayerSupport::IsSplitterSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02506">RefLayerSupport::IsStackSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02539">RefLayerSupport::IsStridedSliceSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02638">RefLayerSupport::IsTransposeConvolution2dSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02706">RefLayerSupport::IsTransposeSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02737">RefLayerSupport::IsUnidirectionalSequenceLstmSupported()</a>, <a class="el" href="_layer_8cpp_source.xhtml#l00220">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#l00355">ClImportSubTensorHandle::Map()</a>, <a class="el" href="_neon_convolution3d_workload_8cpp_source.xhtml#l00056">NeonConvolution3dWorkload::NeonConvolution3dWorkload()</a>, <a class="el" href="_dynamic_backend_utils_8cpp_source.xhtml#l00016">DynamicBackendUtils::OpenHandle()</a>, <a class="el" href="_tf_lite_parser_8cpp_source.xhtml#l02137">TfLiteParserImpl::OutputShapeOfSqueeze()</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="_workload_8hpp_source.xhtml#l00069">BaseWorkload&lt; Convolution2dQueueDescriptor &gt;::ReplaceInputTensorHandle()</a>, <a class="el" href="_workload_8hpp_source.xhtml#l00076">BaseWorkload&lt; Convolution2dQueueDescriptor &gt;::ReplaceOutputTensorHandle()</a>, <a class="el" href="_convert_const_permute_layers_to_const_layers_8hpp_source.xhtml#l00020">ConvertConstPermuteLayersToConstLayers::Run()</a>, <a class="el" href="_optimize_inverse_conversions_8hpp_source.xhtml#l00021">OptimizeInverseConversionsImpl::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#l00071">ConvertConstants&lt; Converter, Predicate &gt;::Run()</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#l00369">ClImportSubTensorHandle::SetMemoryGroup()</a>, <a class="el" href="_slice_8cpp_source.xhtml#l00014">Slice()</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#l00446">Graph::SubstituteSubgraph()</a>, <a class="el" href="_layer_support_common_8hpp_source.xhtml#l00054">TrueFunc()</a>, <a class="el" href="_cl_backend_8hpp_source.xhtml#l00276">ClBackend::ClBackendCustomAllocatorMemoryRegion::unmap()</a>, <a class="el" href="_i_backend_internal_8hpp_source.xhtml#l00225">IBackendInternal::UpdateExecutionData()</a>, <a class="el" href="_cl_backend_8hpp_source.xhtml#l00098">ClBackend::UseCustomMemoryAllocator()</a>, <a class="el" href="_i_backend_internal_8hpp_source.xhtml#l00182">IBackendInternal::UseCustomMemoryAllocator()</a>, <a class="el" href="_working_mem_handle_8cpp_source.xhtml#l00018">WorkingMemHandle::WorkingMemHandle()</a>, <a class="el" href="_graph_8hpp_source.xhtml#l00414">Graph::LayerInGraph&lt; InputLayer &gt;::~LayerInGraph()</a>, <a class="el" href="_graph_8hpp_source.xhtml#l00440">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>
@@ -17178,17 +22415,46 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_workload_utils_8hpp_source.xhtml#l00116">116</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="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="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(handle);</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; armcomputetensorutils::InitialiseArmComputeTensorEmpty(clTensor);</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordflow">switch</span>(handle-&gt;GetTensorInfo().GetDataType())</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">case</span> DataType::Float16:</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <a class="code" href="namespacearmnn.xhtml#a73447f827b995cf90d4029151514b4ba">CopyArmComputeClTensorData</a>(clTensor, handle-&gt;GetConstTensor&lt;<a class="code" href="namespacearmnn.xhtml#a0b49aa352b84d572942185ce72cef751">armnn::Half</a>&gt;());</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordflow">case</span> DataType::Float32:</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</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="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> DataType::QAsymmU8:</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</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="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> DataType::QAsymmS8:</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS8:</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</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="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; <span class="keywordflow">case</span> DataType::QSymmS16:</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</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="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keywordflow">case</span> DataType::Signed32:</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</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="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keywordflow">case</span> DataType::BFloat16:</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <a class="code" href="namespacearmnn.xhtml#a73447f827b995cf90d4029151514b4ba">CopyArmComputeClTensorData</a>(clTensor, handle-&gt;GetConstTensor&lt;<a class="code" href="classarmnn_1_1_b_float16.xhtml">armnn::BFloat16</a>&gt;());</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="comment">// Throw exception; assertion not called in release build.</span></div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordflow">throw</span> Exception(<span class="stringliteral">&quot;Unexpected tensor type during InitializeArmComputeClTensorData().&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 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_a0b49aa352b84d572942185ce72cef751"><div class="ttname"><a href="namespacearmnn.xhtml#a0b49aa352b84d572942185ce72cef751">armnn::Half</a></div><div class="ttdeci">half_float::half Half</div><div class="ttdef"><b>Definition:</b> <a href="_half_8hpp_source.xhtml#l00022">Half.hpp:22</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#l00056">ClWorkloadUtils.hpp:56</a></div></div>
+<div class="fragment"><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="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(handle);</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; armcomputetensorutils::InitialiseArmComputeTensorEmpty(clTensor);</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordflow">switch</span>(handle-&gt;GetTensorInfo().GetDataType())</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">case</span> DataType::Float16:</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <a class="code" href="namespacearmnn.xhtml#a73447f827b995cf90d4029151514b4ba">CopyArmComputeClTensorData</a>(clTensor, handle-&gt;GetConstTensor&lt;<a class="code" href="namespacearmnn.xhtml#a0b49aa352b84d572942185ce72cef751">armnn::Half</a>&gt;());</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordflow">case</span> DataType::Float32:</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</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="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> DataType::QAsymmU8:</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</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="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> DataType::QAsymmS8:</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS8:</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</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="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; <span class="keywordflow">case</span> DataType::QSymmS16:</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</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="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keywordflow">case</span> DataType::Signed32:</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</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="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keywordflow">case</span> DataType::BFloat16:</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <a class="code" href="namespacearmnn.xhtml#a73447f827b995cf90d4029151514b4ba">CopyArmComputeClTensorData</a>(clTensor, handle-&gt;GetConstTensor&lt;<a class="code" href="classarmnn_1_1_b_float16.xhtml">armnn::BFloat16</a>&gt;());</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="comment">// Throw exception; assertion not called in release build.</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordflow">throw</span> Exception(<span class="stringliteral">&quot;Unexpected tensor type during InitializeArmComputeClTensorData().&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 -->
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>.</p>
+
</div>
</div>
-<a id="a611208865d55ea576cc89ac86d7c19b7"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a611208865d55ea576cc89ac86d7c19b7">&#9670;&nbsp;</a></span>InitializeArmComputeTensorData() <span class="overload">[1/2]</span></h2>
+<a id="acf8e1f43fc13cf7603564cc15743fce2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acf8e1f43fc13cf7603564cc15743fce2">&#9670;&nbsp;</a></span>InitializeArmComputeTensorData() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -17205,13 +22471,7 @@ Variables</h2></td></tr>
<tr>
<td class="paramkey"></td>
<td></td>
- <td class="paramtype"><a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&#160;</td>
- <td class="paramname"><em>tensorInfo</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="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>
@@ -17227,18 +22487,46 @@ Variables</h2></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="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">BFloat16</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="_tensor_8hpp_source.xhtml#l00198">TensorInfo::GetDataType()</a>, <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml#a9afbc055a017adf1bc38ee137bca6e90">ITensorHandle::Map()</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>
-
-<p class="reference">Referenced by <a class="el" href="_neon_fully_connected_workload_8cpp_source.xhtml#l00112">NeonFullyConnectedWorkload::Execute()</a>, and <a class="el" href="_neon_convolution2d_workload_8cpp_source.xhtml#l00158">NeonConvolution2dWorkload::Execute()</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>(handle);</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">switch</span>(tensorInfo.GetDataType())</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> DataType::Float16:</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, reinterpret_cast&lt;const armnn::Half*&gt;(handle-&gt;Map()));</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordflow">case</span> DataType::Float32:</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, reinterpret_cast&lt;const float*&gt;(handle-&gt;Map()));</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmU8:</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, reinterpret_cast&lt;const uint8_t*&gt;(handle-&gt;Map()));</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; <span class="keywordflow">case</span> DataType::QSymmS8:</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmS8:</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, reinterpret_cast&lt;const int8_t*&gt;(handle-&gt;Map()));</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordflow">case</span> DataType::Signed32:</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, reinterpret_cast&lt;const int32_t*&gt;(handle-&gt;Map()));</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; <span class="keywordflow">case</span> DataType::QSymmS16:</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, reinterpret_cast&lt;const int16_t*&gt;(handle-&gt;Map()));</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordflow">case</span> DataType::BFloat16:</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, reinterpret_cast&lt;const armnn::BFloat16*&gt;(handle-&gt;Map()));</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; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="comment">// Throw exception; assertion not called in release build.</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordflow">throw</span> Exception(<span class="stringliteral">&quot;Unexpected tensor type during InitializeArmComputeTensorData().&quot;</span>);</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;};</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>
+<p class="definition">Definition at line <a class="el" href="_neon_workload_utils_8hpp_source.xhtml#l00096">96</a> of file <a class="el" href="_neon_workload_utils_8hpp_source.xhtml">NeonWorkloadUtils.hpp</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; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(handle);</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">switch</span>(handle-&gt;GetTensorInfo().GetDataType())</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::Float16:</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, handle-&gt;GetConstTensor&lt;<a class="code" href="namespacearmnn.xhtml#a0b49aa352b84d572942185ce72cef751">armnn::Half</a>&gt;());</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordflow">case</span> DataType::Float32:</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</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="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmU8:</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</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="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS8:</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmS8:</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</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="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordflow">case</span> DataType::Signed32:</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</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="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS16:</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</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="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> DataType::BFloat16:</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, handle-&gt;GetConstTensor&lt;<a class="code" href="classarmnn_1_1_b_float16.xhtml">armnn::BFloat16</a>&gt;());</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">default</span>:</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="comment">// Throw exception; assertion not called in release build.</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordflow">throw</span> Exception(<span class="stringliteral">&quot;Unexpected tensor type during InitializeArmComputeTensorData().&quot;</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;};</div>
</div><!-- fragment -->
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">BFloat16</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="_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="_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>
</div>
-<a id="acf8e1f43fc13cf7603564cc15743fce2"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#acf8e1f43fc13cf7603564cc15743fce2">&#9670;&nbsp;</a></span>InitializeArmComputeTensorData() <span class="overload">[2/2]</span></h2>
+<a id="a611208865d55ea576cc89ac86d7c19b7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a611208865d55ea576cc89ac86d7c19b7">&#9670;&nbsp;</a></span>InitializeArmComputeTensorData() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -17255,7 +22543,13 @@ Variables</h2></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="paramtype"><a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&#160;</td>
+ <td class="paramname"><em>tensorInfo</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>handle</em>&#160;</td>
</tr>
<tr>
@@ -17271,14 +22565,44 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="_neon_workload_utils_8hpp_source.xhtml#l00096">96</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="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">BFloat16</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="_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="_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="l00098"></a><span class="lineno"> 98</span>&#160;{</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(handle);</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">switch</span>(handle-&gt;GetTensorInfo().GetDataType())</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::Float16:</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, handle-&gt;GetConstTensor&lt;<a class="code" href="namespacearmnn.xhtml#a0b49aa352b84d572942185ce72cef751">armnn::Half</a>&gt;());</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordflow">case</span> DataType::Float32:</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</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="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmU8:</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</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="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS8:</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmS8:</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</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="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordflow">case</span> DataType::Signed32:</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</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="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordflow">case</span> DataType::QSymmS16:</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</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="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> DataType::BFloat16:</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, handle-&gt;GetConstTensor&lt;<a class="code" href="classarmnn_1_1_b_float16.xhtml">armnn::BFloat16</a>&gt;());</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">default</span>:</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="comment">// Throw exception; assertion not called in release build.</span></div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordflow">throw</span> Exception(<span class="stringliteral">&quot;Unexpected tensor type during InitializeArmComputeTensorData().&quot;</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;};</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_a0b49aa352b84d572942185ce72cef751"><div class="ttname"><a href="namespacearmnn.xhtml#a0b49aa352b84d572942185ce72cef751">armnn::Half</a></div><div class="ttdeci">half_float::half Half</div><div class="ttdef"><b>Definition:</b> <a href="_half_8hpp_source.xhtml#l00022">Half.hpp:22</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>
+<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>
+<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>(handle);</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">switch</span>(tensorInfo.GetDataType())</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> DataType::Float16:</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span><a class="code" href="namespacearmnn.xhtml#a0b49aa352b84d572942185ce72cef751">armnn::Half</a>*<span class="keyword">&gt;</span>(handle-&gt;Map()));</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordflow">case</span> DataType::Float32:</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span><span class="keywordtype">float</span>*<span class="keyword">&gt;</span>(handle-&gt;Map()));</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmU8:</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>uint8_t*<span class="keyword">&gt;</span>(handle-&gt;Map()));</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; <span class="keywordflow">case</span> DataType::QSymmS8:</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">case</span> DataType::QAsymmS8:</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>int8_t*<span class="keyword">&gt;</span>(handle-&gt;Map()));</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordflow">case</span> DataType::Signed32:</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>int32_t*<span class="keyword">&gt;</span>(handle-&gt;Map()));</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; <span class="keywordflow">case</span> DataType::QSymmS16:</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>int16_t*<span class="keyword">&gt;</span>(handle-&gt;Map()));</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordflow">case</span> DataType::BFloat16:</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <a class="code" href="namespacearmnn.xhtml#a1351e01f9fb983937caf79e353142b41">CopyArmComputeTensorData</a>(tensor, <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span><a class="code" href="classarmnn_1_1_b_float16.xhtml">armnn::BFloat16</a>*<span class="keyword">&gt;</span>(handle-&gt;Map()));</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; <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="comment">// Throw exception; assertion not called in release build.</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordflow">throw</span> Exception(<span class="stringliteral">&quot;Unexpected tensor type during InitializeArmComputeTensorData().&quot;</span>);</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;};</div>
</div><!-- fragment -->
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">BFloat16</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="_tensor_8hpp_source.xhtml#l00198">TensorInfo::GetDataType()</a>, <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml#a9afbc055a017adf1bc38ee137bca6e90">ITensorHandle::Map()</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>
+
+<p class="reference">Referenced by <a class="el" href="_neon_fully_connected_workload_8cpp_source.xhtml#l00112">NeonFullyConnectedWorkload::Execute()</a>, and <a class="el" href="_neon_convolution2d_workload_8cpp_source.xhtml#l00158">NeonConvolution2dWorkload::Execute()</a>.</p>
+
</div>
</div>
<a id="ad31c56533e4f9f9f51719599fbfcf7bb"></a>
@@ -17314,11 +22638,46 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_network_utils_8cpp_source.xhtml#l00040">40</a> of file <a class="el" href="_network_utils_8cpp_source.xhtml">NetworkUtils.cpp</a>.</p>
-
+<div class="fragment"><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; std::vector&lt;ConvertFp16ToFp32Layer*&gt; convertLayers;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; convertLayers.reserve(layer.GetNumInputSlots());</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">// Insert a ConvertFp16ToFp32Layer before each input slot</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</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="l00049"></a><span class="lineno"> 49</span>&#160; {</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordtype">bool</span> allowInsert = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">if</span> (expectCorrectInputType)</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">// Only insert ConvertFp16ToFp32Layer before FP16 input slots</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; OutputSlot* connectedOutputSlot = inputSlot-&gt;GetConnectedOutputSlot();</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; allowInsert =</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; connectedOutputSlot &amp;&amp; connectedOutputSlot-&gt;GetTensorInfo().GetDataType() == DataType::Float16;</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> (allowInsert)</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> std::string name =</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</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="l00063"></a><span class="lineno"> 63</span>&#160; layer.GetName();</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; ConvertFp16ToFp32Layer* convertLayer =</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; graph.InsertNewLayer&lt;ConvertFp16ToFp32Layer&gt;(*inputSlot, name.c_str());</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; TensorInfo convertInfo = convertLayer-&gt;GetInputSlot(0).GetConnectedOutputSlot()-&gt;GetTensorInfo();</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; convertInfo.SetDataType(DataType::Float32);</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; convertLayer-&gt;GetOutputSlot().SetTensorInfo(convertInfo);</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; convertLayers.emplace_back(convertLayer);</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; }</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">return</span> convertLayers;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;}</div>
+</div><!-- fragment -->
<p class="reference">References <a class="el" href="_layer_8hpp_source.xhtml#l00249">Layer::BeginInputSlots()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00250">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#l00324">Layer::GetInputSlot()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00319">Layer::GetName()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00321">Layer::GetNumInputSlots()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00326">Layer::GetOutputSlot()</a>, <a class="el" href="_layer_8cpp_source.xhtml#l00092">OutputSlot::GetTensorInfo()</a>, <a class="el" href="_graph_8hpp_source.xhtml#l00471">Graph::InsertNewLayer()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00199">TensorInfo::SetDataType()</a>, and <a class="el" href="_layer_8cpp_source.xhtml#l00087">OutputSlot::SetTensorInfo()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.xhtml#l00608">AttemptBackendAssignment()</a>, and <a class="el" href="_convert_fp32_network_to_fp16_8hpp_source.xhtml#l00018">ConvertFp32NetworkToFp16Impl::Run()</a>.</p>
-<div class="fragment"><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; std::vector&lt;ConvertFp16ToFp32Layer*&gt; convertLayers;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; convertLayers.reserve(layer.GetNumInputSlots());</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">// Insert a ConvertFp16ToFp32Layer before each input slot</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</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="l00049"></a><span class="lineno"> 49</span>&#160; {</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordtype">bool</span> allowInsert = <span class="keyword">true</span>;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">if</span> (expectCorrectInputType)</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">// Only insert ConvertFp16ToFp32Layer before FP16 input slots</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; OutputSlot* connectedOutputSlot = inputSlot-&gt;GetConnectedOutputSlot();</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; allowInsert =</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; connectedOutputSlot &amp;&amp; connectedOutputSlot-&gt;GetTensorInfo().GetDataType() == DataType::Float16;</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> (allowInsert)</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> std::string name =</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</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="l00063"></a><span class="lineno"> 63</span>&#160; layer.GetName();</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; ConvertFp16ToFp32Layer* convertLayer =</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; graph.InsertNewLayer&lt;ConvertFp16ToFp32Layer&gt;(*inputSlot, name.c_str());</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; TensorInfo convertInfo = convertLayer-&gt;GetInputSlot(0).GetConnectedOutputSlot()-&gt;GetTensorInfo();</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; convertInfo.SetDataType(DataType::Float32);</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; convertLayer-&gt;GetOutputSlot().SetTensorInfo(convertInfo);</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; convertLayers.emplace_back(convertLayer);</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; }</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">return</span> convertLayers;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;}</div></div><!-- fragment -->
+
</div>
</div>
<a id="abf625e50a5eaeafce5b39580dc95a9d3"></a>
@@ -17348,11 +22707,42 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_network_utils_8cpp_source.xhtml#l00079">79</a> of file <a class="el" href="_network_utils_8cpp_source.xhtml">NetworkUtils.cpp</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="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numOutputSlots = layer.GetNumOutputSlots();</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; std::vector&lt;ConvertFp32ToFp16Layer*&gt; convertLayers;</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; convertLayers.reserve(numOutputSlots);</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="comment">// Update FP16 output slots to FP32 on current layer</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; ChangeOutputFp16ToFp32(layer);</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">// Insert a ConvertFp32ToFp16Layer after each FP32 output slot</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</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="l00091"></a><span class="lineno"> 91</span>&#160; {</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; OutputSlot&amp; outputSlot = layer.GetOutputSlot(slotIndex);</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordflow">if</span>(outputSlot.GetTensorInfo().GetDataType() == DataType::Float32)</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="keyword">const</span> std::string name =</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</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="l00097"></a><span class="lineno"> 97</span>&#160; ConvertFp32ToFp16Layer* convertLayer =</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; graph.InsertNewLayer&lt;ConvertFp32ToFp16Layer&gt;(outputSlot, name.c_str());</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; TensorInfo convertInfo = convertLayer-&gt;GetInputSlot(0).GetConnectedOutputSlot()-&gt;GetTensorInfo();</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; convertInfo.SetDataType(DataType::Float16);</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; convertLayer-&gt;GetOutputSlot().SetTensorInfo(convertInfo);</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; convertLayers.emplace_back(convertLayer);</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; <span class="keywordflow">return</span> convertLayers;</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;}</div>
+</div><!-- fragment -->
<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#l00324">Layer::GetInputSlot()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00319">Layer::GetName()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00322">Layer::GetNumOutputSlots()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00326">Layer::GetOutputSlot()</a>, <a class="el" href="_layer_8cpp_source.xhtml#l00092">OutputSlot::GetTensorInfo()</a>, <a class="el" href="_graph_8hpp_source.xhtml#l00471">Graph::InsertNewLayer()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00199">TensorInfo::SetDataType()</a>, and <a class="el" href="_layer_8cpp_source.xhtml#l00087">OutputSlot::SetTensorInfo()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.xhtml#l00608">AttemptBackendAssignment()</a>, and <a class="el" href="_convert_fp32_network_to_fp16_8hpp_source.xhtml#l00018">ConvertFp32NetworkToFp16Impl::Run()</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="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numOutputSlots = layer.GetNumOutputSlots();</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; std::vector&lt;ConvertFp32ToFp16Layer*&gt; convertLayers;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; convertLayers.reserve(numOutputSlots);</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="comment">// Update FP16 output slots to FP32 on current layer</span></div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; ChangeOutputFp16ToFp32(layer);</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">// Insert a ConvertFp32ToFp16Layer after each FP32 output slot</span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</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="l00091"></a><span class="lineno"> 91</span>&#160; {</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; OutputSlot&amp; outputSlot = layer.GetOutputSlot(slotIndex);</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordflow">if</span>(outputSlot.GetTensorInfo().GetDataType() == DataType::Float32)</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="keyword">const</span> std::string name =</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</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="l00097"></a><span class="lineno"> 97</span>&#160; ConvertFp32ToFp16Layer* convertLayer =</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; graph.InsertNewLayer&lt;ConvertFp32ToFp16Layer&gt;(outputSlot, name.c_str());</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; TensorInfo convertInfo = convertLayer-&gt;GetInputSlot(0).GetConnectedOutputSlot()-&gt;GetTensorInfo();</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; convertInfo.SetDataType(DataType::Float16);</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; convertLayer-&gt;GetOutputSlot().SetTensorInfo(convertInfo);</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; convertLayers.emplace_back(convertLayer);</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; <span class="keywordflow">return</span> convertLayers;</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;}</div></div><!-- fragment -->
+
</div>
</div>
<a id="a67b1630e1df3a06c51d18eed6134b663"></a>
@@ -17388,12 +22778,41 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_network_utils_8cpp_source.xhtml#l00112">112</a> of file <a class="el" href="_network_utils_8cpp_source.xhtml">NetworkUtils.cpp</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; std::vector&lt;DebugLayer*&gt; debugLayers;</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; debugLayers.reserve(layer.GetNumOutputSlots());</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">// Connect a DebugLayer to each output slot of the layer</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; uint32_t outputSlotIdx = 0;</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</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="l00120"></a><span class="lineno"> 120</span>&#160; {</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</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="l00122"></a><span class="lineno"> 122</span>&#160; std::to_string(outputSlotIdx);</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; DebugLayer* debugLayer =</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; graph.InsertNewLayer&lt;DebugLayer&gt;(*outputSlot, debugName.c_str(), toFile);</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">// Sets output tensor info for the debug layer.</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</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="l00129"></a><span class="lineno"> 129</span>&#160; TensorInfo debugInfo = debugLayer-&gt;GetInputSlot(0).GetConnectedOutputSlot()-&gt;GetTensorInfo();</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; debugLayer-&gt;GetOutputSlot().SetTensorInfo(debugInfo);</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">// NOTE: It is OK to do this because DebugLayer is only supported on CpuRef</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; debugLayer-&gt;SetBackendId(Compute::CpuRef);</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; debugLayers.emplace_back(debugLayer);</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; ++outputSlotIdx;</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 class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keywordflow">return</span> debugLayers;</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;}</div>
+</div><!-- fragment -->
<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00253">Layer::BeginOutputSlots()</a>, <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64">CpuRef</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00254">Layer::EndOutputSlots()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00056">InputSlot::GetConnectedOutputSlot()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00324">Layer::GetInputSlot()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00227">Layer::GetNameStr()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00322">Layer::GetNumOutputSlots()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00326">Layer::GetOutputSlot()</a>, <a class="el" href="_layer_8cpp_source.xhtml#l00092">OutputSlot::GetTensorInfo()</a>, <a class="el" href="_graph_8hpp_source.xhtml#l00471">Graph::InsertNewLayer()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00278">Layer::SetBackendId()</a>, and <a class="el" href="_layer_8cpp_source.xhtml#l00087">OutputSlot::SetTensorInfo()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_add_debug_8hpp_source.xhtml#l00019">AddDebugImpl::Run()</a>, and <a class="el" href="_add_debug_8hpp_source.xhtml#l00038">AddDebugToFileImpl::Run()</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; std::vector&lt;DebugLayer*&gt; debugLayers;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; debugLayers.reserve(layer.GetNumOutputSlots());</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">// Connect a DebugLayer to each output slot of the layer</span></div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; uint32_t outputSlotIdx = 0;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</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="l00120"></a><span class="lineno"> 120</span>&#160; {</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</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="l00122"></a><span class="lineno"> 122</span>&#160; std::to_string(outputSlotIdx);</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; DebugLayer* debugLayer =</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; graph.InsertNewLayer&lt;DebugLayer&gt;(*outputSlot, debugName.c_str(), toFile);</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">// Sets output tensor info for the debug layer.</span></div><div class="line"><a name="l00128"></a><span class="lineno"> 128</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="l00129"></a><span class="lineno"> 129</span>&#160; TensorInfo debugInfo = debugLayer-&gt;GetInputSlot(0).GetConnectedOutputSlot()-&gt;GetTensorInfo();</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; debugLayer-&gt;GetOutputSlot().SetTensorInfo(debugInfo);</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">// NOTE: It is OK to do this because DebugLayer is only supported on CpuRef</span></div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; debugLayer-&gt;SetBackendId(Compute::CpuRef);</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; debugLayers.emplace_back(debugLayer);</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; ++outputSlotIdx;</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 class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keywordflow">return</span> debugLayers;</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</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>
@@ -17435,14 +22854,72 @@ Variables</h2></td></tr>
</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>
-
+<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><!-- fragment -->
<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#l00835">InstanceNormalizationDescriptor::m_Beta</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00839">InstanceNormalizationDescriptor::m_DataLayout</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00837">InstanceNormalizationDescriptor::m_Eps</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00833">InstanceNormalizationDescriptor::m_Gamma</a>, <a class="el" href="_workload_data_8hpp_source.xhtml#l00066">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>
@@ -17472,9 +22949,26 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_detection_post_process_8cpp_source.xhtml#l00030">30</a> of file <a class="el" href="_detection_post_process_8cpp_source.xhtml">DetectionPostProcess.cpp</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 -->
<p class="reference">Referenced by <a class="el" href="_detection_post_process_8cpp_source.xhtml#l00049">NonMaxSuppression()</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>
@@ -17527,9 +23021,9 @@ Variables</h2></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>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="_converter_8cpp_source.xhtml#l00021">Converter::ConvertOperation()</a>, <a class="el" href="_conversion_utils_8cpp_source.xhtml#l00592">armnn_driver::ConvertToActivation()</a>, <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>, <a class="el" href="_conversion_utils_8cpp_source.xhtml#l00885">armnn_driver::ProcessActivation()</a>, and <a class="el" href="_i_layer_support_8hpp_source.xhtml#l00027">ILayerSupport::~ILayerSupport()</a>.</p>
+<p class="reference">Referenced by <a class="el" href="_conversion_utils_8cpp_source.xhtml#l00592">armnn_driver::ConvertToActivation()</a>, <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>, and <a class="el" href="_conversion_utils_8cpp_source.xhtml#l00885">armnn_driver::ProcessActivation()</a>.</p>
</div>
</div>
@@ -17583,9 +23077,9 @@ Variables</h2></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>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="_converter_8cpp_source.xhtml#l00021">Converter::ConvertOperation()</a>, and <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
</div>
</div>
@@ -17663,7 +23157,7 @@ Variables</h2></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>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>
@@ -17719,9 +23213,9 @@ Variables</h2></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>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="_converter_8cpp_source.xhtml#l00021">Converter::ConvertOperation()</a>, and <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
</div>
</div>
@@ -17742,16 +23236,18 @@ Variables</h2></td></tr>
</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>
-
+<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;(info);</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;}</div>
+</div><!-- fragment -->
<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="a757df85e956e425c1a082d35a98ca4a9"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a757df85e956e425c1a082d35a98ca4a9">&#9670;&nbsp;</a></span>IsConcatSupported()</h2>
+<a id="ac8b3d64c6b38fe4bc59bd05959577fb6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac8b3d64c6b38fe4bc59bd05959577fb6">&#9670;&nbsp;</a></span>IsConcatSupported()</h2>
<div class="memitem">
<div class="memproto">
@@ -17765,7 +23261,7 @@ Variables</h2></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="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>
@@ -17800,9 +23296,9 @@ Variables</h2></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>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="_converter_8cpp_source.xhtml#l00021">Converter::ConvertOperation()</a>, and <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
</div>
</div>
@@ -17844,7 +23340,7 @@ Variables</h2></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>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="_conversion_utils_8cpp_source.xhtml#l00204">armnn_driver::ConvertToLayerInputHandle()</a>, and <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
@@ -17894,7 +23390,7 @@ Variables</h2></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>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>
@@ -17944,7 +23440,7 @@ Variables</h2></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>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>
@@ -18012,9 +23508,9 @@ Variables</h2></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>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="_converter_8cpp_source.xhtml#l00021">Converter::ConvertOperation()</a>, and <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
</div>
</div>
@@ -18035,10 +23531,23 @@ Variables</h2></td></tr>
</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 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><!-- fragment -->
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.</p>
+
</div>
</div>
<a id="aa6503439334e0a79181a51e084b0268f"></a>
@@ -18085,7 +23594,7 @@ Variables</h2></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>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>
@@ -18153,9 +23662,9 @@ Variables</h2></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>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="_converter_8cpp_source.xhtml#l00021">Converter::ConvertOperation()</a>, and <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
</div>
</div>
@@ -18203,9 +23712,9 @@ Variables</h2></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>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="_converter_8cpp_source.xhtml#l00021">Converter::ConvertOperation()</a>, and <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
</div>
</div>
@@ -18259,9 +23768,9 @@ Variables</h2></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>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="_converter_8cpp_source.xhtml#l00021">Converter::ConvertOperation()</a>, and <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
</div>
</div>
@@ -18315,7 +23824,7 @@ Variables</h2></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>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>
@@ -18363,7 +23872,7 @@ Variables</h2></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>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>
@@ -18386,12 +23895,14 @@ Variables</h2></td></tr>
</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>
-
+<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;(info);</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;}</div>
+</div><!-- fragment -->
<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>
@@ -18438,9 +23949,9 @@ Variables</h2></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>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="_converter_8cpp_source.xhtml#l00021">Converter::ConvertOperation()</a>, and <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
</div>
</div>
@@ -18506,9 +24017,9 @@ Variables</h2></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>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="_converter_8cpp_source.xhtml#l00021">Converter::ConvertOperation()</a>, and <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
</div>
</div>
@@ -18562,7 +24073,7 @@ Variables</h2></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>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>
@@ -18604,7 +24115,7 @@ Variables</h2></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>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="_conversion_utils_8cpp_source.xhtml#l00204">armnn_driver::ConvertToLayerInputHandle()</a>, and <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
@@ -18660,14 +24171,14 @@ Variables</h2></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>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="_converter_8cpp_source.xhtml#l00021">Converter::ConvertOperation()</a>, and <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</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="aeb099eb45d76b4ce62d87be11c634538"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aeb099eb45d76b4ce62d87be11c634538">&#9670;&nbsp;</a></span>IsLayerOptimizable() <span class="overload">[1/2]</span></h2>
+<a id="ab432cc781460dbb619afabeb88139a15"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab432cc781460dbb619afabeb88139a15">&#9670;&nbsp;</a></span>IsLayerOptimizable() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -18675,25 +24186,22 @@ Variables</h2></td></tr>
<tr>
<td class="memname">bool armnn::IsLayerOptimizable </td>
<td>(</td>
- <td class="paramtype">const <a class="el" href="classarmnn_1_1_layer.xhtml">armnn::Layer</a> *&#160;</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_layer.xhtml">armnn::Layer</a> &amp;&#160;</td>
<td class="paramname"><em>layer</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="_mock_backend_8cpp_source.xhtml#l00085">85</a> of file <a class="el" href="_mock_backend_8cpp_source.xhtml">MockBackend.cpp</a>.</p>
-
-<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>, and <a class="el" href="_layer_8hpp_source.xhtml#l00319">Layer::GetName()</a>.</p>
-
-<p class="reference">Referenced by <a class="el" href="_mock_backend_8cpp_source.xhtml#l00096">IsLayerOptimizable()</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; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer != <span class="keyword">nullptr</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; <span class="comment">// A Layer is not optimizable if its name contains &quot;unoptimizable&quot;</span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keyword">const</span> std::string layerName(layer-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#a7ddf0cf6f620d59c10e63495ace795d0">GetName</a>());</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordtype">bool</span> optimizable = layerName.find(<span class="stringliteral">&quot;unoptimizable&quot;</span>) == std::string::npos;</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> optimizable;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</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_layer_xhtml_a7ddf0cf6f620d59c10e63495ace795d0"><div class="ttname"><a href="classarmnn_1_1_layer.xhtml#a7ddf0cf6f620d59c10e63495ace795d0">armnn::Layer::GetName</a></div><div class="ttdeci">const char * GetName() const override</div><div class="ttdoc">Returns the name of the layer. </div><div class="ttdef"><b>Definition:</b> <a href="_layer_8hpp_source.xhtml#l00319">Layer.hpp:319</a></div></div>
+<p class="definition">Definition at line <a class="el" href="_mock_backend_8cpp_source.xhtml#l00096">96</a> of file <a class="el" href="_mock_backend_8cpp_source.xhtml">MockBackend.cpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;{</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#ab432cc781460dbb619afabeb88139a15">IsLayerOptimizable</a>(&amp;layer);</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
-<a id="ab432cc781460dbb619afabeb88139a15"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab432cc781460dbb619afabeb88139a15">&#9670;&nbsp;</a></span>IsLayerOptimizable() <span class="overload">[2/2]</span></h2>
+<a id="aeb099eb45d76b4ce62d87be11c634538"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aeb099eb45d76b4ce62d87be11c634538">&#9670;&nbsp;</a></span>IsLayerOptimizable() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -18701,22 +24209,30 @@ Variables</h2></td></tr>
<tr>
<td class="memname">bool armnn::IsLayerOptimizable </td>
<td>(</td>
- <td class="paramtype">const <a class="el" href="classarmnn_1_1_layer.xhtml">armnn::Layer</a> &amp;&#160;</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_layer.xhtml">armnn::Layer</a> *&#160;</td>
<td class="paramname"><em>layer</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="_mock_backend_8cpp_source.xhtml#l00096">96</a> of file <a class="el" href="_mock_backend_8cpp_source.xhtml">MockBackend.cpp</a>.</p>
-
-<p class="reference">References <a class="el" href="include_2armnn_2backends_2_optimization_views_8hpp_source.xhtml#l00044">OptimizationViews::AddFailedSubgraph()</a>, <a class="el" href="_network_8cpp_source.xhtml#l00173">INetwork::AddPrecompiledLayer()</a>, <a class="el" href="include_2armnn_2backends_2_optimization_views_8hpp_source.xhtml#l00039">OptimizationViews::AddSubstitution()</a>, <a class="el" href="include_2armnn_2backends_2_optimization_views_8hpp_source.xhtml#l00049">OptimizationViews::AddUntouchedSubgraph()</a>, <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>, <a class="el" href="_backend_registry_8cpp_source.xhtml#l00015">BackendRegistryInstance()</a>, <a class="el" href="_backend_registry_8cpp_source.xhtml#l00041">BackendRegistry::Deregister()</a>, <a class="el" href="_subgraph_view_8cpp_source.xhtml#l00308">SubgraphView::GetIConnectableLayers()</a>, <a class="el" href="include_2armnn_2backends_2_optimization_views_8hpp_source.xhtml#l00067">OptimizationViews::GetINetwork()</a>, <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused()</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a324118a6721dd6b8a9b9f4e327df2bf5">Input</a>, <a class="el" href="_mock_backend_8cpp_source.xhtml#l00085">IsLayerOptimizable()</a>, <a class="el" href="_mock_backend_8cpp_source.xhtml#l00060">IsLayerSupported()</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a29c2c02a361c9d7028472e5d92cd4a54">Output</a>, <a class="el" href="_backend_registry_8cpp_source.xhtml#l00021">BackendRegistry::Register()</a>, and <a class="el" href="_subgraph_view_selector_8cpp_source.xhtml#l00259">SubgraphViewSelector::SelectSubgraphs()</a>.</p>
-<div class="fragment"><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;{</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#ab432cc781460dbb619afabeb88139a15">IsLayerOptimizable</a>(&amp;layer);</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_ab432cc781460dbb619afabeb88139a15"><div class="ttname"><a href="namespacearmnn.xhtml#ab432cc781460dbb619afabeb88139a15">armnn::IsLayerOptimizable</a></div><div class="ttdeci">bool IsLayerOptimizable(const armnn::Layer &amp;layer)</div><div class="ttdef"><b>Definition:</b> <a href="_mock_backend_8cpp_source.xhtml#l00096">MockBackend.cpp:96</a></div></div>
+<p class="definition">Definition at line <a class="el" href="_mock_backend_8cpp_source.xhtml#l00085">85</a> of file <a class="el" href="_mock_backend_8cpp_source.xhtml">MockBackend.cpp</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; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer != <span class="keyword">nullptr</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; <span class="comment">// A Layer is not optimizable if its name contains &quot;unoptimizable&quot;</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keyword">const</span> std::string layerName(layer-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#a7ddf0cf6f620d59c10e63495ace795d0">GetName</a>());</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordtype">bool</span> optimizable = layerName.find(<span class="stringliteral">&quot;unoptimizable&quot;</span>) == std::string::npos;</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> optimizable;</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;}</div>
</div><!-- fragment -->
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>, and <a class="el" href="_layer_8hpp_source.xhtml#l00319">Layer::GetName()</a>.</p>
+
</div>
</div>
-<a id="a138ca3929b888fa8d9088c076e9de48c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a138ca3929b888fa8d9088c076e9de48c">&#9670;&nbsp;</a></span>IsLayerSupported() <span class="overload">[1/2]</span></h2>
+<a id="a0c99a284637e7c8d3547dac8686bed3a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0c99a284637e7c8d3547dac8686bed3a">&#9670;&nbsp;</a></span>IsLayerSupported() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -18724,31 +24240,22 @@ Variables</h2></td></tr>
<tr>
<td class="memname">bool armnn::IsLayerSupported </td>
<td>(</td>
- <td class="paramtype">const <a class="el" href="classarmnn_1_1_layer.xhtml">armnn::Layer</a> *&#160;</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_layer.xhtml">armnn::Layer</a> &amp;&#160;</td>
<td class="paramname"><em>layer</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="_mock_backend_8cpp_source.xhtml#l00060">60</a> of file <a class="el" href="_mock_backend_8cpp_source.xhtml">MockBackend.cpp</a>.</p>
-
-<p class="reference">References <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a7c5531bbefed0945814f874baf9e0e0f">Addition</a>, <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>, <a class="el" href="namespacearmnn.xhtml#a14d24d90ab4ba2956e92e27890ba4c91acb17869fe51048b5a5c4c6106551a255">Constant</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4adb033d2f81b68f9a17e8f62de69fed4a">Convolution2d</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00273">Layer::GetType()</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a324118a6721dd6b8a9b9f4e327df2bf5">Input</a>, and <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a29c2c02a361c9d7028472e5d92cd4a54">Output</a>.</p>
-
-<p class="reference">Referenced by <a class="el" href="_mock_backend_8cpp_source.xhtml#l00096">IsLayerOptimizable()</a>, and <a class="el" href="_sample_dynamic_workload_factory_8cpp_source.xhtml#l00037">SampleDynamicWorkloadFactory::IsLayerSupported()</a>.</p>
-<div class="fragment"><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; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer != <span class="keyword">nullptr</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; <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">armnn::LayerType</a> layerType = layer-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#ad8e15c530c929ab823d89ae9fd2d3f11">GetType</a>();</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordflow">switch</span> (layerType)</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> <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a324118a6721dd6b8a9b9f4e327df2bf5">armnn::LayerType::Input</a>:</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#a56943a0946e5f15e5e58054b8e7a04a4a29c2c02a361c9d7028472e5d92cd4a54">armnn::LayerType::Output</a>:</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#a14d24d90ab4ba2956e92e27890ba4c91acb17869fe51048b5a5c4c6106551a255">armnn::LayerType::Constant</a>:</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a7c5531bbefed0945814f874baf9e0e0f">armnn::LayerType::Addition</a>:</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4adb033d2f81b68f9a17e8f62de69fed4a">armnn::LayerType::Convolution2d</a>:</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="comment">// Layer supported</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="comment">// Layer unsupported</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">return</span> <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;}</div><div class="ttc" id="namespacearmnn_xhtml_a56943a0946e5f15e5e58054b8e7a04a4a29c2c02a361c9d7028472e5d92cd4a54"><div class="ttname"><a href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a29c2c02a361c9d7028472e5d92cd4a54">armnn::LayerType::Output</a></div></div>
-<div class="ttc" id="classarmnn_1_1_layer_xhtml_ad8e15c530c929ab823d89ae9fd2d3f11"><div class="ttname"><a href="classarmnn_1_1_layer.xhtml#ad8e15c530c929ab823d89ae9fd2d3f11">armnn::Layer::GetType</a></div><div class="ttdeci">LayerType GetType() const override</div><div class="ttdoc">Returns the armnn::LayerType of this layer. </div><div class="ttdef"><b>Definition:</b> <a href="_layer_8hpp_source.xhtml#l00273">Layer.hpp:273</a></div></div>
-<div class="ttc" id="namespacearmnn_xhtml_a56943a0946e5f15e5e58054b8e7a04a4adb033d2f81b68f9a17e8f62de69fed4a"><div class="ttname"><a href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4adb033d2f81b68f9a17e8f62de69fed4a">armnn::LayerType::Convolution2d</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_a56943a0946e5f15e5e58054b8e7a04a4a7c5531bbefed0945814f874baf9e0e0f"><div class="ttname"><a href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a7c5531bbefed0945814f874baf9e0e0f">armnn::LayerType::Addition</a></div></div>
-<div class="ttc" id="namespacearmnn_xhtml_a56943a0946e5f15e5e58054b8e7a04a4a324118a6721dd6b8a9b9f4e327df2bf5"><div class="ttname"><a href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a324118a6721dd6b8a9b9f4e327df2bf5">armnn::LayerType::Input</a></div></div>
-<div class="ttc" id="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#l00466">Types.hpp:466</a></div></div>
+<p class="definition">Definition at line <a class="el" href="_mock_backend_8cpp_source.xhtml#l00080">80</a> of file <a class="el" href="_mock_backend_8cpp_source.xhtml">MockBackend.cpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;{</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a0c99a284637e7c8d3547dac8686bed3a">IsLayerSupported</a>(&amp;layer);</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
-<a id="a0c99a284637e7c8d3547dac8686bed3a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a0c99a284637e7c8d3547dac8686bed3a">&#9670;&nbsp;</a></span>IsLayerSupported() <span class="overload">[2/2]</span></h2>
+<a id="a138ca3929b888fa8d9088c076e9de48c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a138ca3929b888fa8d9088c076e9de48c">&#9670;&nbsp;</a></span>IsLayerSupported() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -18756,20 +24263,41 @@ Variables</h2></td></tr>
<tr>
<td class="memname">bool armnn::IsLayerSupported </td>
<td>(</td>
- <td class="paramtype">const <a class="el" href="classarmnn_1_1_layer.xhtml">armnn::Layer</a> &amp;&#160;</td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_layer.xhtml">armnn::Layer</a> *&#160;</td>
<td class="paramname"><em>layer</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="_mock_backend_8cpp_source.xhtml#l00080">80</a> of file <a class="el" href="_mock_backend_8cpp_source.xhtml">MockBackend.cpp</a>.</p>
-<div class="fragment"><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;{</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a0c99a284637e7c8d3547dac8686bed3a">IsLayerSupported</a>(&amp;layer);</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a0c99a284637e7c8d3547dac8686bed3a"><div class="ttname"><a href="namespacearmnn.xhtml#a0c99a284637e7c8d3547dac8686bed3a">armnn::IsLayerSupported</a></div><div class="ttdeci">bool IsLayerSupported(const armnn::Layer &amp;layer)</div><div class="ttdef"><b>Definition:</b> <a href="_mock_backend_8cpp_source.xhtml#l00080">MockBackend.cpp:80</a></div></div>
+<p class="definition">Definition at line <a class="el" href="_mock_backend_8cpp_source.xhtml#l00060">60</a> of file <a class="el" href="_mock_backend_8cpp_source.xhtml">MockBackend.cpp</a>.</p>
+<div class="fragment"><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; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer != <span class="keyword">nullptr</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; <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">armnn::LayerType</a> layerType = layer-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#ad8e15c530c929ab823d89ae9fd2d3f11">GetType</a>();</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordflow">switch</span> (layerType)</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> <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a324118a6721dd6b8a9b9f4e327df2bf5">armnn::LayerType::Input</a>:</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#a56943a0946e5f15e5e58054b8e7a04a4a29c2c02a361c9d7028472e5d92cd4a54">armnn::LayerType::Output</a>:</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4acb17869fe51048b5a5c4c6106551a255">armnn::LayerType::Constant</a>:</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a7c5531bbefed0945814f874baf9e0e0f">armnn::LayerType::Addition</a>:</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4adb033d2f81b68f9a17e8f62de69fed4a">armnn::LayerType::Convolution2d</a>:</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="comment">// Layer supported</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="comment">// Layer unsupported</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">return</span> <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;}</div>
</div><!-- fragment -->
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a7c5531bbefed0945814f874baf9e0e0f">Addition</a>, <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4acb17869fe51048b5a5c4c6106551a255">Constant</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4adb033d2f81b68f9a17e8f62de69fed4a">Convolution2d</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00273">Layer::GetType()</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a324118a6721dd6b8a9b9f4e327df2bf5">Input</a>, and <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a29c2c02a361c9d7028472e5d92cd4a54">Output</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_sample_dynamic_workload_factory_8cpp_source.xhtml#l00037">SampleDynamicWorkloadFactory::IsLayerSupported()</a>.</p>
+
</div>
</div>
-<a id="a2b49ca67b57ecb9d830213169ff5e7db"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a2b49ca67b57ecb9d830213169ff5e7db">&#9670;&nbsp;</a></span>IsLayerTypeSupported()</h2>
+<a id="a8c69ca5000838df92215ca5053141cf6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8c69ca5000838df92215ca5053141cf6">&#9670;&nbsp;</a></span>IsLayerTypeSupported()</h2>
<div class="memitem">
<div class="memproto">
@@ -18807,7 +24335,7 @@ Variables</h2></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="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>
@@ -18825,37 +24353,455 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00167">167</a> of file <a class="el" href="_neon_layer_support_8cpp_source.xhtml">NeonLayerSupport.cpp</a>.</p>
-
-<p class="reference">References <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>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a9882ff3cfed27d6161c20a305e7a3484">BatchMatMul</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4ae4743c3ec15d1d84169b17264634692e">BatchNormalization</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a6ee06c6045d0c5b6565a247955ef0fc2">BatchToSpaceNd</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a4cd9f3996d60790cd11c04f842ebc43c">Cast</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a0ca5f33c1d35fd4105d3a26a2823f9dd">ChannelShuffle</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4af6c0e3a1c3cfabd32ae8d3ae741fcf0a">Comparison</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4ae20f0f2826a6549809f050b86274567f">Concat</a>, <a class="el" href="namespacearmnn.xhtml#a14d24d90ab4ba2956e92e27890ba4c91acb17869fe51048b5a5c4c6106551a255">Constant</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a912a4b4d73726c282e3f79aa2c390d6c">ConvertFp16ToFp32</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#a56943a0946e5f15e5e58054b8e7a04a4a583550d0f265fd3756f7de0e42c51953">Convolution3d</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a731729ad1b2c0eb9399b62c770b3482d">DepthToSpace</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4af97adbfc88b7012a0243215b1076e7e7">DepthwiseConvolution2d</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a9bc35e069257a508e14ed82965a8661d">Dequantize</a>, <a class="el" href="_i_layer_support_8hpp_source.xhtml#l00041">ILayerSupport::descriptor</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a1db19222ac424bd7162142ddf929fd2a">DetectionPostProcess</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a3025cdaab2deb0bb2cd642449e570833">Division</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4abcd30d7ea97ad20c2cddc0f47e6b70c7">ElementwiseUnary</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4adb3e3f51c9107e26c9bccf9a188ce2ed">Fill</a>, <a class="el" href="namespacearmnn.xhtml#adf2e5515c4c36a3e7e46bb8b83c6754eaf3f6d0343d56ce88ce7958170ed05cb3">Floor</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4acab78faff25393e9defd1911cb58133e">FullyConnected</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4aad22c799930d644e8468fe44c0312d53">Gather</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a3028cc42e40f9a1f4f8b35556d9715a4">GatherNd</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a324118a6721dd6b8a9b9f4e327df2bf5">Input</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a21baa4498161d195f5bb2e3627344ba4">InstanceNormalization</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00667">NeonLayerSupport::IsActivationSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00680">NeonLayerSupport::IsAdditionSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00693">NeonLayerSupport::IsArgMinMaxSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00705">NeonLayerSupport::IsBatchMatMulSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00719">NeonLayerSupport::IsBatchNormalizationSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00740">NeonLayerSupport::IsBatchToSpaceNdSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00752">NeonLayerSupport::IsCastSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00762">NeonLayerSupport::IsChannelShuffleSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00774">NeonLayerSupport::IsComparisonSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00789">NeonLayerSupport::IsConcatSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00828">NeonLayerSupport::IsConstantSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00836">NeonLayerSupport::IsConvertFp16ToFp32Supported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00846">NeonLayerSupport::IsConvertFp32ToFp16Supported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00856">NeonLayerSupport::IsConvolution2dSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00889">NeonLayerSupport::IsConvolution3dSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00922">NeonLayerSupport::IsDepthToSpaceSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00934">NeonLayerSupport::IsDepthwiseConvolutionSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00951">NeonLayerSupport::IsDequantizeSupported()</a>, <a class="el" href="_layer_support_base_8cpp_source.xhtml#l00233">LayerSupportBase::IsDetectionPostProcessSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01232">NeonLayerSupport::IsDivisionSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00978">NeonLayerSupport::IsElementwiseUnarySupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01030">NeonLayerSupport::IsFillSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01042">NeonLayerSupport::IsFloorSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01057">NeonLayerSupport::IsFullyConnectedSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01088">NeonLayerSupport::IsGatherNdSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01074">NeonLayerSupport::IsGatherSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01100">NeonLayerSupport::IsInputSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01106">NeonLayerSupport::IsInstanceNormalizationSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01118">NeonLayerSupport::IsL2NormalizationSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01126">NeonLayerSupport::IsLogicalBinarySupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01151">NeonLayerSupport::IsLogSoftmaxSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01159">NeonLayerSupport::IsLstmSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01183">NeonLayerSupport::IsMaximumSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01195">NeonLayerSupport::IsMeanSupported()</a>, <a class="el" href="_layer_support_base_8cpp_source.xhtml#l00390">LayerSupportBase::IsMemCopySupported()</a>, <a class="el" href="_layer_support_base_8cpp_source.xhtml#l00397">LayerSupportBase::IsMemImportSupported()</a>, <a class="el" href="_layer_support_base_8cpp_source.xhtml#l00404">LayerSupportBase::IsMergeSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01207">NeonLayerSupport::IsMinimumSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01219">NeonLayerSupport::IsMultiplicationSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01245">NeonLayerSupport::IsNormalizationSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01257">NeonLayerSupport::IsOutputSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01263">NeonLayerSupport::IsPadSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01275">NeonLayerSupport::IsPermuteSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01283">NeonLayerSupport::IsPooling2dSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01291">NeonLayerSupport::IsPooling3dSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01299">NeonLayerSupport::IsPreluSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01307">NeonLayerSupport::IsQLstmSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01352">NeonLayerSupport::IsQuantizedLstmSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01342">NeonLayerSupport::IsQuantizeSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01370">NeonLayerSupport::IsReduceSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01382">NeonLayerSupport::IsReshapeSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01394">NeonLayerSupport::IsResizeSupported()</a>, <a class="el" href="_layer_support_base_8cpp_source.xhtml#l00551">LayerSupportBase::IsShapeSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01406">NeonLayerSupport::IsSliceSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01418">NeonLayerSupport::IsSoftmaxSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01426">NeonLayerSupport::IsSpaceToBatchNdSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01438">NeonLayerSupport::IsSpaceToDepthSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01450">NeonLayerSupport::IsSplitterSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01483">NeonLayerSupport::IsStackSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01495">NeonLayerSupport::IsStridedSliceSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01507">NeonLayerSupport::IsSubtractionSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01520">NeonLayerSupport::IsTransposeConvolution2dSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01536">NeonLayerSupport::IsTransposeSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01544">NeonLayerSupport::IsUnidirectionalSequenceLstmSupported()</a>, <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>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a46f3ea056caa3126b91f3f70beea068c">Map</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a8321e79c278ec510f63675c040594892">Maximum</a>, <a class="el" href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0a3d6c9ac08ada31c184094bbc67afe00d">Mean</a>, <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>, <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>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4afa662c6eb71caef475b2b981ce8eccd7">Permute</a>, <a class="el" href="_polymorphic_downcast_8hpp_source.xhtml#l00074">PolymorphicDowncast()</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4ad662867a41bfb30b9f75dda2b5849001">Pooling2d</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a2b3140dc366b9fcd25ed786a79d1817c">Pooling3d</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a0c5967f09e0669c840ebb1ed0da85e32">Prelu</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a91880b71ea6d007439b7bc7c320b5c25">QLstm</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4aca39930e22f40d10155a57dba32240bb">Quantize</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a890a37ff3bfe123414ba7e6f052b49f3">QuantizedLstm</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a021da1b20f73dc252361a54d80497ef3">Rank</a>, <a class="el" href="_i_layer_support_8hpp_source.xhtml#l00043">ILayerSupport::reasonIfUnsupported</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4aec4875f03ff0bb0b26cf76ac7f41e3c8">Reduce</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4aa7c59ccedc6a3bd90c17f3b990afefad">Reshape</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a9d723d04c40bfd81835c0766a698cf63">Resize</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a880c1273b27d27cfc82004c3a4b205c9">Shape</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4ad140d37ad98c12ccd8e1c432f548bcdb">Slice</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a31d953b9d49a6b4378f45097047976d0">Softmax</a>, <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>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4aa31904f2b3479b5a00137fd985974b4d">StridedSlice</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a6eb8b8b560161603402c0238b3a7d8b0">Subtraction</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4aaf70b1ac863830a4e1ce6268c8399f54">Transpose</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a71b23d26c0f5d20416d6c77754f9806a">TransposeConvolution2d</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a300124b2433e0376ec4b19251ac3a9e5">UnidirectionalSequenceLstm</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a48180ddd584de21589006d56a86d3410">Unmap</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>
+<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; <span class="keywordflow">switch</span> (type)</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">case</span> <a class="code" href="namespacearmnn.xhtml#a7636fbbc4f8ea2d0cf9f3ac2d12a4c62">LayerType::Activation</a>:</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keywordflow">return</span> support.IsActivationSupported(infos[0],</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; infos[1],</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; *(PolymorphicDowncast&lt;const ActivationDescriptor*&gt;(&amp;descriptor)),</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; reasonIfUnsupported);</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keywordflow">case</span> LayerType::Addition:</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keywordflow">return</span> support.IsAdditionSupported(infos[0], infos[1], infos[2], reasonIfUnsupported);</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad441be836a142e8935e0413f4a22c9ec">LayerType::ArgMinMax</a>:</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keywordflow">return</span> support.IsArgMinMaxSupported(infos[0],</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; infos[1],</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; *(PolymorphicDowncast&lt;const ArgMinMaxDescriptor*&gt;(&amp;descriptor)),</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; reasonIfUnsupported);</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="keywordflow">case</span> LayerType::BatchMatMul:</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keywordflow">return</span> support.IsBatchMatMulSupported(infos[0],</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; infos[1],</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; infos[2],</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; *(PolymorphicDowncast&lt;const BatchMatMulDescriptor*&gt;(&amp;descriptor)),</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; reasonIfUnsupported);</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="keywordflow">case</span> LayerType::BatchNormalization:</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keywordflow">return</span> support.IsBatchNormalizationSupported(infos[0],</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; infos[1],</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; infos[2],</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; infos[3],</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; infos[4],</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; infos[5],</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; *(<a class="code" href="namespacearmnn.xhtml#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a>&lt;<span class="keyword">const</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; BatchNormalizationDescriptor*&gt;(&amp;descriptor)),</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; reasonIfUnsupported);</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#a8746512fab5ec10c2c57800c66311ba7">LayerType::BatchToSpaceNd</a>:</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="keywordflow">return</span> support.IsBatchToSpaceNdSupported(infos[0],</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; infos[1],</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; *(<a class="code" href="namespacearmnn.xhtml#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a>&lt;<span class="keyword">const</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; BatchToSpaceNdDescriptor*&gt;(&amp;descriptor)),</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; reasonIfUnsupported);</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keywordflow">case</span> LayerType::Cast:</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keywordflow">return</span> support.IsCastSupported(infos[0], infos[1], reasonIfUnsupported);</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keywordflow">case</span> LayerType::ChannelShuffle:</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keywordflow">return</span> support.IsChannelShuffleSupported(infos[0],</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; infos[1],</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; *(<a class="code" href="namespacearmnn.xhtml#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a>&lt;<span class="keyword">const</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; ChannelShuffleDescriptor*&gt;(&amp;descriptor)),</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; reasonIfUnsupported);</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordflow">case</span> LayerType::Comparison:</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="keywordflow">return</span> support.IsComparisonSupported(infos[0],</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; infos[1],</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; infos[2],</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; *(PolymorphicDowncast&lt;const ComparisonDescriptor*&gt;(&amp;descriptor)),</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; reasonIfUnsupported);</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="keywordflow">case</span> LayerType::Concat:</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; std::vector&lt;const TensorInfo*&gt; inputInfos;</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keywordflow">for</span> (uint32_t i = 0; i &lt; (infos.size() - 1); i++)</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; inputInfos.push_back(&amp;infos[i]);</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="keywordflow">return</span> support.IsConcatSupported(inputInfos,</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; infos[infos.size() - 1],</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; *(PolymorphicDowncast&lt;const OriginsDescriptor*&gt;(&amp;descriptor)),</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; reasonIfUnsupported);</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">case</span> LayerType::Constant:</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keywordflow">return</span> support.IsConstantSupported(infos[0], reasonIfUnsupported);</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keywordflow">case</span> LayerType::ConvertFp16ToFp32:</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="keywordflow">return</span> support.IsConvertFp16ToFp32Supported(infos[0], infos[1], reasonIfUnsupported);</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="keywordflow">case</span> LayerType::ConvertFp32ToFp16:</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="keywordflow">return</span> support.IsConvertFp32ToFp16Supported(infos[0], infos[1], reasonIfUnsupported);</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keywordflow">case</span> LayerType::Convolution2d:</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> (infos.size() != 4)</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="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Invalid number of TransposeConvolution2d TensorInfos. &quot;</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="stringliteral">&quot;TensorInfos should be of format: {input, output, weights, biases}.&quot;</span>);</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="keyword">auto</span> desc = *(PolymorphicDowncast&lt;const Convolution2dDescriptor*&gt;(&amp;descriptor));</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="keywordflow">if</span> (infos[3] == TensorInfo())</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> support.IsConvolution2dSupported(infos[0],</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; infos[1],</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; desc,</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; infos[2],</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; EmptyOptional(),</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; reasonIfUnsupported);</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; <span class="keywordflow">else</span></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> support.IsConvolution2dSupported(infos[0],</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; infos[1],</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; desc,</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; infos[2],</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; infos[3],</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; reasonIfUnsupported);</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; }</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="keywordflow">case</span> LayerType::Convolution3d:</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">if</span> (infos.size() != 4)</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">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Invalid number of Convolution3d TensorInfos. &quot;</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="stringliteral">&quot;TensorInfos should be of format: {input, output, weights, biases}.&quot;</span>);</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; }</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; </div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keyword">auto</span> desc = *(PolymorphicDowncast&lt;const Convolution3dDescriptor*&gt;(&amp;descriptor));</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keywordflow">if</span> (infos[3] == TensorInfo())</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">return</span> support.IsConvolution3dSupported(infos[0],</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; infos[1],</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; desc,</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; infos[2],</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; EmptyOptional(),</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; reasonIfUnsupported);</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; <span class="keywordflow">return</span> support.IsConvolution3dSupported(infos[0],</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; infos[1],</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; desc,</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; infos[2],</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; infos[3],</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; reasonIfUnsupported);</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">case</span> <a class="code" href="namespacearmnn.xhtml#ab023d9a7687e35c0f108458a094c1f56">LayerType::DepthToSpace</a>:</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keywordflow">return</span> support.IsDepthToSpaceSupported(infos[0],</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; infos[1],</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; *(PolymorphicDowncast&lt;const DepthToSpaceDescriptor*&gt;(&amp;descriptor)),</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; reasonIfUnsupported);</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keywordflow">case</span> LayerType::DepthwiseConvolution2d:</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="keywordflow">if</span> (infos.size() != 4)</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">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Invalid number of DepthwiseConvolution2d TensorInfos. &quot;</span></div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="stringliteral">&quot;TensorInfos should be of format: {input, output, weights, biases}.&quot;</span>);</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; }</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; </div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <span class="keyword">auto</span> desc = *(PolymorphicDowncast&lt;const DepthwiseConvolution2dDescriptor*&gt;(&amp;descriptor));</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="keywordflow">if</span> (infos[3] == TensorInfo())</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; <span class="keywordflow">return</span> support.IsDepthwiseConvolutionSupported(infos[0],</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; infos[1],</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; desc,</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; infos[2],</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; EmptyOptional(),</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; reasonIfUnsupported);</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">else</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; <span class="keywordflow">return</span> support.IsDepthwiseConvolutionSupported(infos[0],</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; infos[1],</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; desc,</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; infos[2],</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; infos[3],</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; reasonIfUnsupported);</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">case</span> <a class="code" href="namespacearmnn.xhtml#a855293b1be0581fb61ef6a1c5b027d0f">LayerType::Dequantize</a>:</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="keywordflow">return</span> support.IsDequantizeSupported(infos[0], infos[1], reasonIfUnsupported);</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ae76ce23fa9fc18e56448d52b37dd3f32">LayerType::DetectionPostProcess</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="keyword">auto</span> desc = *(PolymorphicDowncast&lt;const DetectionPostProcessDescriptor*&gt;(&amp;descriptor));</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <span class="keywordflow">return</span> support.IsDetectionPostProcessSupported(infos[0],</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; infos[1],</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; infos[2],</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; infos[3],</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; infos[4],</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; infos[5],</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; infos[6],</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; desc,</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; reasonIfUnsupported);</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; }</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <span class="keywordflow">case</span> LayerType::Division:</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <span class="keywordflow">return</span> support.IsDivisionSupported(infos[0], infos[1], infos[2], reasonIfUnsupported);</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <span class="keywordflow">case</span> LayerType::ElementwiseUnary:</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <span class="keywordflow">return</span> support.IsElementwiseUnarySupported(infos[0],</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; infos[1],</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; *(<a class="code" href="namespacearmnn.xhtml#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a>&lt;<span class="keyword">const</span></div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; ElementwiseUnaryDescriptor*&gt;(&amp;descriptor)),</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; reasonIfUnsupported);</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#a88bebdfe6309aa2cd6831cfa73c296f0">LayerType::Fill</a>:</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="keywordflow">return</span> support.IsFillSupported(infos[0],</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; infos[1],</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; *(PolymorphicDowncast&lt;const FillDescriptor*&gt;(&amp;descriptor)),</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; reasonIfUnsupported);</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="keywordflow">case</span> LayerType::Floor:</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keywordflow">return</span> support.IsFloorSupported(infos[0], infos[1], reasonIfUnsupported);</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#a435f9350a94adfbb0d5b9abb5f430914">LayerType::FullyConnected</a>:</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <span class="keywordflow">return</span> support.IsFullyConnectedSupported(infos[0],</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; infos[1],</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; infos[2],</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; infos[3],</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; *(<a class="code" href="namespacearmnn.xhtml#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a>&lt;<span class="keyword">const</span></div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; FullyConnectedDescriptor*&gt;(&amp;descriptor)),</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; reasonIfUnsupported);</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#a4f1a1b88b01d8dfda3803776e0778a49">LayerType::Gather</a>:</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <span class="keywordflow">return</span> support.IsGatherSupported(infos[0],</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; infos[1],</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; infos[2],</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; *(PolymorphicDowncast&lt;const GatherDescriptor*&gt;(&amp;descriptor)),</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; reasonIfUnsupported);</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; <span class="keywordflow">case</span> LayerType::GatherNd:</div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="keywordflow">return</span> support.IsGatherNdSupported(infos[0],</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; infos[1],</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; infos[2],</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; reasonIfUnsupported);</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="keywordflow">case</span> LayerType::Input:</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="keywordflow">return</span> support.IsInputSupported(infos[0], reasonIfUnsupported);</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="keywordflow">case</span> LayerType::InstanceNormalization:</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <span class="keywordflow">return</span> support.IsInstanceNormalizationSupported(infos[0],</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; infos[1],</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; *(<a class="code" href="namespacearmnn.xhtml#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a>&lt;<span class="keyword">const</span></div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; InstanceNormalizationDescriptor*&gt;(&amp;descriptor)),</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; reasonIfUnsupported);</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <span class="keywordflow">case</span> LayerType::L2Normalization:</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <span class="keywordflow">return</span> support.IsL2NormalizationSupported(infos[0],</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; infos[1],</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; *(<a class="code" href="namespacearmnn.xhtml#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a>&lt;<span class="keyword">const</span></div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; L2NormalizationDescriptor*&gt;(&amp;descriptor)),</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; reasonIfUnsupported);</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="keywordflow">case</span> LayerType::LogicalBinary:</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="keywordflow">return</span> support.IsLogicalBinarySupported(infos[0],</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; infos[1],</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; infos[2],</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; *(<a class="code" href="namespacearmnn.xhtml#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a>&lt;<span class="keyword">const</span></div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; LogicalBinaryDescriptor*&gt;(&amp;descriptor)),</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; reasonIfUnsupported);</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ac52e04c0e349e25bcdaa72c27395ef8f">LayerType::LogSoftmax</a>:</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="keywordflow">return</span> support.IsLogSoftmaxSupported(infos[0],</div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; infos[1],</div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; *(PolymorphicDowncast&lt;const LogSoftmaxDescriptor*&gt;(&amp;descriptor)),</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; reasonIfUnsupported);</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <span class="keywordflow">case</span> LayerType::Lstm:</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <span class="keywordflow">return</span> support.IsLstmSupported(infos[0],</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; infos[1],</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; infos[2],</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; infos[3],</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; infos[4],</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; infos[5],</div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; infos[6],</div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; *(PolymorphicDowncast&lt;const LstmDescriptor*&gt;(&amp;descriptor)),</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; lstmParamsInfo.value(),</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; reasonIfUnsupported);</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; <span class="keywordflow">case</span> LayerType::Map:</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <span class="keywordflow">case</span> LayerType::Maximum:</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="keywordflow">return</span> support.IsMaximumSupported(infos[0], infos[1], infos[2], reasonIfUnsupported);</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="keywordflow">case</span> LayerType::Mean:</div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="keywordflow">return</span> support.IsMeanSupported(infos[0],</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; infos[1],</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; *(PolymorphicDowncast&lt;const MeanDescriptor*&gt;(&amp;descriptor)),</div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; reasonIfUnsupported);</div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; <span class="keywordflow">case</span> LayerType::MemCopy:</div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <span class="keywordflow">return</span> support.IsMemCopySupported(infos[0], infos[1], reasonIfUnsupported);</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; <span class="keywordflow">case</span> LayerType::MemImport:</div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <span class="keywordflow">return</span> support.IsMemImportSupported(infos[0], infos[1], reasonIfUnsupported);</div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <span class="keywordflow">case</span> LayerType::Merge:</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <span class="keywordflow">return</span> support.IsMergeSupported(infos[0],</div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; infos[1],</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; infos[2],</div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; reasonIfUnsupported);</div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="keywordflow">case</span> LayerType::Minimum:</div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <span class="keywordflow">return</span> support.IsMinimumSupported(infos[0], infos[1], infos[2], reasonIfUnsupported);</div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keywordflow">case</span> LayerType::Multiplication:</div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <span class="keywordflow">return</span> support.IsMultiplicationSupported(infos[0], infos[1], infos[2], reasonIfUnsupported);</div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <span class="keywordflow">case</span> LayerType::Normalization:</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <span class="keywordflow">return</span> support.IsNormalizationSupported(infos[0],</div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; infos[1],</div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; *(<a class="code" href="namespacearmnn.xhtml#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a>&lt;<span class="keyword">const</span></div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; NormalizationDescriptor*&gt;(&amp;descriptor)),</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; reasonIfUnsupported);</div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <span class="keywordflow">case</span> LayerType::Output:</div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <span class="keywordflow">return</span> support.IsOutputSupported(infos[0], reasonIfUnsupported);</div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#a3c62b52d21e28088f040a4b6c2a06022">LayerType::Pad</a>:</div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; <span class="keywordflow">return</span> support.IsPadSupported(infos[0],</div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; infos[1],</div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; *(PolymorphicDowncast&lt;const PadDescriptor*&gt;(&amp;descriptor)),</div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; reasonIfUnsupported);</div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn_utils.xhtml#af3c74017185773dd61d8ca6662d65d43">LayerType::Permute</a>:</div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; <span class="keywordflow">return</span> support.IsPermuteSupported(infos[0],</div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; infos[1],</div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; *(PolymorphicDowncast&lt;const PermuteDescriptor*&gt;(&amp;descriptor)),</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; reasonIfUnsupported);</div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ae2e93e304cf516841c521e3eaee025cd">LayerType::Pooling2d</a>:</div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; <span class="keywordflow">return</span> support.IsPooling2dSupported(infos[0],</div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; infos[1],</div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; *(PolymorphicDowncast&lt;const Pooling2dDescriptor*&gt;(&amp;descriptor)),</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; reasonIfUnsupported);</div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#a69acbef24cd1cc572b93fc3e1e6ac030">LayerType::Pooling3d</a>:</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <span class="keywordflow">return</span> support.IsPooling3dSupported(infos[0],</div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; infos[1],</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; *(PolymorphicDowncast&lt;const Pooling3dDescriptor*&gt;(&amp;descriptor)),</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; reasonIfUnsupported);</div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <span class="keywordflow">case</span> LayerType::Prelu:</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; <span class="keywordflow">return</span> support.IsPreluSupported(infos[0], infos[1], infos[2], reasonIfUnsupported);</div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; <span class="keywordflow">case</span> LayerType::QLstm:</div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <span class="keywordflow">return</span> support.IsQLstmSupported(infos[0],</div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; infos[1],</div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; infos[2],</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; infos[3],</div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; infos[4],</div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; infos[5],</div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; *(PolymorphicDowncast&lt;const QLstmDescriptor*&gt;(&amp;descriptor)),</div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; lstmParamsInfo.value(),</div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; reasonIfUnsupported);</div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad773a034fb9983e15f3094b4c5c7c30c">LayerType::Quantize</a>:</div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <span class="keywordflow">return</span> support.IsQuantizeSupported(infos[0], infos[1], reasonIfUnsupported);</div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <span class="keywordflow">case</span> LayerType::QuantizedLstm:</div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; <span class="keywordflow">return</span> support.IsQuantizedLstmSupported(infos[0],</div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; infos[1],</div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; infos[2],</div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; infos[3],</div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; infos[4],</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; quantizedLstmParamsInfo.value(),</div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; reasonIfUnsupported);</div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <span class="keywordflow">case</span> LayerType::Rank:</div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; <span class="keywordflow">case</span> LayerType::Reshape:</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; <span class="keywordflow">return</span> support.IsReshapeSupported(infos[0],</div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; infos[1],</div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; *(PolymorphicDowncast&lt;const ReshapeDescriptor*&gt;(&amp;descriptor)),</div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; reasonIfUnsupported);</div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#a6894316aa645fd5e837739135bef04bb">LayerType::Resize</a>:</div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; <span class="keywordflow">return</span> support.IsResizeSupported(infos[0],</div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; infos[1],</div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; *(PolymorphicDowncast&lt;const ResizeDescriptor*&gt;(&amp;descriptor)),</div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; reasonIfUnsupported);</div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad64b7a275169ba1b1ba2d15679f7e8b1">LayerType::Reduce</a>:</div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <span class="keywordflow">return</span> support.IsReduceSupported(infos[0],</div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; infos[1],</div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; *(PolymorphicDowncast&lt;const ReduceDescriptor*&gt;(&amp;descriptor)),</div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; reasonIfUnsupported);</div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; <span class="keywordflow">case</span> LayerType::Shape:</div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; <span class="keywordflow">return</span> support.IsShapeSupported(infos[0],</div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; infos[1],</div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; reasonIfUnsupported);</div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#a044ea0cc993d4d1fbe4ec877b17b8d39">LayerType::Slice</a>:</div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; <span class="keywordflow">return</span> support.IsSliceSupported(infos[0],</div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; infos[1],</div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; *(PolymorphicDowncast&lt;const SliceDescriptor*&gt;(&amp;descriptor)),</div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; reasonIfUnsupported);</div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#aa999ff2585ad75b95954a9323f63c32b">LayerType::Softmax</a>:</div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; <span class="keywordflow">return</span> support.IsSoftmaxSupported(infos[0],</div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; infos[1],</div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; *(PolymorphicDowncast&lt;const SoftmaxDescriptor*&gt;(&amp;descriptor)),</div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; reasonIfUnsupported);</div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#a4a180e425d4c19b2cdea4ce5760180e1">LayerType::SpaceToBatchNd</a>:</div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; <span class="keywordflow">return</span> support.IsSpaceToBatchNdSupported(infos[0],</div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; infos[1],</div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; *(<a class="code" href="namespacearmnn.xhtml#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a>&lt;<span class="keyword">const</span></div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; SpaceToBatchNdDescriptor*&gt;(&amp;descriptor)),</div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; reasonIfUnsupported);</div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#a5e1dc69443b64ad16b669388a6023f7a">LayerType::SpaceToDepth</a>:</div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; <span class="keywordflow">return</span> support.IsSpaceToDepthSupported(infos[0],</div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; infos[1],</div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; *(PolymorphicDowncast&lt;const SpaceToDepthDescriptor*&gt;(&amp;descriptor)),</div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; reasonIfUnsupported);</div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#a0fdab6fc39d90c5beea97f4ca0a584c4">LayerType::Splitter</a>:</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; std::vector&lt;TensorInfo&gt; outputInfos;</div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; <span class="keywordflow">for</span> (uint32_t i = 1; i &lt; infos.size(); i++)</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; {</div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; outputInfos.push_back(infos[i]);</div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; }</div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <span class="keywordflow">return</span> support.IsSplitterSupported(infos[0],</div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; {outputInfos.begin(), outputInfos.end()},</div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; *(PolymorphicDowncast&lt;const ViewsDescriptor*&gt;(&amp;descriptor)),</div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; reasonIfUnsupported);</div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; }</div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ac245fda400649db10eed0dc96c1b5c37">LayerType::Stack</a>:</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;const TensorInfo*&gt; inputInfos;</div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; <span class="keywordflow">for</span> (uint32_t i = 0; i &lt; infos.size() - 1; i++)</div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; {</div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; inputInfos.push_back(&amp;infos[i]);</div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; }</div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; <span class="keywordflow">return</span> support.IsStackSupported(inputInfos,</div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; infos[infos.size() - 1],</div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; *(PolymorphicDowncast&lt;const StackDescriptor*&gt;(&amp;descriptor)),</div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; reasonIfUnsupported);</div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; }</div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#a86d7a7168ac00b75b4971f9aad623698">LayerType::StridedSlice</a>:</div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; <span class="keywordflow">return</span> support.IsStridedSliceSupported(infos[0],</div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; infos[1],</div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; *(PolymorphicDowncast&lt;const StridedSliceDescriptor*&gt;(&amp;descriptor)),</div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; reasonIfUnsupported);</div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; <span class="keywordflow">case</span> LayerType::Subtraction:</div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; <span class="keywordflow">return</span> support.IsSubtractionSupported(infos[0], infos[1], infos[2], reasonIfUnsupported);</div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn_utils.xhtml#a405d5f966ec992d1717711e5a2d7909d">LayerType::Transpose</a>:</div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; <span class="keywordflow">return</span> support.IsTransposeSupported(infos[0],</div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; infos[1],</div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; *(PolymorphicDowncast&lt;const TransposeDescriptor*&gt;(&amp;descriptor)),</div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; reasonIfUnsupported);</div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; <span class="keywordflow">case</span> LayerType::TransposeConvolution2d:</div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; {</div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; <span class="keywordflow">if</span> (infos.size() != 4)</div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; {</div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Invalid number of TransposeConvolution2d TensorInfos. &quot;</span></div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; <span class="stringliteral">&quot;TensorInfos should be of format: {input, output, weights, biases}.&quot;</span>);</div>
+<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; </div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; <span class="keyword">auto</span> desc = *(PolymorphicDowncast&lt;const TransposeConvolution2dDescriptor*&gt;(&amp;descriptor));</div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; <span class="keywordflow">if</span> (infos[3] == TensorInfo())</div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; {</div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; <span class="keywordflow">return</span> support.IsTransposeConvolution2dSupported(infos[0],</div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; infos[1],</div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; desc,</div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; infos[2],</div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; EmptyOptional(),</div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; reasonIfUnsupported);</div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; }</div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; <span class="keywordflow">else</span></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; <span class="keywordflow">return</span> support.IsTransposeConvolution2dSupported(infos[0],</div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; infos[1],</div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; desc,</div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; infos[2],</div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; infos[3],</div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; reasonIfUnsupported);</div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; }</div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; }</div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; <span class="keywordflow">case</span> LayerType::UnidirectionalSequenceLstm:</div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; {</div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; <span class="keyword">auto</span> desc = *(PolymorphicDowncast&lt;const UnidirectionalSequenceLstmDescriptor*&gt;(&amp;descriptor));</div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; <span class="keywordflow">return</span> support.IsUnidirectionalSequenceLstmSupported(infos[0],</div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; infos[1],</div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; infos[2],</div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; infos[3],</div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; infos[4],</div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; infos[5],</div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; desc,</div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; lstmParamsInfo.value(),</div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; reasonIfUnsupported);</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; <span class="keywordflow">case</span> LayerType::Unmap:</div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; <span class="comment">// layers not supported in neon by default:</span></div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; <span class="comment">// debug, fakequantization, precompiled,</span></div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <span class="comment">// standin, switch</span></div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; }</div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160;}</div>
+</div><!-- fragment -->
+<p class="reference">References <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>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a9882ff3cfed27d6161c20a305e7a3484">BatchMatMul</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4ae4743c3ec15d1d84169b17264634692e">BatchNormalization</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a6ee06c6045d0c5b6565a247955ef0fc2">BatchToSpaceNd</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a4cd9f3996d60790cd11c04f842ebc43c">Cast</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a0ca5f33c1d35fd4105d3a26a2823f9dd">ChannelShuffle</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4af6c0e3a1c3cfabd32ae8d3ae741fcf0a">Comparison</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4ae20f0f2826a6549809f050b86274567f">Concat</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4acb17869fe51048b5a5c4c6106551a255">Constant</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a912a4b4d73726c282e3f79aa2c390d6c">ConvertFp16ToFp32</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#a56943a0946e5f15e5e58054b8e7a04a4a583550d0f265fd3756f7de0e42c51953">Convolution3d</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a731729ad1b2c0eb9399b62c770b3482d">DepthToSpace</a>, <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>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4abcd30d7ea97ad20c2cddc0f47e6b70c7">ElementwiseUnary</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4adb3e3f51c9107e26c9bccf9a188ce2ed">Fill</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4af3f6d0343d56ce88ce7958170ed05cb3">Floor</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4acab78faff25393e9defd1911cb58133e">FullyConnected</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4aad22c799930d644e8468fe44c0312d53">Gather</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a3028cc42e40f9a1f4f8b35556d9715a4">GatherNd</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a324118a6721dd6b8a9b9f4e327df2bf5">Input</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a21baa4498161d195f5bb2e3627344ba4">InstanceNormalization</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00667">NeonLayerSupport::IsActivationSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00680">NeonLayerSupport::IsAdditionSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00693">NeonLayerSupport::IsArgMinMaxSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00705">NeonLayerSupport::IsBatchMatMulSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00719">NeonLayerSupport::IsBatchNormalizationSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00740">NeonLayerSupport::IsBatchToSpaceNdSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00752">NeonLayerSupport::IsCastSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00762">NeonLayerSupport::IsChannelShuffleSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00774">NeonLayerSupport::IsComparisonSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00789">NeonLayerSupport::IsConcatSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00828">NeonLayerSupport::IsConstantSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00836">NeonLayerSupport::IsConvertFp16ToFp32Supported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00846">NeonLayerSupport::IsConvertFp32ToFp16Supported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00856">NeonLayerSupport::IsConvolution2dSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00889">NeonLayerSupport::IsConvolution3dSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00922">NeonLayerSupport::IsDepthToSpaceSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00934">NeonLayerSupport::IsDepthwiseConvolutionSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00951">NeonLayerSupport::IsDequantizeSupported()</a>, <a class="el" href="_layer_support_base_8cpp_source.xhtml#l00233">LayerSupportBase::IsDetectionPostProcessSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01232">NeonLayerSupport::IsDivisionSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00978">NeonLayerSupport::IsElementwiseUnarySupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01030">NeonLayerSupport::IsFillSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01042">NeonLayerSupport::IsFloorSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01057">NeonLayerSupport::IsFullyConnectedSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01088">NeonLayerSupport::IsGatherNdSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01074">NeonLayerSupport::IsGatherSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01100">NeonLayerSupport::IsInputSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01106">NeonLayerSupport::IsInstanceNormalizationSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01118">NeonLayerSupport::IsL2NormalizationSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01126">NeonLayerSupport::IsLogicalBinarySupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01151">NeonLayerSupport::IsLogSoftmaxSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01159">NeonLayerSupport::IsLstmSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01183">NeonLayerSupport::IsMaximumSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01195">NeonLayerSupport::IsMeanSupported()</a>, <a class="el" href="_layer_support_base_8cpp_source.xhtml#l00390">LayerSupportBase::IsMemCopySupported()</a>, <a class="el" href="_layer_support_base_8cpp_source.xhtml#l00397">LayerSupportBase::IsMemImportSupported()</a>, <a class="el" href="_layer_support_base_8cpp_source.xhtml#l00404">LayerSupportBase::IsMergeSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01207">NeonLayerSupport::IsMinimumSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01219">NeonLayerSupport::IsMultiplicationSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01245">NeonLayerSupport::IsNormalizationSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01257">NeonLayerSupport::IsOutputSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01263">NeonLayerSupport::IsPadSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01275">NeonLayerSupport::IsPermuteSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01283">NeonLayerSupport::IsPooling2dSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01291">NeonLayerSupport::IsPooling3dSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01299">NeonLayerSupport::IsPreluSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01307">NeonLayerSupport::IsQLstmSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01352">NeonLayerSupport::IsQuantizedLstmSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01342">NeonLayerSupport::IsQuantizeSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01370">NeonLayerSupport::IsReduceSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01382">NeonLayerSupport::IsReshapeSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01394">NeonLayerSupport::IsResizeSupported()</a>, <a class="el" href="_layer_support_base_8cpp_source.xhtml#l00551">LayerSupportBase::IsShapeSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01406">NeonLayerSupport::IsSliceSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01418">NeonLayerSupport::IsSoftmaxSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01426">NeonLayerSupport::IsSpaceToBatchNdSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01438">NeonLayerSupport::IsSpaceToDepthSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01450">NeonLayerSupport::IsSplitterSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01483">NeonLayerSupport::IsStackSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01495">NeonLayerSupport::IsStridedSliceSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01507">NeonLayerSupport::IsSubtractionSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01520">NeonLayerSupport::IsTransposeConvolution2dSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01536">NeonLayerSupport::IsTransposeSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01544">NeonLayerSupport::IsUnidirectionalSequenceLstmSupported()</a>, <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>, <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>, <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>, <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>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4afa662c6eb71caef475b2b981ce8eccd7">Permute</a>, <a class="el" href="_polymorphic_downcast_8hpp_source.xhtml#l00074">PolymorphicDowncast()</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4ad662867a41bfb30b9f75dda2b5849001">Pooling2d</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a2b3140dc366b9fcd25ed786a79d1817c">Pooling3d</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a0c5967f09e0669c840ebb1ed0da85e32">Prelu</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a91880b71ea6d007439b7bc7c320b5c25">QLstm</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4aca39930e22f40d10155a57dba32240bb">Quantize</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a890a37ff3bfe123414ba7e6f052b49f3">QuantizedLstm</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a021da1b20f73dc252361a54d80497ef3">Rank</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4aec4875f03ff0bb0b26cf76ac7f41e3c8">Reduce</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4aa7c59ccedc6a3bd90c17f3b990afefad">Reshape</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a9d723d04c40bfd81835c0766a698cf63">Resize</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a880c1273b27d27cfc82004c3a4b205c9">Shape</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4ad140d37ad98c12ccd8e1c432f548bcdb">Slice</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a31d953b9d49a6b4378f45097047976d0">Softmax</a>, <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>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4aa31904f2b3479b5a00137fd985974b4d">StridedSlice</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a6eb8b8b560161603402c0238b3a7d8b0">Subtraction</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4aaf70b1ac863830a4e1ce6268c8399f54">Transpose</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a71b23d26c0f5d20416d6c77754f9806a">TransposeConvolution2d</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a300124b2433e0376ec4b19251ac3a9e5">UnidirectionalSequenceLstm</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a48180ddd584de21589006d56a86d3410">Unmap</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="_neon_layer_support_8cpp_source.xhtml#l00619">NeonLayerSupport::IsLayerSupported()</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; <span class="keywordflow">switch</span> (type)</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">case</span> <a class="code" href="namespacearmnn.xhtml#a7636fbbc4f8ea2d0cf9f3ac2d12a4c62">LayerType::Activation</a>:</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keywordflow">return</span> support.IsActivationSupported(infos[0],</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; infos[1],</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; *(PolymorphicDowncast&lt;const ActivationDescriptor*&gt;(&amp;descriptor)),</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; reasonIfUnsupported);</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keywordflow">case</span> LayerType::Addition:</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keywordflow">return</span> support.IsAdditionSupported(infos[0], infos[1], infos[2], reasonIfUnsupported);</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad441be836a142e8935e0413f4a22c9ec">LayerType::ArgMinMax</a>:</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keywordflow">return</span> support.IsArgMinMaxSupported(infos[0],</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; infos[1],</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; *(PolymorphicDowncast&lt;const ArgMinMaxDescriptor*&gt;(&amp;descriptor)),</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; reasonIfUnsupported);</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="keywordflow">case</span> LayerType::BatchMatMul:</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keywordflow">return</span> support.IsBatchMatMulSupported(infos[0],</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; infos[1],</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; infos[2],</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; *(PolymorphicDowncast&lt;const BatchMatMulDescriptor*&gt;(&amp;descriptor)),</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; reasonIfUnsupported);</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="keywordflow">case</span> LayerType::BatchNormalization:</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keywordflow">return</span> support.IsBatchNormalizationSupported(infos[0],</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; infos[1],</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; infos[2],</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; infos[3],</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; infos[4],</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; infos[5],</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; *(<a class="code" href="namespacearmnn.xhtml#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a>&lt;<span class="keyword">const</span></div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; BatchNormalizationDescriptor*&gt;(&amp;descriptor)),</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; reasonIfUnsupported);</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#a8746512fab5ec10c2c57800c66311ba7">LayerType::BatchToSpaceNd</a>:</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="keywordflow">return</span> support.IsBatchToSpaceNdSupported(infos[0],</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; infos[1],</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; *(<a class="code" href="namespacearmnn.xhtml#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a>&lt;<span class="keyword">const</span></div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; BatchToSpaceNdDescriptor*&gt;(&amp;descriptor)),</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; reasonIfUnsupported);</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keywordflow">case</span> LayerType::Cast:</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keywordflow">return</span> support.IsCastSupported(infos[0], infos[1], reasonIfUnsupported);</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keywordflow">case</span> LayerType::ChannelShuffle:</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keywordflow">return</span> support.IsChannelShuffleSupported(infos[0],</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; infos[1],</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; *(<a class="code" href="namespacearmnn.xhtml#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a>&lt;<span class="keyword">const</span></div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; ChannelShuffleDescriptor*&gt;(&amp;descriptor)),</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; reasonIfUnsupported);</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordflow">case</span> LayerType::Comparison:</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="keywordflow">return</span> support.IsComparisonSupported(infos[0],</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; infos[1],</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; infos[2],</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; *(PolymorphicDowncast&lt;const ComparisonDescriptor*&gt;(&amp;descriptor)),</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; reasonIfUnsupported);</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="keywordflow">case</span> LayerType::Concat:</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; std::vector&lt;const TensorInfo*&gt; inputInfos;</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keywordflow">for</span> (uint32_t i = 0; i &lt; (infos.size() - 1); i++)</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; inputInfos.push_back(&amp;infos[i]);</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="keywordflow">return</span> support.IsConcatSupported(inputInfos,</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; infos[infos.size() - 1],</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; *(PolymorphicDowncast&lt;const OriginsDescriptor*&gt;(&amp;descriptor)),</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; reasonIfUnsupported);</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">case</span> LayerType::Constant:</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keywordflow">return</span> support.IsConstantSupported(infos[0], reasonIfUnsupported);</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keywordflow">case</span> LayerType::ConvertFp16ToFp32:</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="keywordflow">return</span> support.IsConvertFp16ToFp32Supported(infos[0], infos[1], reasonIfUnsupported);</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="keywordflow">case</span> LayerType::ConvertFp32ToFp16:</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="keywordflow">return</span> support.IsConvertFp32ToFp16Supported(infos[0], infos[1], reasonIfUnsupported);</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keywordflow">case</span> LayerType::Convolution2d:</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> (infos.size() != 4)</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="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Invalid number of TransposeConvolution2d TensorInfos. &quot;</span></div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="stringliteral">&quot;TensorInfos should be of format: {input, output, weights, biases}.&quot;</span>);</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="keyword">auto</span> desc = *(PolymorphicDowncast&lt;const Convolution2dDescriptor*&gt;(&amp;descriptor));</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="keywordflow">if</span> (infos[3] == TensorInfo())</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> support.IsConvolution2dSupported(infos[0],</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; infos[1],</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; desc,</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; infos[2],</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; EmptyOptional(),</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; reasonIfUnsupported);</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; <span class="keywordflow">else</span></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> support.IsConvolution2dSupported(infos[0],</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; infos[1],</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; desc,</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; infos[2],</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; infos[3],</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; reasonIfUnsupported);</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; }</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="keywordflow">case</span> LayerType::Convolution3d:</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">if</span> (infos.size() != 4)</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">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Invalid number of Convolution3d TensorInfos. &quot;</span></div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="stringliteral">&quot;TensorInfos should be of format: {input, output, weights, biases}.&quot;</span>);</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; }</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160;</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keyword">auto</span> desc = *(PolymorphicDowncast&lt;const Convolution3dDescriptor*&gt;(&amp;descriptor));</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keywordflow">if</span> (infos[3] == TensorInfo())</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">return</span> support.IsConvolution3dSupported(infos[0],</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; infos[1],</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; desc,</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; infos[2],</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; EmptyOptional(),</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; reasonIfUnsupported);</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; <span class="keywordflow">return</span> support.IsConvolution3dSupported(infos[0],</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; infos[1],</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; desc,</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; infos[2],</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; infos[3],</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; reasonIfUnsupported);</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">case</span> <a class="code" href="namespacearmnn.xhtml#ab023d9a7687e35c0f108458a094c1f56">LayerType::DepthToSpace</a>:</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keywordflow">return</span> support.IsDepthToSpaceSupported(infos[0],</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; infos[1],</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; *(PolymorphicDowncast&lt;const DepthToSpaceDescriptor*&gt;(&amp;descriptor)),</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; reasonIfUnsupported);</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keywordflow">case</span> LayerType::DepthwiseConvolution2d:</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="keywordflow">if</span> (infos.size() != 4)</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">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Invalid number of DepthwiseConvolution2d TensorInfos. &quot;</span></div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="stringliteral">&quot;TensorInfos should be of format: {input, output, weights, biases}.&quot;</span>);</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; }</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160;</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <span class="keyword">auto</span> desc = *(PolymorphicDowncast&lt;const DepthwiseConvolution2dDescriptor*&gt;(&amp;descriptor));</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="keywordflow">if</span> (infos[3] == TensorInfo())</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; <span class="keywordflow">return</span> support.IsDepthwiseConvolutionSupported(infos[0],</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; infos[1],</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; desc,</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; infos[2],</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; EmptyOptional(),</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; reasonIfUnsupported);</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">else</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; <span class="keywordflow">return</span> support.IsDepthwiseConvolutionSupported(infos[0],</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; infos[1],</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; desc,</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; infos[2],</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; infos[3],</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; reasonIfUnsupported);</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">case</span> <a class="code" href="namespacearmnn.xhtml#a855293b1be0581fb61ef6a1c5b027d0f">LayerType::Dequantize</a>:</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="keywordflow">return</span> support.IsDequantizeSupported(infos[0], infos[1], reasonIfUnsupported);</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ae76ce23fa9fc18e56448d52b37dd3f32">LayerType::DetectionPostProcess</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="keyword">auto</span> desc = *(PolymorphicDowncast&lt;const DetectionPostProcessDescriptor*&gt;(&amp;descriptor));</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <span class="keywordflow">return</span> support.IsDetectionPostProcessSupported(infos[0],</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; infos[1],</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; infos[2],</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; infos[3],</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; infos[4],</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; infos[5],</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; infos[6],</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; desc,</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; reasonIfUnsupported);</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; }</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <span class="keywordflow">case</span> LayerType::Division:</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <span class="keywordflow">return</span> support.IsDivisionSupported(infos[0], infos[1], infos[2], reasonIfUnsupported);</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <span class="keywordflow">case</span> LayerType::ElementwiseUnary:</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <span class="keywordflow">return</span> support.IsElementwiseUnarySupported(infos[0],</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; infos[1],</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; *(<a class="code" href="namespacearmnn.xhtml#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a>&lt;<span class="keyword">const</span></div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; ElementwiseUnaryDescriptor*&gt;(&amp;descriptor)),</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; reasonIfUnsupported);</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#a88bebdfe6309aa2cd6831cfa73c296f0">LayerType::Fill</a>:</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="keywordflow">return</span> support.IsFillSupported(infos[0],</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; infos[1],</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; *(PolymorphicDowncast&lt;const FillDescriptor*&gt;(&amp;descriptor)),</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; reasonIfUnsupported);</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="keywordflow">case</span> LayerType::Floor:</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keywordflow">return</span> support.IsFloorSupported(infos[0], infos[1], reasonIfUnsupported);</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#a435f9350a94adfbb0d5b9abb5f430914">LayerType::FullyConnected</a>:</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <span class="keywordflow">return</span> support.IsFullyConnectedSupported(infos[0],</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; infos[1],</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; infos[2],</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; infos[3],</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; *(<a class="code" href="namespacearmnn.xhtml#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a>&lt;<span class="keyword">const</span></div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; FullyConnectedDescriptor*&gt;(&amp;descriptor)),</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; reasonIfUnsupported);</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#a4f1a1b88b01d8dfda3803776e0778a49">LayerType::Gather</a>:</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <span class="keywordflow">return</span> support.IsGatherSupported(infos[0],</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; infos[1],</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; infos[2],</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; *(PolymorphicDowncast&lt;const GatherDescriptor*&gt;(&amp;descriptor)),</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; reasonIfUnsupported);</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; <span class="keywordflow">case</span> LayerType::GatherNd:</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="keywordflow">return</span> support.IsGatherNdSupported(infos[0],</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; infos[1],</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; infos[2],</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; reasonIfUnsupported);</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="keywordflow">case</span> LayerType::Input:</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="keywordflow">return</span> support.IsInputSupported(infos[0], reasonIfUnsupported);</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="keywordflow">case</span> LayerType::InstanceNormalization:</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <span class="keywordflow">return</span> support.IsInstanceNormalizationSupported(infos[0],</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; infos[1],</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; *(<a class="code" href="namespacearmnn.xhtml#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a>&lt;<span class="keyword">const</span></div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; InstanceNormalizationDescriptor*&gt;(&amp;descriptor)),</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; reasonIfUnsupported);</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <span class="keywordflow">case</span> LayerType::L2Normalization:</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <span class="keywordflow">return</span> support.IsL2NormalizationSupported(infos[0],</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; infos[1],</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; *(<a class="code" href="namespacearmnn.xhtml#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a>&lt;<span class="keyword">const</span></div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; L2NormalizationDescriptor*&gt;(&amp;descriptor)),</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; reasonIfUnsupported);</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="keywordflow">case</span> LayerType::LogicalBinary:</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="keywordflow">return</span> support.IsLogicalBinarySupported(infos[0],</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; infos[1],</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; infos[2],</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; *(<a class="code" href="namespacearmnn.xhtml#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a>&lt;<span class="keyword">const</span></div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; LogicalBinaryDescriptor*&gt;(&amp;descriptor)),</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; reasonIfUnsupported);</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ac52e04c0e349e25bcdaa72c27395ef8f">LayerType::LogSoftmax</a>:</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="keywordflow">return</span> support.IsLogSoftmaxSupported(infos[0],</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; infos[1],</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; *(PolymorphicDowncast&lt;const LogSoftmaxDescriptor*&gt;(&amp;descriptor)),</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; reasonIfUnsupported);</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <span class="keywordflow">case</span> LayerType::Lstm:</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <span class="keywordflow">return</span> support.IsLstmSupported(infos[0],</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; infos[1],</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; infos[2],</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; infos[3],</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; infos[4],</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; infos[5],</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; infos[6],</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; *(PolymorphicDowncast&lt;const LstmDescriptor*&gt;(&amp;descriptor)),</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; lstmParamsInfo.value(),</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; reasonIfUnsupported);</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; <span class="keywordflow">case</span> LayerType::Map:</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <span class="keywordflow">case</span> LayerType::Maximum:</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="keywordflow">return</span> support.IsMaximumSupported(infos[0], infos[1], infos[2], reasonIfUnsupported);</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="keywordflow">case</span> LayerType::Mean:</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="keywordflow">return</span> support.IsMeanSupported(infos[0],</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; infos[1],</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; *(PolymorphicDowncast&lt;const MeanDescriptor*&gt;(&amp;descriptor)),</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; reasonIfUnsupported);</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; <span class="keywordflow">case</span> LayerType::MemCopy:</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <span class="keywordflow">return</span> support.IsMemCopySupported(infos[0], infos[1], reasonIfUnsupported);</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; <span class="keywordflow">case</span> LayerType::MemImport:</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <span class="keywordflow">return</span> support.IsMemImportSupported(infos[0], infos[1], reasonIfUnsupported);</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <span class="keywordflow">case</span> LayerType::Merge:</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <span class="keywordflow">return</span> support.IsMergeSupported(infos[0],</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; infos[1],</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; infos[2],</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; reasonIfUnsupported);</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="keywordflow">case</span> LayerType::Minimum:</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <span class="keywordflow">return</span> support.IsMinimumSupported(infos[0], infos[1], infos[2], reasonIfUnsupported);</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keywordflow">case</span> LayerType::Multiplication:</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <span class="keywordflow">return</span> support.IsMultiplicationSupported(infos[0], infos[1], infos[2], reasonIfUnsupported);</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <span class="keywordflow">case</span> LayerType::Normalization:</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <span class="keywordflow">return</span> support.IsNormalizationSupported(infos[0],</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; infos[1],</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; *(<a class="code" href="namespacearmnn.xhtml#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a>&lt;<span class="keyword">const</span></div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; NormalizationDescriptor*&gt;(&amp;descriptor)),</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; reasonIfUnsupported);</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <span class="keywordflow">case</span> LayerType::Output:</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <span class="keywordflow">return</span> support.IsOutputSupported(infos[0], reasonIfUnsupported);</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#a3c62b52d21e28088f040a4b6c2a06022">LayerType::Pad</a>:</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; <span class="keywordflow">return</span> support.IsPadSupported(infos[0],</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; infos[1],</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; *(PolymorphicDowncast&lt;const PadDescriptor*&gt;(&amp;descriptor)),</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; reasonIfUnsupported);</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn_utils.xhtml#af3c74017185773dd61d8ca6662d65d43">LayerType::Permute</a>:</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; <span class="keywordflow">return</span> support.IsPermuteSupported(infos[0],</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; infos[1],</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; *(PolymorphicDowncast&lt;const PermuteDescriptor*&gt;(&amp;descriptor)),</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; reasonIfUnsupported);</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ae2e93e304cf516841c521e3eaee025cd">LayerType::Pooling2d</a>:</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; <span class="keywordflow">return</span> support.IsPooling2dSupported(infos[0],</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; infos[1],</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; *(PolymorphicDowncast&lt;const Pooling2dDescriptor*&gt;(&amp;descriptor)),</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; reasonIfUnsupported);</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#a69acbef24cd1cc572b93fc3e1e6ac030">LayerType::Pooling3d</a>:</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <span class="keywordflow">return</span> support.IsPooling3dSupported(infos[0],</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; infos[1],</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; *(PolymorphicDowncast&lt;const Pooling3dDescriptor*&gt;(&amp;descriptor)),</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; reasonIfUnsupported);</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <span class="keywordflow">case</span> LayerType::Prelu:</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; <span class="keywordflow">return</span> support.IsPreluSupported(infos[0], infos[1], infos[2], reasonIfUnsupported);</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; <span class="keywordflow">case</span> LayerType::QLstm:</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <span class="keywordflow">return</span> support.IsQLstmSupported(infos[0],</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; infos[1],</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; infos[2],</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; infos[3],</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; infos[4],</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; infos[5],</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; *(PolymorphicDowncast&lt;const QLstmDescriptor*&gt;(&amp;descriptor)),</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; lstmParamsInfo.value(),</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; reasonIfUnsupported);</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad773a034fb9983e15f3094b4c5c7c30c">LayerType::Quantize</a>:</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <span class="keywordflow">return</span> support.IsQuantizeSupported(infos[0], infos[1], reasonIfUnsupported);</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <span class="keywordflow">case</span> LayerType::QuantizedLstm:</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; <span class="keywordflow">return</span> support.IsQuantizedLstmSupported(infos[0],</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; infos[1],</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; infos[2],</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; infos[3],</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; infos[4],</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; quantizedLstmParamsInfo.value(),</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; reasonIfUnsupported);</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <span class="keywordflow">case</span> LayerType::Rank:</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; <span class="keywordflow">case</span> LayerType::Reshape:</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; <span class="keywordflow">return</span> support.IsReshapeSupported(infos[0],</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; infos[1],</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; *(PolymorphicDowncast&lt;const ReshapeDescriptor*&gt;(&amp;descriptor)),</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; reasonIfUnsupported);</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#a6894316aa645fd5e837739135bef04bb">LayerType::Resize</a>:</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; <span class="keywordflow">return</span> support.IsResizeSupported(infos[0],</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; infos[1],</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; *(PolymorphicDowncast&lt;const ResizeDescriptor*&gt;(&amp;descriptor)),</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; reasonIfUnsupported);</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad64b7a275169ba1b1ba2d15679f7e8b1">LayerType::Reduce</a>:</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <span class="keywordflow">return</span> support.IsReduceSupported(infos[0],</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; infos[1],</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; *(PolymorphicDowncast&lt;const ReduceDescriptor*&gt;(&amp;descriptor)),</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; reasonIfUnsupported);</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; <span class="keywordflow">case</span> LayerType::Shape:</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; <span class="keywordflow">return</span> support.IsShapeSupported(infos[0],</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; infos[1],</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; reasonIfUnsupported);</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#a044ea0cc993d4d1fbe4ec877b17b8d39">LayerType::Slice</a>:</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; <span class="keywordflow">return</span> support.IsSliceSupported(infos[0],</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; infos[1],</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; *(PolymorphicDowncast&lt;const SliceDescriptor*&gt;(&amp;descriptor)),</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; reasonIfUnsupported);</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#aa999ff2585ad75b95954a9323f63c32b">LayerType::Softmax</a>:</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; <span class="keywordflow">return</span> support.IsSoftmaxSupported(infos[0],</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; infos[1],</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; *(PolymorphicDowncast&lt;const SoftmaxDescriptor*&gt;(&amp;descriptor)),</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; reasonIfUnsupported);</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#a4a180e425d4c19b2cdea4ce5760180e1">LayerType::SpaceToBatchNd</a>:</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; <span class="keywordflow">return</span> support.IsSpaceToBatchNdSupported(infos[0],</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; infos[1],</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; *(<a class="code" href="namespacearmnn.xhtml#aa4e89c644c511e255f6a7ecbd5d14686">PolymorphicDowncast</a>&lt;<span class="keyword">const</span></div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; SpaceToBatchNdDescriptor*&gt;(&amp;descriptor)),</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; reasonIfUnsupported);</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#a5e1dc69443b64ad16b669388a6023f7a">LayerType::SpaceToDepth</a>:</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; <span class="keywordflow">return</span> support.IsSpaceToDepthSupported(infos[0],</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; infos[1],</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; *(PolymorphicDowncast&lt;const SpaceToDepthDescriptor*&gt;(&amp;descriptor)),</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; reasonIfUnsupported);</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ac90715a0439d1e77922996a27ef3a534">LayerType::Splitter</a>:</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; std::vector&lt;TensorInfo&gt; outputInfos;</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; <span class="keywordflow">for</span> (uint32_t i = 1; i &lt; infos.size(); i++)</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; {</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; outputInfos.push_back(infos[i]);</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; }</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <span class="keywordflow">return</span> support.IsSplitterSupported(infos[0],</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; {outputInfos.begin(), outputInfos.end()},</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; *(PolymorphicDowncast&lt;const ViewsDescriptor*&gt;(&amp;descriptor)),</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; reasonIfUnsupported);</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; }</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ac245fda400649db10eed0dc96c1b5c37">LayerType::Stack</a>:</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;const TensorInfo*&gt; inputInfos;</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; <span class="keywordflow">for</span> (uint32_t i = 0; i &lt; infos.size() - 1; i++)</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; {</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; inputInfos.push_back(&amp;infos[i]);</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; }</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; <span class="keywordflow">return</span> support.IsStackSupported(inputInfos,</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; infos[infos.size() - 1],</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; *(PolymorphicDowncast&lt;const StackDescriptor*&gt;(&amp;descriptor)),</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; reasonIfUnsupported);</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; }</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#a86d7a7168ac00b75b4971f9aad623698">LayerType::StridedSlice</a>:</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; <span class="keywordflow">return</span> support.IsStridedSliceSupported(infos[0],</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; infos[1],</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; *(PolymorphicDowncast&lt;const StridedSliceDescriptor*&gt;(&amp;descriptor)),</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; reasonIfUnsupported);</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; <span class="keywordflow">case</span> LayerType::Subtraction:</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; <span class="keywordflow">return</span> support.IsSubtractionSupported(infos[0], infos[1], infos[2], reasonIfUnsupported);</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacearmnn_utils.xhtml#a405d5f966ec992d1717711e5a2d7909d">LayerType::Transpose</a>:</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; <span class="keywordflow">return</span> support.IsTransposeSupported(infos[0],</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; infos[1],</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; *(PolymorphicDowncast&lt;const TransposeDescriptor*&gt;(&amp;descriptor)),</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; reasonIfUnsupported);</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; <span class="keywordflow">case</span> LayerType::TransposeConvolution2d:</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; {</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; <span class="keywordflow">if</span> (infos.size() != 4)</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; {</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Invalid number of TransposeConvolution2d TensorInfos. &quot;</span></div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; <span class="stringliteral">&quot;TensorInfos should be of format: {input, output, weights, biases}.&quot;</span>);</div><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;</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; <span class="keyword">auto</span> desc = *(PolymorphicDowncast&lt;const TransposeConvolution2dDescriptor*&gt;(&amp;descriptor));</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; <span class="keywordflow">if</span> (infos[3] == TensorInfo())</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; {</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; <span class="keywordflow">return</span> support.IsTransposeConvolution2dSupported(infos[0],</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; infos[1],</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; desc,</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; infos[2],</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; EmptyOptional(),</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; reasonIfUnsupported);</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; }</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; <span class="keywordflow">else</span></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; <span class="keywordflow">return</span> support.IsTransposeConvolution2dSupported(infos[0],</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; infos[1],</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; desc,</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; infos[2],</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; infos[3],</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; reasonIfUnsupported);</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; }</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; }</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; <span class="keywordflow">case</span> LayerType::UnidirectionalSequenceLstm:</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; {</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; <span class="keyword">auto</span> desc = *(PolymorphicDowncast&lt;const UnidirectionalSequenceLstmDescriptor*&gt;(&amp;descriptor));</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; <span class="keywordflow">return</span> support.IsUnidirectionalSequenceLstmSupported(infos[0],</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; infos[1],</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; infos[2],</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; infos[3],</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; infos[4],</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; infos[5],</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; desc,</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; lstmParamsInfo.value(),</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; reasonIfUnsupported);</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; <span class="keywordflow">case</span> LayerType::Unmap:</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; <span class="comment">// layers not supported in neon by default:</span></div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; <span class="comment">// debug, fakequantization, precompiled,</span></div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <span class="comment">// standin, switch</span></div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; }</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160;}</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_a4f1a1b88b01d8dfda3803776e0778a49"><div class="ttname"><a href="namespacearmnn.xhtml#a4f1a1b88b01d8dfda3803776e0778a49">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_int)</div><div class="ttdef"><b>Definition:</b> <a href="_gather_8cpp_source.xhtml#l00014">Gather.cpp:14</a></div></div>
-<div class="ttc" id="namespacearmnn_xhtml_a044ea0cc993d4d1fbe4ec877b17b8d39"><div class="ttname"><a href="namespacearmnn.xhtml#a044ea0cc993d4d1fbe4ec877b17b8d39">armnn::Slice</a></div><div class="ttdeci">void Slice(const TensorInfo &amp;inputInfo, const SliceDescriptor &amp;descriptor, const void *inputData, void *outputData, unsigned int dataTypeSize)</div><div class="ttdef"><b>Definition:</b> <a href="_slice_8cpp_source.xhtml#l00014">Slice.cpp:14</a></div></div>
-<div class="ttc" id="namespacearmnn_xhtml_ac90715a0439d1e77922996a27ef3a534"><div class="ttname"><a href="namespacearmnn.xhtml#ac90715a0439d1e77922996a27ef3a534">armnn::Splitter</a></div><div class="ttdeci">void Splitter(const SplitterQueueDescriptor &amp;data, std::vector&lt; ITensorHandle *&gt; inputs, std::vector&lt; ITensorHandle *&gt; outputs)</div><div class="ttdef"><b>Definition:</b> <a href="_splitter_8hpp_source.xhtml#l00017">Splitter.hpp:17</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_a88bebdfe6309aa2cd6831cfa73c296f0"><div class="ttname"><a href="namespacearmnn.xhtml#a88bebdfe6309aa2cd6831cfa73c296f0">armnn::Fill</a></div><div class="ttdeci">void Fill(Encoder&lt; float &gt; &amp;output, const TensorShape &amp;desiredOutputShape, const float value)</div><div class="ttdoc">Creates a tensor and fills it with a scalar value. </div><div class="ttdef"><b>Definition:</b> <a href="_fill_8cpp_source.xhtml#l00013">Fill.cpp:13</a></div></div>
-<div class="ttc" id="namespacearmnn_xhtml_ad64b7a275169ba1b1ba2d15679f7e8b1"><div class="ttname"><a href="namespacearmnn.xhtml#ad64b7a275169ba1b1ba2d15679f7e8b1">armnn::Reduce</a></div><div class="ttdeci">void Reduce(const TensorInfo &amp;inputInfo, const TensorInfo &amp;outputInfo, Decoder&lt; float &gt; &amp;input, Encoder&lt; float &gt; &amp;output, const std::vector&lt; uint32_t &gt; axis, const ReduceOperation reduceOperation)</div><div class="ttdef"><b>Definition:</b> <a href="_reduce_8cpp_source.xhtml#l00070">Reduce.cpp:70</a></div></div>
-<div class="ttc" id="namespacearmnn_utils_xhtml_a405d5f966ec992d1717711e5a2d7909d"><div class="ttname"><a href="namespacearmnn_utils.xhtml#a405d5f966ec992d1717711e5a2d7909d">armnnUtils::Transpose</a></div><div class="ttdeci">void Transpose(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="_transpose_8cpp_source.xhtml#l00120">Transpose.cpp:120</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="_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="_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_ae76ce23fa9fc18e56448d52b37dd3f32"><div class="ttname"><a href="namespacearmnn.xhtml#ae76ce23fa9fc18e56448d52b37dd3f32">armnn::DetectionPostProcess</a></div><div class="ttdeci">void DetectionPostProcess(const TensorInfo &amp;boxEncodingsInfo, const TensorInfo &amp;scoresInfo, const TensorInfo &amp;anchorsInfo, const TensorInfo &amp;detectionBoxesInfo, const TensorInfo &amp;detectionClassesInfo, const TensorInfo &amp;detectionScoresInfo, const TensorInfo &amp;numDetectionsInfo, const DetectionPostProcessDescriptor &amp;desc, Decoder&lt; float &gt; &amp;boxEncodings, Decoder&lt; float &gt; &amp;scores, Decoder&lt; float &gt; &amp;anchors, float *detectionBoxes, float *detectionClasses, float *detectionScores, float *numDetections)</div><div class="ttdef"><b>Definition:</b> <a href="_detection_post_process_8cpp_source.xhtml#l00140">DetectionPostProcess.cpp:140</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_a3c62b52d21e28088f040a4b6c2a06022"><div class="ttname"><a href="namespacearmnn.xhtml#a3c62b52d21e28088f040a4b6c2a06022">armnn::Pad</a></div><div class="ttdeci">void Pad(const TensorInfo &amp;inputInfo, const TensorInfo &amp;outputInfo, const ITensorHandle *inputHandle, ITensorHandle *outputHandle, const PadQueueDescriptor &amp;data)</div><div class="ttdef"><b>Definition:</b> <a href="_pad_8cpp_source.xhtml#l00039">Pad.cpp:39</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_ac52e04c0e349e25bcdaa72c27395ef8f"><div class="ttname"><a href="namespacearmnn.xhtml#ac52e04c0e349e25bcdaa72c27395ef8f">armnn::LogSoftmax</a></div><div class="ttdeci">void LogSoftmax(Decoder&lt; float &gt; &amp;input, Encoder&lt; float &gt; &amp;output, const TensorInfo &amp;inputInfo, const LogSoftmaxDescriptor &amp;descriptor)</div><div class="ttdef"><b>Definition:</b> <a href="_log_softmax_8cpp_source.xhtml#l00029">LogSoftmax.cpp:29</a></div></div>
-<div class="ttc" id="namespacearmnn_xhtml_aa4e89c644c511e255f6a7ecbd5d14686"><div class="ttname"><a href="namespacearmnn.xhtml#aa4e89c644c511e255f6a7ecbd5d14686">armnn::PolymorphicDowncast</a></div><div class="ttdeci">DestType PolymorphicDowncast(SourceType *value)</div><div class="ttdoc">Polymorphic downcast for build in pointers only. </div><div class="ttdef"><b>Definition:</b> <a href="_polymorphic_downcast_8hpp_source.xhtml#l00074">PolymorphicDowncast.hpp:74</a></div></div>
-<div class="ttc" id="namespacearmnn_xhtml_a4a180e425d4c19b2cdea4ce5760180e1"><div class="ttname"><a href="namespacearmnn.xhtml#a4a180e425d4c19b2cdea4ce5760180e1">armnn::SpaceToBatchNd</a></div><div class="ttdeci">void SpaceToBatchNd(const TensorInfo &amp;inputInfo, const TensorInfo &amp;outputInfo, const SpaceToBatchNdDescriptor &amp;params, Decoder&lt; float &gt; &amp;inputData, Encoder&lt; float &gt; &amp;outputData)</div><div class="ttdef"><b>Definition:</b> <a href="_space_to_batch_nd_8cpp_source.xhtml#l00034">SpaceToBatchNd.cpp:34</a></div></div>
-<div class="ttc" id="namespacearmnn_xhtml_a86d7a7168ac00b75b4971f9aad623698"><div class="ttname"><a href="namespacearmnn.xhtml#a86d7a7168ac00b75b4971f9aad623698">armnn::StridedSlice</a></div><div class="ttdeci">void StridedSlice(const TensorInfo &amp;inputInfo, const StridedSliceDescriptor &amp;params, const void *inputData, void *outputData, unsigned int dataTypeSize)</div><div class="ttdef"><b>Definition:</b> <a href="_strided_slice_8cpp_source.xhtml#l00090">StridedSlice.cpp:90</a></div></div>
-<div class="ttc" id="namespacearmnn_xhtml_a69acbef24cd1cc572b93fc3e1e6ac030"><div class="ttname"><a href="namespacearmnn.xhtml#a69acbef24cd1cc572b93fc3e1e6ac030">armnn::Pooling3d</a></div><div class="ttdeci">void Pooling3d(Decoder&lt; float &gt; &amp;rInputDecoder, Encoder&lt; float &gt; &amp;rOutputEncoder, const TensorInfo &amp;inputInfo, const TensorInfo &amp;outputInfo, const Pooling3dDescriptor &amp;params)</div><div class="ttdoc">Computes the Pooling3d operation. </div><div class="ttdef"><b>Definition:</b> <a href="_pooling3d_8cpp_source.xhtml#l00172">Pooling3d.cpp:172</a></div></div>
-<div class="ttc" id="namespacearmnn_xhtml_a5e1dc69443b64ad16b669388a6023f7a"><div class="ttname"><a href="namespacearmnn.xhtml#a5e1dc69443b64ad16b669388a6023f7a">armnn::SpaceToDepth</a></div><div class="ttdeci">void SpaceToDepth(const TensorInfo &amp;inputInfo, const TensorInfo &amp;outputInfo, const SpaceToDepthDescriptor &amp;params, Decoder&lt; float &gt; &amp;inputData, Encoder&lt; float &gt; &amp;outputData)</div><div class="ttdef"><b>Definition:</b> <a href="_space_to_depth_8cpp_source.xhtml#l00036">SpaceToDepth.cpp:36</a></div></div>
-<div class="ttc" id="namespacearmnn_xhtml_a8746512fab5ec10c2c57800c66311ba7"><div class="ttname"><a href="namespacearmnn.xhtml#a8746512fab5ec10c2c57800c66311ba7">armnn::BatchToSpaceNd</a></div><div class="ttdeci">void BatchToSpaceNd(const DataLayoutIndexed &amp;dataLayout, const TensorInfo &amp;inputTensorInfo, const TensorInfo &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, Decoder&lt; float &gt; &amp;inputDecoder, Encoder&lt; float &gt; &amp;outputEncoder)</div><div class="ttdef"><b>Definition:</b> <a href="_batch_to_space_nd_8cpp_source.xhtml#l00035">BatchToSpaceNd.cpp:35</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_aa999ff2585ad75b95954a9323f63c32b"><div class="ttname"><a href="namespacearmnn.xhtml#aa999ff2585ad75b95954a9323f63c32b">armnn::Softmax</a></div><div class="ttdeci">void Softmax(Decoder&lt; float &gt; &amp;in, Encoder&lt; float &gt; &amp;out, const TensorInfo &amp;inputTensorInfo, float beta, int axis)</div><div class="ttdoc">Computes the softmax function on some inputs, into outputs, with a shape given by tensorInfo...</div><div class="ttdef"><b>Definition:</b> <a href="_softmax_8cpp_source.xhtml#l00017">Softmax.cpp:17</a></div></div>
-<div class="ttc" id="namespacearmnn_xhtml_a6894316aa645fd5e837739135bef04bb"><div class="ttname"><a href="namespacearmnn.xhtml#a6894316aa645fd5e837739135bef04bb">armnn::Resize</a></div><div class="ttdeci">void Resize(Decoder&lt; float &gt; &amp;in, const TensorInfo &amp;inputInfo, Encoder&lt; float &gt; &amp;out, const TensorInfo &amp;outputInfo, DataLayoutIndexed dataLayout, armnn::ResizeMethod resizeMethod, bool alignCorners, bool halfPixelCenters)</div><div class="ttdef"><b>Definition:</b> <a href="_resize_8cpp_source.xhtml#l00065">Resize.cpp:65</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="_fully_connected_8cpp_source.xhtml#l00015">FullyConnected.cpp:15</a></div></div>
-</div><!-- fragment -->
+
</div>
</div>
<a id="a2c62d8aa5aeab36458f9ecfa5db1f785"></a>
@@ -18944,9 +24890,9 @@ Variables</h2></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>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="_converter_8cpp_source.xhtml#l00021">Converter::ConvertOperation()</a>, and <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
</div>
</div>
@@ -19000,9 +24946,9 @@ Variables</h2></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>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="_converter_8cpp_source.xhtml#l00021">Converter::ConvertOperation()</a>, and <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
</div>
</div>
@@ -19056,9 +25002,9 @@ Variables</h2></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>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="_converter_8cpp_source.xhtml#l00021">Converter::ConvertOperation()</a>, and <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
</div>
</div>
@@ -19106,7 +25052,7 @@ Variables</h2></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>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>
@@ -19162,7 +25108,7 @@ Variables</h2></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>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>
@@ -19218,9 +25164,9 @@ Variables</h2></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>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="_converter_8cpp_source.xhtml#l00021">Converter::ConvertOperation()</a>, and <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
</div>
</div>
@@ -19274,9 +25220,9 @@ Variables</h2></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>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="_converter_8cpp_source.xhtml#l00021">Converter::ConvertOperation()</a>, and <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
</div>
</div>
@@ -19330,30 +25276,39 @@ Variables</h2></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>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="_converter_8cpp_source.xhtml#l00021">Converter::ConvertOperation()</a>, and <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</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>
+<a id="a05323af66b9f762e269a27562a2bbdd0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a05323af66b9f762e269a27562a2bbdd0">&#9670;&nbsp;</a></span>IsOperationQueueDescriptor() <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">constexpr bool armnn::IsOperationQueueDescriptor </td>
<td>(</td>
- <td class="paramtype">const QueueDescriptorType &amp;&#160;</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>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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 -->
+<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="a93e7b76d19b33076b2a4eae44014d5ea"></a>
@@ -19361,6 +25316,9 @@ Variables</h2></td></tr>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr bool armnn::IsOperationQueueDescriptor </td>
@@ -19370,50 +25328,74 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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 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>
+<a id="a91332212b6a2cc9c0ea32af03c600b4f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a91332212b6a2cc9c0ea32af03c600b4f">&#9670;&nbsp;</a></span>IsOperationQueueDescriptor() <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">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="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>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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 -->
+<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="a91332212b6a2cc9c0ea32af03c600b4f"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a91332212b6a2cc9c0ea32af03c600b4f">&#9670;&nbsp;</a></span>IsOperationQueueDescriptor() <span class="overload">[4/4]</span></h2>
+<a id="ad05c0670c947d35d39b3b0217e9975cf"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad05c0670c947d35d39b3b0217e9975cf">&#9670;&nbsp;</a></span>IsOperationQueueDescriptor() <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">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="paramtype">const QueueDescriptorType &amp;&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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 -->
+<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="a60699e7f86e142739ccddd43c20c4fc0"></a>
@@ -19454,7 +25436,7 @@ Variables</h2></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>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>
@@ -19510,9 +25492,9 @@ Variables</h2></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>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="_converter_8cpp_source.xhtml#l00021">Converter::ConvertOperation()</a>, and <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
</div>
</div>
@@ -19566,7 +25548,7 @@ Variables</h2></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>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>
@@ -19622,7 +25604,7 @@ Variables</h2></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>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="_conversion_utils_8cpp_source.xhtml#l00380">armnn_driver::ConvertPooling2d()</a>, and <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
@@ -19666,7 +25648,7 @@ Variables</h2></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>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>
@@ -19722,9 +25704,9 @@ Variables</h2></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>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="_converter_8cpp_source.xhtml#l00021">Converter::ConvertOperation()</a>, and <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
</div>
</div>
@@ -19745,12 +25727,14 @@ Variables</h2></td></tr>
</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>
-
+<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;(info);</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;}</div>
+</div><!-- fragment -->
<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>
@@ -19770,12 +25754,14 @@ Variables</h2></td></tr>
</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>
-
+<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;(info);</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;}</div>
+</div><!-- fragment -->
<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>
@@ -19795,12 +25781,14 @@ Variables</h2></td></tr>
</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>
-
+<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;(info);</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;}</div>
+</div><!-- fragment -->
<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>
@@ -19820,12 +25808,14 @@ Variables</h2></td></tr>
</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>
-
+<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;(info);</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;}</div>
+</div><!-- fragment -->
<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>
@@ -19833,6 +25823,9 @@ Variables</h2></td></tr>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr bool armnn::IsQuantized8BitType </td>
@@ -19842,14 +25835,24 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
+ </tr>
+</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00289">289</a> of file <a class="el" href="_types_utils_8hpp_source.xhtml">TypesUtils.hpp</a>.</p>
-
+<div class="fragment"><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160;{</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="keywordflow">return</span> dataType == DataType::QAsymmU8 ||</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; dataType == DataType::QAsymmS8 ||</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; dataType == DataType::QSymmS8;</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160;}</div>
+</div><!-- fragment -->
<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#l00028">GetBiasDataType()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00967">RefLayerSupport::IsConvolution2dSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01036">RefLayerSupport::IsConvolution3dSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01163">RefLayerSupport::IsDepthwiseConvolutionSupported()</a>, <a class="el" href="_types_utils_8hpp_source.xhtml#l00296">IsQuantizedType()</a>, and <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02638">RefLayerSupport::IsTransposeConvolution2dSupported()</a>.</p>
-<div class="fragment"><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160;{</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="keywordflow">return</span> dataType == DataType::QAsymmU8 ||</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; dataType == DataType::QAsymmS8 ||</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; dataType == DataType::QSymmS8;</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160;}</div></div><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00967">RefLayerSupport::IsConvolution2dSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01036">RefLayerSupport::IsConvolution3dSupported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01163">RefLayerSupport::IsDepthwiseConvolutionSupported()</a>, <a class="el" href="_types_utils_8hpp_source.xhtml#l00296">IsQuantizedType()</a>, and <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l02638">RefLayerSupport::IsTransposeConvolution2dSupported()</a>.</p>
+
</div>
</div>
<a id="a237992b29706fe1c1653dae916ea67ef"></a>
@@ -19920,9 +25923,9 @@ Variables</h2></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>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="_converter_8cpp_source.xhtml#l00021">Converter::ConvertOperation()</a>, and <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
</div>
</div>
@@ -19931,6 +25934,9 @@ Variables</h2></td></tr>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr bool armnn::IsQuantizedType </td>
@@ -19939,12 +25945,20 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
+ </tr>
+</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00284">284</a> of file <a class="el" href="_types_utils_8hpp_source.xhtml">TypesUtils.hpp</a>.</p>
-
+<div class="fragment"><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;{</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <span class="keywordflow">return</span> std::is_integral&lt;T&gt;::value;</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160;}</div>
+</div><!-- fragment -->
<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#l00504">TensorInfo::IsQuantized()</a>, <a class="el" href="_neon_multiplication_workload_8cpp_source.xhtml#l00047">NeonMultiplicationWorkload::NeonMultiplicationWorkload()</a>, and <a class="el" href="_workload_data_8cpp_source.xhtml#l02439">QuantizeQueueDescriptor::Validate()</a>.</p>
-<div class="fragment"><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;{</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <span class="keywordflow">return</span> std::is_integral&lt;T&gt;::value;</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160;}</div></div><!-- fragment -->
+
</div>
</div>
<a id="aa172264d7075abf828e0b6894996a561"></a>
@@ -19952,6 +25966,9 @@ Variables</h2></td></tr>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr bool armnn::IsQuantizedType </td>
@@ -19961,13 +25978,20 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
+ </tr>
+</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00296">296</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#l00289">IsQuantized8BitType()</a>, and <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">QSymmS16</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; <span class="keywordflow">return</span> dataType == DataType::QSymmS16 || <a class="code" href="namespacearmnn.xhtml#ad91bc7bfe29186f5d78c28386c6c5309">IsQuantized8BitType</a>(dataType);</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</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#l00289">TypesUtils.hpp:289</a></div></div>
+<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; <span class="keywordflow">return</span> dataType == DataType::QSymmS16 || <a class="code" href="namespacearmnn.xhtml#ad91bc7bfe29186f5d78c28386c6c5309">IsQuantized8BitType</a>(dataType);</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160;}</div>
</div><!-- fragment -->
+<p class="reference">References <a class="el" href="_types_utils_8hpp_source.xhtml#l00289">IsQuantized8BitType()</a>, and <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">QSymmS16</a>.</p>
+
</div>
</div>
<a id="a6b10dc0d12c7f4a52ad01b9975dbe908"></a>
@@ -19997,12 +26021,23 @@ Variables</h2></td></tr>
</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>
-
+<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><!-- fragment -->
<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>
@@ -20055,7 +26090,7 @@ Variables</h2></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>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="_conversion_utils_8cpp_source.xhtml#l00508">armnn_driver::ConvertReduce()</a>, and <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
@@ -20105,9 +26140,9 @@ Variables</h2></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>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="_converter_8cpp_source.xhtml#l00021">Converter::ConvertOperation()</a>, and <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
</div>
</div>
@@ -20161,9 +26196,9 @@ Variables</h2></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>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="_converter_8cpp_source.xhtml#l00021">Converter::ConvertOperation()</a>, and <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
</div>
</div>
@@ -20211,7 +26246,7 @@ Variables</h2></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>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>
@@ -20232,12 +26267,14 @@ Variables</h2></td></tr>
</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>
-
+<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;(info);</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;}</div>
+</div><!-- fragment -->
<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>
@@ -20290,9 +26327,9 @@ Variables</h2></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>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="_converter_8cpp_source.xhtml#l00021">Converter::ConvertOperation()</a>, and <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
</div>
</div>
@@ -20346,9 +26383,9 @@ Variables</h2></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>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="_converter_8cpp_source.xhtml#l00021">Converter::ConvertOperation()</a>, and <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
</div>
</div>
@@ -20402,9 +26439,9 @@ Variables</h2></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>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="_converter_8cpp_source.xhtml#l00021">Converter::ConvertOperation()</a>, and <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
</div>
</div>
@@ -20458,14 +26495,14 @@ Variables</h2></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>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="_converter_8cpp_source.xhtml#l00021">Converter::ConvertOperation()</a>, and <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</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>
+<a id="a1ef301853035778cebf30782cae7b86d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1ef301853035778cebf30782cae7b86d">&#9670;&nbsp;</a></span>IsStackSupported()</h2>
<div class="memitem">
<div class="memproto">
@@ -20479,7 +26516,7 @@ Variables</h2></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="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>
@@ -20514,7 +26551,7 @@ Variables</h2></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>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>
@@ -20570,9 +26607,9 @@ Variables</h2></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>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="_converter_8cpp_source.xhtml#l00021">Converter::ConvertOperation()</a>, and <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
</div>
</div>
@@ -20626,14 +26663,14 @@ Variables</h2></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>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="_converter_8cpp_source.xhtml#l00021">Converter::ConvertOperation()</a>, and <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</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>
+<a id="a23a5267702f036fe70a34f91e6c07490"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a23a5267702f036fe70a34f91e6c07490">&#9670;&nbsp;</a></span>IsSupportedForDataTypeGeneric()</h2>
<div class="memitem">
<div class="memproto">
@@ -20641,7 +26678,7 @@ Variables</h2></td></tr>
<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="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>
@@ -20695,11 +26732,28 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<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#l00927">RefLayerSupport::IsConvertFp16ToFp32Supported()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l00947">RefLayerSupport::IsConvertFp32ToFp16Supported()</a>, and <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01042">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>
@@ -20758,7 +26812,7 @@ Variables</h2></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>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>
@@ -20826,35 +26880,20 @@ Variables</h2></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>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="_converter_8cpp_source.xhtml#l00021">Converter::ConvertOperation()</a>, and <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">
+<p class="reference">Referenced by <a class="el" href="_i_layer_support_8cpp_source.xhtml#l00018">ILayerSupport::IsLayerSupported()</a>.</p>
</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>
+<h2 class="memtitle"><span class="permalink"><a href="#afb1e69829289fb07cc349c0884f27abd">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[1/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -20864,6 +26903,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -20871,10 +26915,13 @@ Variables</h2></td></tr>
</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>
+<h2 class="memtitle"><span class="permalink"><a href="#acc630e11a5baa28ad5723568a7a60109">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[2/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -20884,6 +26931,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -20891,10 +26943,13 @@ Variables</h2></td></tr>
</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>
+<h2 class="memtitle"><span class="permalink"><a href="#a324e860c347972fce7a1c07531bed06e">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[3/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -20904,6 +26959,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -20911,10 +26971,13 @@ Variables</h2></td></tr>
</div>
</div>
<a id="a317945cbed8d24f155e43d976a355c14"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a317945cbed8d24f155e43d976a355c14">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[5/73]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#a317945cbed8d24f155e43d976a355c14">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[4/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -20924,6 +26987,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -20931,10 +26999,13 @@ Variables</h2></td></tr>
</div>
</div>
<a id="ae22db3ab5196edbb2e4e5244adc512e3"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae22db3ab5196edbb2e4e5244adc512e3">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[6/73]</span></h2>
+<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="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -20944,6 +27015,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -20951,10 +27027,13 @@ Variables</h2></td></tr>
</div>
</div>
<a id="a87ffe3fb58ec36989d343e53e23fb0f8"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a87ffe3fb58ec36989d343e53e23fb0f8">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[7/73]</span></h2>
+<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="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -20964,6 +27043,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -20971,10 +27055,13 @@ Variables</h2></td></tr>
</div>
</div>
<a id="a0bce3e1a80419bc6966f60c8f2db9b92"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a0bce3e1a80419bc6966f60c8f2db9b92">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[8/73]</span></h2>
+<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="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -20984,6 +27071,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -20991,10 +27083,13 @@ Variables</h2></td></tr>
</div>
</div>
<a id="af99801cff508d065bede5283a0ea1dc9"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#af99801cff508d065bede5283a0ea1dc9">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[9/73]</span></h2>
+<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="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -21004,6 +27099,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -21011,10 +27111,13 @@ Variables</h2></td></tr>
</div>
</div>
<a id="a43b8024cb70c07116be132ca28b12a21"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a43b8024cb70c07116be132ca28b12a21">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[10/73]</span></h2>
+<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="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -21024,6 +27127,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -21031,10 +27139,13 @@ Variables</h2></td></tr>
</div>
</div>
<a id="a300c356944bb1e9d2dff6191d1c3501c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a300c356944bb1e9d2dff6191d1c3501c">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[11/73]</span></h2>
+<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="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -21044,6 +27155,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -21051,10 +27167,13 @@ Variables</h2></td></tr>
</div>
</div>
<a id="a307007c2249288fe158bfdfaf9e1c413"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a307007c2249288fe158bfdfaf9e1c413">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[12/73]</span></h2>
+<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="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -21064,6 +27183,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -21071,10 +27195,13 @@ Variables</h2></td></tr>
</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>
+<h2 class="memtitle"><span class="permalink"><a href="#a4471d39d8390fc550c1f8688639e66f5">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[12/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -21084,6 +27211,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -21091,10 +27223,13 @@ Variables</h2></td></tr>
</div>
</div>
<a id="af8df06bed5f1257864645e45948afa5c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#af8df06bed5f1257864645e45948afa5c">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[14/73]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#af8df06bed5f1257864645e45948afa5c">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[13/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -21104,6 +27239,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -21111,10 +27251,13 @@ Variables</h2></td></tr>
</div>
</div>
<a id="ab2f52d0c728933e36f581a07676d9fe9"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab2f52d0c728933e36f581a07676d9fe9">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[15/73]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#ab2f52d0c728933e36f581a07676d9fe9">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[14/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -21124,6 +27267,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -21131,10 +27279,13 @@ Variables</h2></td></tr>
</div>
</div>
<a id="a8aa8025b92a7d302536ab63c1f0ea99c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a8aa8025b92a7d302536ab63c1f0ea99c">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[16/73]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#a8aa8025b92a7d302536ab63c1f0ea99c">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[15/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -21144,6 +27295,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -21151,10 +27307,13 @@ Variables</h2></td></tr>
</div>
</div>
<a id="ad596268fcd03c87a4b6fde86f4732546"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ad596268fcd03c87a4b6fde86f4732546">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[17/73]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#ad596268fcd03c87a4b6fde86f4732546">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[16/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -21164,6 +27323,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -21171,10 +27335,13 @@ Variables</h2></td></tr>
</div>
</div>
<a id="a939154289f544a02baec0735b27b8894"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a939154289f544a02baec0735b27b8894">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[18/73]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#a939154289f544a02baec0735b27b8894">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[17/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -21184,6 +27351,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -21191,10 +27363,13 @@ Variables</h2></td></tr>
</div>
</div>
<a id="a26a46c27bca08b5bd26abba341f1d795"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a26a46c27bca08b5bd26abba341f1d795">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[19/73]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#a26a46c27bca08b5bd26abba341f1d795">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[18/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -21204,6 +27379,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -21211,10 +27391,13 @@ Variables</h2></td></tr>
</div>
</div>
<a id="a95e2d190d7483017b4f4841dd07776e5"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a95e2d190d7483017b4f4841dd07776e5">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[20/73]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#a95e2d190d7483017b4f4841dd07776e5">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[19/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -21224,6 +27407,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -21231,10 +27419,13 @@ Variables</h2></td></tr>
</div>
</div>
<a id="a22772d461066f995cd72d13066b0f46d"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a22772d461066f995cd72d13066b0f46d">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[21/73]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#a22772d461066f995cd72d13066b0f46d">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[20/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -21244,6 +27435,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -21251,10 +27447,13 @@ Variables</h2></td></tr>
</div>
</div>
<a id="a955b1001b8c57c60ce443a1e31468f20"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a955b1001b8c57c60ce443a1e31468f20">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[22/73]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#a955b1001b8c57c60ce443a1e31468f20">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[21/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -21264,6 +27463,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -21271,10 +27475,13 @@ Variables</h2></td></tr>
</div>
</div>
<a id="a72f7601d11f32c8d9ccb49a80fcf662a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a72f7601d11f32c8d9ccb49a80fcf662a">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[23/73]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#a72f7601d11f32c8d9ccb49a80fcf662a">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[22/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -21284,6 +27491,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -21291,10 +27503,13 @@ Variables</h2></td></tr>
</div>
</div>
<a id="a4acae0cdcdfab8e941af5c4e42e58cb3"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a4acae0cdcdfab8e941af5c4e42e58cb3">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[24/73]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#a4acae0cdcdfab8e941af5c4e42e58cb3">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[23/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -21304,6 +27519,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -21311,10 +27531,13 @@ Variables</h2></td></tr>
</div>
</div>
<a id="a12fdb9a7f3cb197316e3e67e036216dc"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a12fdb9a7f3cb197316e3e67e036216dc">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[25/73]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#a12fdb9a7f3cb197316e3e67e036216dc">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[24/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -21324,6 +27547,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -21331,10 +27559,13 @@ Variables</h2></td></tr>
</div>
</div>
<a id="a575f5487e62465b6b9edbc447a26f32f"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a575f5487e62465b6b9edbc447a26f32f">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[26/73]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#a575f5487e62465b6b9edbc447a26f32f">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[25/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -21344,6 +27575,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -21351,10 +27587,13 @@ Variables</h2></td></tr>
</div>
</div>
<a id="aa689e4a3aa77e9d9e5851f566c5eb8b3"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aa689e4a3aa77e9d9e5851f566c5eb8b3">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[27/73]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#aa689e4a3aa77e9d9e5851f566c5eb8b3">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[26/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -21364,6 +27603,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -21371,10 +27615,13 @@ Variables</h2></td></tr>
</div>
</div>
<a id="a548fb17a9bff172e751ae4bd3add62b5"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a548fb17a9bff172e751ae4bd3add62b5">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[28/73]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#a548fb17a9bff172e751ae4bd3add62b5">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[27/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -21384,6 +27631,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -21391,10 +27643,13 @@ Variables</h2></td></tr>
</div>
</div>
<a id="af786ed151cee66263c0ce890d11d15c9"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#af786ed151cee66263c0ce890d11d15c9">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[29/73]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#af786ed151cee66263c0ce890d11d15c9">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[28/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -21404,6 +27659,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -21411,10 +27671,13 @@ Variables</h2></td></tr>
</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>
+<h2 class="memtitle"><span class="permalink"><a href="#adef1c8c63daa9d348a29e74eac33a054">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[29/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -21424,6 +27687,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -21431,10 +27699,13 @@ Variables</h2></td></tr>
</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>
+<h2 class="memtitle"><span class="permalink"><a href="#a57bcf309be7adcc91001834979f87bde">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[30/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -21444,6 +27715,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -21451,10 +27727,13 @@ Variables</h2></td></tr>
</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>
+<h2 class="memtitle"><span class="permalink"><a href="#a36f16b97bcb662caaa4eae24ea16cccf">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[31/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -21464,6 +27743,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -21471,10 +27755,13 @@ Variables</h2></td></tr>
</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>
+<h2 class="memtitle"><span class="permalink"><a href="#a78bb83e7a83c970a54ffe923386a79d0">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[32/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -21484,6 +27771,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -21491,10 +27783,13 @@ Variables</h2></td></tr>
</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>
+<h2 class="memtitle"><span class="permalink"><a href="#afb6f9bd4f43118749a0336074bed7b35">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[33/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -21504,6 +27799,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -21511,10 +27811,13 @@ Variables</h2></td></tr>
</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>
+<h2 class="memtitle"><span class="permalink"><a href="#a0d08fb555c6d1cba705fd73b71797a28">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[34/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -21524,6 +27827,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -21531,10 +27839,13 @@ Variables</h2></td></tr>
</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>
+<h2 class="memtitle"><span class="permalink"><a href="#ac2bd34e0328cda2e23ccb4c79fa72960">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[35/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -21544,6 +27855,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -21551,10 +27867,13 @@ Variables</h2></td></tr>
</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>
+<h2 class="memtitle"><span class="permalink"><a href="#a6b231c8a547d4030d9a4a1618810c20b">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[36/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -21564,6 +27883,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -21571,10 +27895,13 @@ Variables</h2></td></tr>
</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>
+<h2 class="memtitle"><span class="permalink"><a href="#af079ba32db74f53aba1ad19193cd2a4b">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[37/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -21584,6 +27911,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -21591,10 +27923,13 @@ Variables</h2></td></tr>
</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>
+<h2 class="memtitle"><span class="permalink"><a href="#aa17969606f64ea581c28431f2395e653">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[38/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -21604,6 +27939,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -21611,10 +27951,13 @@ Variables</h2></td></tr>
</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>
+<h2 class="memtitle"><span class="permalink"><a href="#a70f3d83f6d1e3918eab895c8083058fa">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[39/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -21624,6 +27967,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -21631,10 +27979,13 @@ Variables</h2></td></tr>
</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>
+<h2 class="memtitle"><span class="permalink"><a href="#a9e8199bdc39f928f694591a41d7aa0c0">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[40/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -21644,6 +27995,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -21651,10 +28007,13 @@ Variables</h2></td></tr>
</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>
+<h2 class="memtitle"><span class="permalink"><a href="#ad32a13408ace1c1fa520ed64a2cbe70f">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[41/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -21664,6 +28023,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -21671,10 +28035,13 @@ Variables</h2></td></tr>
</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>
+<h2 class="memtitle"><span class="permalink"><a href="#a40f1546c0fa69f318eeab4b29cc64b70">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[42/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -21684,6 +28051,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -21691,10 +28063,13 @@ Variables</h2></td></tr>
</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>
+<h2 class="memtitle"><span class="permalink"><a href="#a140713619ee498a149854a5376b8d072">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[43/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -21704,6 +28079,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -21711,10 +28091,13 @@ Variables</h2></td></tr>
</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>
+<h2 class="memtitle"><span class="permalink"><a href="#a7a6e68f66d1d3819640b0f2d46a55fd1">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[44/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -21724,6 +28107,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -21731,10 +28119,13 @@ Variables</h2></td></tr>
</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>
+<h2 class="memtitle"><span class="permalink"><a href="#ab6f1994db909dcc399cb1f8bc50c2d3d">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[45/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -21744,6 +28135,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -21751,10 +28147,13 @@ Variables</h2></td></tr>
</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>
+<h2 class="memtitle"><span class="permalink"><a href="#a1e6b17606926b8f69dbeda7f7ff1df95">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[46/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -21764,6 +28163,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -21771,10 +28175,13 @@ Variables</h2></td></tr>
</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>
+<h2 class="memtitle"><span class="permalink"><a href="#ade84059b48b38da3a233bed287864c5b">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[47/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -21784,6 +28191,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -21791,10 +28203,13 @@ Variables</h2></td></tr>
</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>
+<h2 class="memtitle"><span class="permalink"><a href="#a5afa84427b91f83f2977382da7a9c62f">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[48/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -21804,6 +28219,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -21811,10 +28231,13 @@ Variables</h2></td></tr>
</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>
+<h2 class="memtitle"><span class="permalink"><a href="#a6e5eaa19ff232f11daa9a1c6caccf7fe">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[49/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -21824,6 +28247,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -21831,10 +28259,13 @@ Variables</h2></td></tr>
</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>
+<h2 class="memtitle"><span class="permalink"><a href="#a58a5defa35b12773a97760efadffef4f">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[50/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -21844,77 +28275,109 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
+<a id="a1da1712abdf8eb56a3fd34d09a30f88a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1da1712abdf8eb56a3fd34d09a30f88a">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[51/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<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="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>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
+<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="a1da1712abdf8eb56a3fd34d09a30f88a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1da1712abdf8eb56a3fd34d09a30f88a">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[53/73]</span></h2>
+<a id="a31bcd6f755df954a4d7b020a09499105"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a31bcd6f755df954a4d7b020a09499105">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[52/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<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="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>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
+<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="a31bcd6f755df954a4d7b020a09499105"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a31bcd6f755df954a4d7b020a09499105">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[54/73]</span></h2>
+<a id="aaaaf64c0888ab25bfae770bd4c2ec34b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aaaaf64c0888ab25bfae770bd4c2ec34b">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[53/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<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="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>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
+<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="a0c5d6fb244a3e38da85257afb91edd80"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a0c5d6fb244a3e38da85257afb91edd80">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[55/73]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#a0c5d6fb244a3e38da85257afb91edd80">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[54/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -21924,6 +28387,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -21931,10 +28399,13 @@ Variables</h2></td></tr>
</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>
+<h2 class="memtitle"><span class="permalink"><a href="#a2419883b22222c7bad914095ae3a9ad2">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[55/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -21944,6 +28415,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -21951,10 +28427,13 @@ Variables</h2></td></tr>
</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>
+<h2 class="memtitle"><span class="permalink"><a href="#a6a17f58da2071720e3003a56a092aab3">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[56/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -21964,6 +28443,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -21971,10 +28455,13 @@ Variables</h2></td></tr>
</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>
+<h2 class="memtitle"><span class="permalink"><a href="#aafc370ea363f0565c3a8bced1e37c79e">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[57/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -21984,6 +28471,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -21991,10 +28483,13 @@ Variables</h2></td></tr>
</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>
+<h2 class="memtitle"><span class="permalink"><a href="#a914ed6d4cdc4525ff0020148d4c4155c">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[58/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -22004,6 +28499,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -22011,10 +28511,13 @@ Variables</h2></td></tr>
</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>
+<h2 class="memtitle"><span class="permalink"><a href="#a3cbbb4e00618b072ace46751e660a295">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[59/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -22024,6 +28527,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -22031,10 +28539,13 @@ Variables</h2></td></tr>
</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>
+<h2 class="memtitle"><span class="permalink"><a href="#af6af4b51e08d3e811620811ab5e0cd2d">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[60/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -22044,6 +28555,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -22051,10 +28567,13 @@ Variables</h2></td></tr>
</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>
+<h2 class="memtitle"><span class="permalink"><a href="#ac2d31ced5505a9d05287f5b71d25e34a">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[61/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -22064,6 +28583,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -22071,10 +28595,13 @@ Variables</h2></td></tr>
</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>
+<h2 class="memtitle"><span class="permalink"><a href="#a81c31de4f532a95ab85ed6d999029332">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[62/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -22084,6 +28611,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -22091,10 +28623,13 @@ Variables</h2></td></tr>
</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>
+<h2 class="memtitle"><span class="permalink"><a href="#a24d3abbfc1ed81df673452c7148aa0cc">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[63/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -22104,6 +28639,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -22111,10 +28651,13 @@ Variables</h2></td></tr>
</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>
+<h2 class="memtitle"><span class="permalink"><a href="#ab676aab9119d1417764849099a099ecf">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[64/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -22124,6 +28667,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -22131,10 +28679,13 @@ Variables</h2></td></tr>
</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>
+<h2 class="memtitle"><span class="permalink"><a href="#a1b5ff142f1d4420a8d83d9bcff1bfff4">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[65/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -22144,6 +28695,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -22151,10 +28707,13 @@ Variables</h2></td></tr>
</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>
+<h2 class="memtitle"><span class="permalink"><a href="#ad640080ff4ea3e4f9ff05823e32ce15f">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[66/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -22164,6 +28723,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -22171,10 +28735,13 @@ Variables</h2></td></tr>
</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>
+<h2 class="memtitle"><span class="permalink"><a href="#a9cc235c8c5e2ef3d2788cd558d676b0a">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[67/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -22184,6 +28751,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -22191,10 +28763,13 @@ Variables</h2></td></tr>
</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>
+<h2 class="memtitle"><span class="permalink"><a href="#a110b9fdf7f17a1d065cd59ebc4bb76f7">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[68/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -22204,37 +28779,51 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
+<a id="ac4fb1513cf6f4f3f40ab3d6559ec4067"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac4fb1513cf6f4f3f40ab3d6559ec4067">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[69/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<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 class="paramtype">const T *&#160;</td>
+ <td class="paramname"> = <code>nullptr</code></td><td>)</td>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
+<h2 class="memtitle"><span class="permalink"><a href="#a60af5a86cf0261d0bdf4312736ab4461">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[70/73]</span></h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -22244,17 +28833,53 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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="af44c8ebb1b55f4c42cc301d0bf030aa5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af44c8ebb1b55f4c42cc301d0bf030aa5">&#9670;&nbsp;</a></span>LayerEnumOf() <span class="overload">[71/73]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <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>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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="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="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -22264,6 +28889,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -22275,6 +28905,9 @@ Variables</h2></td></tr>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> armnn::LayerEnumOf </td>
@@ -22284,6 +28917,11 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
@@ -22315,12 +28953,30 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_logging_8hpp_source.xhtml#l00022">22</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>
+<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">switch</span>(level)</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">case</span> LogSeverity::Trace:</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Trace&quot;</span>;</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#a181ecb133401da6ff2916c192ca04d48">LogSeverity::Debug</a>:</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Debug&quot;</span>;</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordflow">case</span> LogSeverity::Info:</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Info&quot;</span>;</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordflow">case</span> LogSeverity::Warning:</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Warning&quot;</span>;</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordflow">case</span> LogSeverity::Error:</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Error&quot;</span>;</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">case</span> LogSeverity::Fatal:</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Fatal&quot;</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> <span class="stringliteral">&quot;Log&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;}</div>
+</div><!-- fragment -->
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3daa603905470e2a5b8c13e96b579ef0dba">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#l00102">ScopedRecord::ScopedRecord()</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">switch</span>(level)</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">case</span> LogSeverity::Trace:</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Trace&quot;</span>;</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#a181ecb133401da6ff2916c192ca04d48">LogSeverity::Debug</a>:</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Debug&quot;</span>;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordflow">case</span> LogSeverity::Info:</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Info&quot;</span>;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordflow">case</span> LogSeverity::Warning:</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Warning&quot;</span>;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordflow">case</span> LogSeverity::Error:</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Error&quot;</span>;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">case</span> LogSeverity::Fatal:</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Fatal&quot;</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> <span class="stringliteral">&quot;Log&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;}</div><div class="ttc" id="namespacearmnn_xhtml_a181ecb133401da6ff2916c192ca04d48"><div class="ttname"><a href="namespacearmnn.xhtml#a181ecb133401da6ff2916c192ca04d48">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, bool outputsToFile)</div><div class="ttdef"><b>Definition:</b> <a href="_debug_8cpp_source.xhtml#l00097">Debug.cpp:97</a></div></div>
-</div><!-- fragment -->
+
</div>
</div>
<a id="ac52e04c0e349e25bcdaa72c27395ef8f"></a>
@@ -22362,15 +29018,65 @@ Variables</h2></td></tr>
</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>
+<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 - armnn::numeric_cast&lt;unsigned int&gt;(std::abs(descriptor.m_Axis)) :</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <a class="code" href="namespacearmnn.xhtml">armnn</a>::<a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">numeric_cast</a>&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><!-- fragment -->
+<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#l00182">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#l00172">SoftmaxDescriptor::m_Axis</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00170">SoftmaxDescriptor::m_Beta</a>, and <a class="el" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</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#l00182">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#l00172">SoftmaxDescriptor::m_Axis</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00170">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>
-<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#l00182">TensorUtils.cpp:182</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="a952423703fa6b92f18d19df3995633b4"></a>
@@ -22646,76 +29352,215 @@ Variables</h2></td></tr>
</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#l01087">LstmDescriptor::m_ActivationFunc</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01093">LstmDescriptor::m_CifgEnabled</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01089">LstmDescriptor::m_ClippingThresCell</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01091">LstmDescriptor::m_ClippingThresProj</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01099">LstmDescriptor::m_LayerNormEnabled</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01095">LstmDescriptor::m_PeepholeEnabled</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01097">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#l00048">Types.hpp:48</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#l00086">Types.hpp:86</a></div></div>
+<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><!-- 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="_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#l01087">LstmDescriptor::m_ActivationFunc</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01093">LstmDescriptor::m_CifgEnabled</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01089">LstmDescriptor::m_ClippingThresCell</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01091">LstmDescriptor::m_ClippingThresProj</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01099">LstmDescriptor::m_LayerNormEnabled</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01095">LstmDescriptor::m_PeepholeEnabled</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01097">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">References <a class="el" href="_assert_8hpp_source.xhtml#l00015">ARMNN_ASSERT_MSG</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#l00221">armnnUtils::GetPerAxisParams()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00478">TensorInfo::GetQuantizationOffset()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00461">TensorInfo::GetQuantizationScale()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00446">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::Float16:</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;Float16Decoder&gt;(<span class="keyword">static_cast&lt;</span><span class="keyword">const </span><a class="code" href="namespacearmnn.xhtml#a0b49aa352b84d572942185ce72cef751">Half</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::Float32:</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;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="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::Signed32:</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> MakeSigned32Decoder(info, 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::QSymmS8:</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">if</span> (<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.HasPerAxisQuantization())</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; 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="l00108"></a><span class="lineno"> 108</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="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="keywordflow">return</span> std::make_unique&lt;QSymmS8Decoder&gt;(</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</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="l00114"></a><span class="lineno"> 114</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</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">case</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">armnn::DataType::Boolean</a>:</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">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="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">default</span>:</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; <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="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; }</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">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</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#l00221">TensorUtils.cpp:221</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_a0b49aa352b84d572942185ce72cef751"><div class="ttname"><a href="namespacearmnn.xhtml#a0b49aa352b84d572942185ce72cef751">armnn::Half</a></div><div class="ttdeci">half_float::half Half</div><div class="ttdef"><b>Definition:</b> <a href="_half_8hpp_source.xhtml#l00022">Half.hpp:22</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="adb59a379c467b6d48874e946183b4d21"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#adb59a379c467b6d48874e946183b4d21">&#9670;&nbsp;</a></span>MakeDecoder() <span class="overload">[2/4]</span></h2>
+<a id="a8cb12db00d6e4ab4ac5ccfa6e7a69374"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8cb12db00d6e4ab4ac5ccfa6e7a69374">&#9670;&nbsp;</a></span>MakeDecoder() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -22724,7 +29569,7 @@ Variables</h2></td></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 class="memname">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_decoder.xhtml">Decoder</a>&lt; int32_t &gt; &gt; 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>
@@ -22749,18 +29594,76 @@ Variables</h2></td></tr>
</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>
+<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::Float16:</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;Float16Decoder&gt;(<span class="keyword">static_cast&lt;</span><span class="keyword">const </span><a class="code" href="namespacearmnn.xhtml#a0b49aa352b84d572942185ce72cef751">Half</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::Float32:</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;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="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::Signed32:</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> MakeSigned32Decoder(info, 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::QSymmS8:</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">if</span> (<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.HasPerAxisQuantization())</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; 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="l00108"></a><span class="lineno"> 108</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="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="keywordflow">return</span> std::make_unique&lt;QSymmS8Decoder&gt;(</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</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="l00114"></a><span class="lineno"> 114</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</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">case</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">armnn::DataType::Boolean</a>:</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">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="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">default</span>:</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; <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="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; }</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">return</span> <span class="keyword">nullptr</span>;</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;}</div>
+</div><!-- fragment -->
+<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>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">Float16</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">Float32</a>, <a class="el" href="_tensor_utils_8cpp_source.xhtml#l00221">armnnUtils::GetPerAxisParams()</a>, <a class="el" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</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>
-<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>, <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#l00221">armnnUtils::GetPerAxisParams()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00478">TensorInfo::GetQuantizationOffset()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00461">TensorInfo::GetQuantizationScale()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00446">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::Float16:</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;Float16Decoder&gt;(<span class="keyword">static_cast&lt;</span><span class="keyword">const </span><a class="code" href="namespacearmnn.xhtml#a0b49aa352b84d572942185ce72cef751">Half</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::Float32:</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;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="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::Signed32:</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> MakeSigned32Decoder(info, 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::QSymmS8:</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">if</span> (<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.HasPerAxisQuantization())</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; 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="l00108"></a><span class="lineno"> 108</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="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="keywordflow">return</span> std::make_unique&lt;QSymmS8Decoder&gt;(</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</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="l00114"></a><span class="lineno"> 114</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</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">case</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">armnn::DataType::Boolean</a>:</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">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="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">default</span>:</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; <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="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; }</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">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</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#l00221">TensorUtils.cpp:221</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_a0b49aa352b84d572942185ce72cef751"><div class="ttname"><a href="namespacearmnn.xhtml#a0b49aa352b84d572942185ce72cef751">armnn::Half</a></div><div class="ttdeci">half_float::half Half</div><div class="ttdef"><b>Definition:</b> <a href="_half_8hpp_source.xhtml#l00022">Half.hpp:22</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="a59c4fab5981602d8117d0b024eafd9ec"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a59c4fab5981602d8117d0b024eafd9ec">&#9670;&nbsp;</a></span>MakeDecoder() <span class="overload">[3/4]</span></h2>
+<a id="a1545cb162c5a64d75d9c0c05e8ea387c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1545cb162c5a64d75d9c0c05e8ea387c">&#9670;&nbsp;</a></span>MakeDecoder() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -22769,7 +29672,7 @@ Variables</h2></td></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 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>
@@ -22778,7 +29681,7 @@ Variables</h2></td></tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const void *&#160;</td>
- <td class="paramname"><em>data</em>&#160;</td>
+ <td class="paramname"><em>data</em> = <code>nullptr</code>&#160;</td>
</tr>
<tr>
<td></td>
@@ -22793,16 +29696,77 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="_decoders_8hpp_source.xhtml#l00132">132</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="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">switch</span>(<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetDataType())</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">case</span> DataType::Boolean:</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> 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="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">default</span>:</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="_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="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keywordflow">break</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">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</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>
+<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>
+<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::Float16:</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;Float16Decoder&gt;(<span class="keyword">static_cast&lt;</span><span class="keyword">const </span><a class="code" href="namespacearmnn.xhtml#a0b49aa352b84d572942185ce72cef751">Half</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::Float32:</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;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="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::Signed32:</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> MakeSigned32Decoder(info, 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::QSymmS8:</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">if</span> (<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.HasPerAxisQuantization())</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; 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="l00108"></a><span class="lineno"> 108</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="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="keywordflow">return</span> std::make_unique&lt;QSymmS8Decoder&gt;(</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</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="l00114"></a><span class="lineno"> 114</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationScale(),</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetQuantizationOffset());</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">case</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">armnn::DataType::Boolean</a>:</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">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="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">default</span>:</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; <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="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; }</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">return</span> <span class="keyword">nullptr</span>;</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;}</div>
+</div><!-- fragment -->
+<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>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">Float16</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">Float32</a>, <a class="el" href="_tensor_utils_8cpp_source.xhtml#l00221">armnnUtils::GetPerAxisParams()</a>, <a class="el" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</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>
+</div>
+<a id="a01cdb4291025316036201d689811255f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a01cdb4291025316036201d689811255f">&#9670;&nbsp;</a></span>MakeEncoder() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -22811,7 +29775,7 @@ Variables</h2></td></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 class="memname">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_encoder.xhtml">Encoder</a>&lt; int32_t &gt; &gt; 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>
@@ -22819,7 +29783,7 @@ Variables</h2></td></tr>
<tr>
<td class="paramkey"></td>
<td></td>
- <td class="paramtype">const void *&#160;</td>
+ <td class="paramtype">void *&#160;</td>
<td class="paramname"><em>data</em>&#160;</td>
</tr>
<tr>
@@ -22835,16 +29799,76 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="_decoders_8hpp_source.xhtml#l00150">150</a> of file <a class="el" href="_decoders_8hpp_source.xhtml">Decoders.hpp</a>.</p>
+<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>
+<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#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">armnn::DataType::Float16</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;Float16Encoder&gt;(<span class="keyword">static_cast&lt;</span><a class="code" href="namespacearmnn.xhtml#a0b49aa352b84d572942185ce72cef751">Half</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#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</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;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="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">default</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; <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="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; }</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; }</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;}</div>
+</div><!-- fragment -->
+<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_utils_8cpp_source.xhtml#l00221">armnnUtils::GetPerAxisParams()</a>, <a class="el" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</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>
-<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="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">switch</span>(<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetDataType())</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">case</span> DataType::Signed32:</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">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="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">default</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; <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="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; }</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</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>
+<h2 class="memtitle"><span class="permalink"><a href="#a56867cc5245724ab56953604b1eec9ee">&#9670;&nbsp;</a></span>MakeEncoder() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -22878,154 +29902,71 @@ Variables</h2></td></tr>
</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>
+<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#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">armnn::DataType::Float16</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;Float16Encoder&gt;(<span class="keyword">static_cast&lt;</span><a class="code" href="namespacearmnn.xhtml#a0b49aa352b84d572942185ce72cef751">Half</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#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</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;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="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">default</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; <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="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; }</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; }</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;}</div>
+</div><!-- fragment -->
+<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_utils_8cpp_source.xhtml#l00221">armnnUtils::GetPerAxisParams()</a>, <a class="el" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</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>
-<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>, <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#l00221">armnnUtils::GetPerAxisParams()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00478">TensorInfo::GetQuantizationOffset()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00461">TensorInfo::GetQuantizationScale()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00446">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#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">armnn::DataType::Float16</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;Float16Encoder&gt;(<span class="keyword">static_cast&lt;</span><a class="code" href="namespacearmnn.xhtml#a0b49aa352b84d572942185ce72cef751">Half</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#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</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;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="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">default</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; <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="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; }</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; }</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</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_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#l00221">TensorUtils.cpp:221</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_a0b49aa352b84d572942185ce72cef751"><div class="ttname"><a href="namespacearmnn.xhtml#a0b49aa352b84d572942185ce72cef751">armnn::Half</a></div><div class="ttdeci">half_float::half Half</div><div class="ttdef"><b>Definition:</b> <a href="_half_8hpp_source.xhtml#l00022">Half.hpp:22</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_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><!-- 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#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#l00221">armnnUtils::GetPerAxisParams()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00478">TensorInfo::GetQuantizationOffset()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00461">TensorInfo::GetQuantizationScale()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00446">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#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">armnn::DataType::Float16</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;Float16Encoder&gt;(<span class="keyword">static_cast&lt;</span><a class="code" href="namespacearmnn.xhtml#a0b49aa352b84d572942185ce72cef751">Half</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#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</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;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="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">default</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; <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="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; }</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; }</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</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_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#l00221">TensorUtils.cpp:221</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_a0b49aa352b84d572942185ce72cef751"><div class="ttname"><a href="namespacearmnn.xhtml#a0b49aa352b84d572942185ce72cef751">armnn::Half</a></div><div class="ttdeci">half_float::half Half</div><div class="ttdef"><b>Definition:</b> <a href="_half_8hpp_source.xhtml#l00022">Half.hpp:22</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_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><!-- 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#l00086">86</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="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">switch</span>(<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetDataType())</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">case</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">armnn::DataType::Boolean</a>:</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">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="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">default</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; <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="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; }</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="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</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#l00104">104</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="l00105"></a><span class="lineno"> 105</span>&#160;{</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordflow">switch</span>(<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetDataType())</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">case</span> DataType::Signed32:</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_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="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">default</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; <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="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keywordflow">break</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">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</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>
@@ -23045,11 +29986,24 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<p class="reference">References <a class="el" href="_descriptors_8hpp_source.xhtml#l00717">DetectionPostProcessDescriptor::m_DetectionsPerClass</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00715">DetectionPostProcessDescriptor::m_MaxClassesPerDetection</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00713">DetectionPostProcessDescriptor::m_MaxDetections</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00721">DetectionPostProcessDescriptor::m_NmsIouThreshold</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00719">DetectionPostProcessDescriptor::m_NmsScoreThreshold</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00723">DetectionPostProcessDescriptor::m_NumClasses</a>, and <a class="el" href="_descriptors_8hpp_source.xhtml#l00725">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>
@@ -23069,12 +30023,18 @@ Variables</h2></td></tr>
</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>
-
+<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><!-- fragment -->
<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#l01040">ApplyBackendOptimizations()</a>, and <a class="el" href="_network_8cpp_source.xhtml#l01572">Optimize()</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>
@@ -23096,10 +30056,12 @@ Variables</h2></td></tr>
<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 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><!-- fragment -->
+<p class="reference">References <a class="el" href="_optional_8hpp_source.xhtml#l00041">CONSTRUCT_IN_PLACE</a>.</p>
+
</div>
</div>
<a id="a2cf1ea7140f419eba6d60d01dd0a795a"></a>
@@ -23107,6 +30069,9 @@ Variables</h2></td></tr>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<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>
@@ -23126,10 +30091,18 @@ Variables</h2></td></tr>
<td></td><td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
-<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 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>
@@ -23177,13 +30150,143 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_mirror_pad_8cpp_source.xhtml#l00059">59</a> of file <a class="el" href="_mirror_pad_8cpp_source.xhtml">MirrorPad.cpp</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><!-- fragment -->
+<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#l01171">PadDescriptor::m_PaddingMode</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01165">PadDescriptor::m_PadList</a>, <a class="el" href="_workload_data_8hpp_source.xhtml#l00066">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">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#l01171">PadDescriptor::m_PaddingMode</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01165">PadDescriptor::m_PadList</a>, <a class="el" href="_workload_data_8hpp_source.xhtml#l00066">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#l00186">Types.hpp:186</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="a7e3b0eb2d8e1d5849abfab90f2b49145"></a>
@@ -23191,6 +30294,9 @@ Variables</h2></td></tr>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr const char* armnn::MockTensorHandleFactoryId </td>
@@ -23199,12 +30305,20 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
-
+<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 -->
<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>
@@ -23234,9 +30348,15 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00978">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>
@@ -23272,10 +30392,20 @@ Variables</h2></td></tr>
</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#l00667">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 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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00667">NeonLayerSupport::IsActivationSupported()</a>.</p>
+
</div>
</div>
<a id="a1b03e82a1a53b686aedea3734b2fb957"></a>
@@ -23317,10 +30447,23 @@ Variables</h2></td></tr>
</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#l00680">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 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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00680">NeonLayerSupport::IsAdditionSupported()</a>, and <a class="el" href="_neon_backend_8cpp_source.xhtml#l00142">NeonBackend::OptimizeSubgraphView()</a>.</p>
+
</div>
</div>
<a id="a61d1f39297fec6e3062e4047dc5f236e"></a>
@@ -23356,11 +30499,28 @@ Variables</h2></td></tr>
</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#l00693">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#l00196">TensorUtils.cpp:196</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="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 = armnn::numeric_cast&lt;int&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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00693">NeonLayerSupport::IsArgMinMaxSupported()</a>.</p>
+
</div>
</div>
<a id="a3a34a305e5187f3a3c67030d3bebbdb0"></a>
@@ -23368,6 +30528,9 @@ Variables</h2></td></tr>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr const char* armnn::NeonBackendId </td>
@@ -23376,12 +30539,18 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
-
+<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 -->
<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="abc5405fc939efb69e2d630421f0d4271"></a>
@@ -23423,15 +30592,85 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_batch_mat_mul_workload_8cpp_source.xhtml#l00023">23</a> of file <a class="el" href="_neon_batch_mat_mul_workload_8cpp_source.xhtml">NeonBatchMatMulWorkload.cpp</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="keywordflow">if</span> (descriptor.m_AdjointX || descriptor.m_AdjointY )</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">throw</span> Exception(<span class="stringliteral">&quot;Support for adjoint not implemented.&quot;</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; <span class="keywordflow">if</span> (descriptor.m_DataLayoutX != <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a> || descriptor.m_DataLayoutY != <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</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">throw</span> Exception(<span class="stringliteral">&quot;Only supported the MatMul in the last 2 dimensions&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; </div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> aclInputXInfo = armcomputetensorutils::BuildArmComputeTensorInfo(inputX, descriptor.m_DataLayoutX);</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> aclInputYInfo = armcomputetensorutils::BuildArmComputeTensorInfo(inputY, descriptor.m_DataLayoutY);</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</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="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusGEMM = <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK);</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusPermuteX = <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK);</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusPermuteY = <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK);</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 aclPermutedXInfo = arm_compute::TensorInfo();</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; arm_compute::TensorInfo aclPermutedYInfo = arm_compute::TensorInfo();</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_TransposeX == <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="keyword">auto</span> permutationXVector = <a class="code" href="namespacearmnn.xhtml#a15e2ba06d2ecd7ff6013118838e5d1be">GeneratePermutationVectorOnLastTwoDimensions</a>(inputX.GetNumDimensions());</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> aclPermutationXVector = armcomputetensorutils::BuildArmComputePermutationVector(permutationXVector);</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keyword">const</span> TensorInfo permutedXInfo = <a class="code" href="namespacearmnn_utils.xhtml#abeaf4f6785039866fd075f4569ba8e84">armnnUtils::Permuted</a>(inputX, permutationXVector);</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; aclPermutedXInfo = armcomputetensorutils::BuildArmComputeTensorInfo(permutedXInfo);</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; statusPermuteX = arm_compute::NEPermute::validate(&amp;aclInputXInfo,</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; &amp;aclPermutedXInfo,</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; aclPermutationXVector);</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; <span class="keywordflow">if</span> (descriptor.m_TransposeY == <span class="keyword">true</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="keyword">auto</span> permutationYVector = <a class="code" href="namespacearmnn.xhtml#a15e2ba06d2ecd7ff6013118838e5d1be">GeneratePermutationVectorOnLastTwoDimensions</a>(inputY.GetNumDimensions());</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> aclPermutationYVector = armcomputetensorutils::BuildArmComputePermutationVector(permutationYVector);</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keyword">const</span> TensorInfo permutedYInfo = <a class="code" href="namespacearmnn_utils.xhtml#abeaf4f6785039866fd075f4569ba8e84">armnnUtils::Permuted</a>(inputY, permutationYVector);</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; aclPermutedYInfo = armcomputetensorutils::BuildArmComputeTensorInfo(permutedYInfo);</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; statusPermuteY = arm_compute::NEPermute::validate(&amp;aclInputYInfo,</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; &amp;aclPermutedYInfo,</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; aclPermutationYVector);</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; <span class="keyword">const</span> arm_compute::GEMMInfo&amp; gemm_info = arm_compute::GEMMInfo(<span class="keyword">false</span>, <span class="comment">// is inputX reshaped</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keyword">false</span>, <span class="comment">// is inputY reshaped</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keyword">false</span>); <span class="comment">// is inputY reshaped only 1st run</span></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; statusGEMM = arm_compute::NEGEMM::validate(descriptor.m_TransposeX ? &amp;aclPermutedXInfo : &amp;aclInputXInfo,</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; descriptor.m_TransposeY ? &amp;aclPermutedYInfo : &amp;aclInputYInfo,</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keyword">nullptr</span>,</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; &amp;aclOutputInfo,</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; 1.0,</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; gemm_info);</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> (statusPermuteX.error_code() == arm_compute::ErrorCode::OK &amp;&amp;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; statusPermuteY.error_code() == arm_compute::ErrorCode::OK &amp;&amp;</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; statusGEMM.error_code() == arm_compute::ErrorCode::OK)</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> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="stringliteral">&quot;All BatchMatMul layers validate status OK.&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; <span class="keywordflow">else</span></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> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::RUNTIME_ERROR,</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="stringliteral">&quot;BatchMatMul layer validate status failed.&quot;</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; + statusGEMM.error_description()</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; + statusPermuteX.error_description()</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; + statusPermuteY.error_description());</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><!-- fragment -->
<p class="reference">References <a class="el" href="_descriptors_8hpp_source.xhtml#l01564">BatchMatMulDescriptor::m_AdjointX</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01565">BatchMatMulDescriptor::m_AdjointY</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01568">BatchMatMulDescriptor::m_DataLayoutX</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01569">BatchMatMulDescriptor::m_DataLayoutY</a>, and <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">NCHW</a>.</p>
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00705">NeonLayerSupport::IsBatchMatMulSupported()</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="keywordflow">if</span> (descriptor.m_AdjointX || descriptor.m_AdjointY )</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">throw</span> Exception(<span class="stringliteral">&quot;Support for adjoint not implemented.&quot;</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; <span class="keywordflow">if</span> (descriptor.m_DataLayoutX != <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a> || descriptor.m_DataLayoutY != <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</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">throw</span> Exception(<span class="stringliteral">&quot;Only supported the MatMul in the last 2 dimensions&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;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> aclInputXInfo = armcomputetensorutils::BuildArmComputeTensorInfo(inputX, descriptor.m_DataLayoutX);</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> aclInputYInfo = armcomputetensorutils::BuildArmComputeTensorInfo(inputY, descriptor.m_DataLayoutY);</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</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="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusGEMM = <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK);</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusPermuteX = <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK);</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusPermuteY = <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK);</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 aclPermutedXInfo = arm_compute::TensorInfo();</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; arm_compute::TensorInfo aclPermutedYInfo = arm_compute::TensorInfo();</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_TransposeX == <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="keyword">auto</span> permutationXVector = <a class="code" href="namespacearmnn.xhtml#a15e2ba06d2ecd7ff6013118838e5d1be">GeneratePermutationVectorOnLastTwoDimensions</a>(inputX.GetNumDimensions());</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> aclPermutationXVector = armcomputetensorutils::BuildArmComputePermutationVector(permutationXVector);</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keyword">const</span> TensorInfo permutedXInfo = <a class="code" href="namespacearmnn_utils.xhtml#abeaf4f6785039866fd075f4569ba8e84">armnnUtils::Permuted</a>(inputX, permutationXVector);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; aclPermutedXInfo = armcomputetensorutils::BuildArmComputeTensorInfo(permutedXInfo);</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; statusPermuteX = arm_compute::NEPermute::validate(&amp;aclInputXInfo,</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; &amp;aclPermutedXInfo,</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; aclPermutationXVector);</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; <span class="keywordflow">if</span> (descriptor.m_TransposeY == <span class="keyword">true</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="keyword">auto</span> permutationYVector = <a class="code" href="namespacearmnn.xhtml#a15e2ba06d2ecd7ff6013118838e5d1be">GeneratePermutationVectorOnLastTwoDimensions</a>(inputY.GetNumDimensions());</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> aclPermutationYVector = armcomputetensorutils::BuildArmComputePermutationVector(permutationYVector);</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keyword">const</span> TensorInfo permutedYInfo = <a class="code" href="namespacearmnn_utils.xhtml#abeaf4f6785039866fd075f4569ba8e84">armnnUtils::Permuted</a>(inputY, permutationYVector);</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; aclPermutedYInfo = armcomputetensorutils::BuildArmComputeTensorInfo(permutedYInfo);</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; statusPermuteY = arm_compute::NEPermute::validate(&amp;aclInputYInfo,</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; &amp;aclPermutedYInfo,</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; aclPermutationYVector);</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; <span class="keyword">const</span> arm_compute::GEMMInfo&amp; gemm_info = arm_compute::GEMMInfo(<span class="keyword">false</span>, <span class="comment">// is inputX reshaped</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keyword">false</span>, <span class="comment">// is inputY reshaped</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keyword">false</span>); <span class="comment">// is inputY reshaped only 1st run</span></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; statusGEMM = arm_compute::NEGEMM::validate(descriptor.m_TransposeX ? &amp;aclPermutedXInfo : &amp;aclInputXInfo,</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; descriptor.m_TransposeY ? &amp;aclPermutedYInfo : &amp;aclInputYInfo,</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keyword">nullptr</span>,</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; &amp;aclOutputInfo,</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; 1.0,</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; gemm_info);</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> (statusPermuteX.error_code() == arm_compute::ErrorCode::OK &amp;&amp;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; statusPermuteY.error_code() == arm_compute::ErrorCode::OK &amp;&amp;</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; statusGEMM.error_code() == arm_compute::ErrorCode::OK)</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> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="stringliteral">&quot;All BatchMatMul layers validate status OK.&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; <span class="keywordflow">else</span></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> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::RUNTIME_ERROR,</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="stringliteral">&quot;BatchMatMul layer validate status failed.&quot;</span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; + statusGEMM.error_description()</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; + statusPermuteX.error_description()</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; + statusPermuteY.error_description());</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="ttc" id="namespacearmnn_xhtml_a15e2ba06d2ecd7ff6013118838e5d1be"><div class="ttname"><a href="namespacearmnn.xhtml#a15e2ba06d2ecd7ff6013118838e5d1be">armnn::GeneratePermutationVectorOnLastTwoDimensions</a></div><div class="ttdeci">armnn::PermutationVector GeneratePermutationVectorOnLastTwoDimensions(unsigned int rank)</div><div class="ttdoc">Generates a permutation vector of size rank that permutes the 2 most right dimensions. </div><div class="ttdef"><b>Definition:</b> <a href="_workload_utils_8cpp_source.xhtml#l00344">WorkloadUtils.cpp:344</a></div></div>
-<div class="ttc" id="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70b"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">armnn::Status</a></div><div class="ttdeci">Status</div><div class="ttdoc">enumeration </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00042">Types.hpp:42</a></div></div>
-<div class="ttc" id="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><!-- fragment -->
+
</div>
</div>
<a id="ac1be1c9a317b23b5684c83af59fb2c96"></a>
@@ -23497,10 +30736,35 @@ Variables</h2></td></tr>
</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#l00719">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 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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00719">NeonLayerSupport::IsBatchNormalizationSupported()</a>, and <a class="el" href="_neon_backend_8cpp_source.xhtml#l00142">NeonBackend::OptimizeSubgraphView()</a>.</p>
+
</div>
</div>
<a id="aad5f7f0fcd2dbb0aad7016ff984e7cc6"></a>
@@ -23536,11 +30800,23 @@ Variables</h2></td></tr>
</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#l00740">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#l00042">Types.hpp:42</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="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 = armnn::numeric_cast&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 = armnn::numeric_cast&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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00740">NeonLayerSupport::IsBatchToSpaceNdSupported()</a>.</p>
+
</div>
</div>
<a id="a3ab69cec1cab301e096a2830f65a36ec"></a>
@@ -23570,9 +30846,15 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00752">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>
@@ -23608,13 +30890,39 @@ Variables</h2></td></tr>
</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#l00762">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#l00062">Types.hpp:62</a></div></div>
-<div class="ttc" id="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70b"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">armnn::Status</a></div><div class="ttdeci">Status</div><div class="ttdoc">enumeration </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00042">Types.hpp:42</a></div></div>
-<div class="ttc" id="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 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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00762">NeonLayerSupport::IsChannelShuffleSupported()</a>.</p>
+
</div>
</div>
<a id="ae412e8e64d6a6dde3ace908b59c29c06"></a>
@@ -23656,16 +30964,26 @@ Variables</h2></td></tr>
</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#l00774">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#l00108">Types.hpp:108</a></div></div>
-<div class="ttc" id="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70b"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">armnn::Status</a></div><div class="ttdeci">Status</div><div class="ttdoc">enumeration </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00042">Types.hpp:42</a></div></div>
-<div class="ttc" id="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#l00139">ArmComputeUtils.hpp:139</a></div></div>
+<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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00774">NeonLayerSupport::IsComparisonSupported()</a>.</p>
+
</div>
</div>
-<a id="a8a219633e750d6daffcef3b641fa11f3"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a8a219633e750d6daffcef3b641fa11f3">&#9670;&nbsp;</a></span>NeonConcatWorkloadValidate()</h2>
+<a id="a3653413d74a951674c88db372d217baa"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3653413d74a951674c88db372d217baa">&#9670;&nbsp;</a></span>NeonConcatWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
@@ -23673,7 +30991,7 @@ Variables</h2></td></tr>
<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="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>
@@ -23697,10 +31015,26 @@ Variables</h2></td></tr>
</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#l00789">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 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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00789">NeonLayerSupport::IsConcatSupported()</a>.</p>
+
</div>
</div>
<a id="afb681fd9b8afe0b236d51b6c868ae660"></a>
@@ -23720,10 +31054,34 @@ Variables</h2></td></tr>
</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#l00828">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#l00042">Types.hpp:42</a></div></div>
+<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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00828">NeonLayerSupport::IsConstantSupported()</a>.</p>
+
</div>
</div>
<a id="a45691b0c4a46c239b4986cfed95de13b"></a>
@@ -23783,12 +31141,50 @@ Variables</h2></td></tr>
</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#l00856">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; arm_compute::TensorInfo aclWeightsInfo = BuildArmComputeTensorInfo(weights, descriptor.m_DataLayout);</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; aclWeightsInfo.set_are_values_constant(weights.IsConstant());</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::Size2D aclDilationInfo = BuildArmComputeSize2D(descriptor.m_DilationX,</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; descriptor.m_DilationY);</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; arm_compute::TensorInfo aclBiasesInfo;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; arm_compute::TensorInfo *optionalAclBiasesInfo = <span class="keyword">nullptr</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">if</span> (descriptor.m_BiasEnabled)</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#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(biases.has_value());</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="comment">// Same for bias as weights. We don&#39;t currently support non const.</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordflow">if</span> (!biases.value().IsConstant())</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#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>{arm_compute::ErrorCode::RUNTIME_ERROR,</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="stringliteral">&quot;ArmNN NeonConvolution2dWorkload does not support non constant bias.&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; aclBiasesInfo = BuildArmComputeTensorInfo(biases.value(), descriptor.m_DataLayout);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; aclBiasesInfo.set_are_values_constant(biases.value().IsConstant());</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; optionalAclBiasesInfo = &amp;aclBiasesInfo;</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; arm_compute::PadStrideInfo layerInfo = BuildArmComputePadStrideInfo(descriptor);</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="keyword">const</span> arm_compute::ActivationLayerInfo activationInfo = <a class="code" href="namespacearmnn.xhtml#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; activationDescriptor);</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">return</span> arm_compute::NEConvolutionLayer::validate(&amp;aclInputInfo,</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; &amp;aclWeightsInfo,</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; optionalAclBiasesInfo,</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; &amp;aclOutputInfo,</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; layerInfo,</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; arm_compute::WeightsInfo(),</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; aclDilationInfo,</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; activationInfo,</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; isFastMathEnabled);</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</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#l00042">Types.hpp:42</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_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 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; arm_compute::TensorInfo aclWeightsInfo = BuildArmComputeTensorInfo(weights, descriptor.m_DataLayout);</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; aclWeightsInfo.set_are_values_constant(weights.IsConstant());</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::Size2D aclDilationInfo = BuildArmComputeSize2D(descriptor.m_DilationX,</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; descriptor.m_DilationY);</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; arm_compute::TensorInfo aclBiasesInfo;</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; arm_compute::TensorInfo *optionalAclBiasesInfo = <span class="keyword">nullptr</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">if</span> (descriptor.m_BiasEnabled)</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#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(biases.has_value());</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="comment">// Same for bias as weights. We don&#39;t currently support non const.</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordflow">if</span> (!biases.value().IsConstant())</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#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>{arm_compute::ErrorCode::RUNTIME_ERROR,</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="stringliteral">&quot;ArmNN NeonConvolution2dWorkload does not support non constant bias.&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; aclBiasesInfo = BuildArmComputeTensorInfo(biases.value(), descriptor.m_DataLayout);</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; aclBiasesInfo.set_are_values_constant(biases.value().IsConstant());</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; optionalAclBiasesInfo = &amp;aclBiasesInfo;</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; arm_compute::PadStrideInfo layerInfo = BuildArmComputePadStrideInfo(descriptor);</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="keyword">const</span> arm_compute::ActivationLayerInfo activationInfo = <a class="code" href="namespacearmnn.xhtml#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; activationDescriptor);</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">return</span> arm_compute::NEConvolutionLayer::validate(&amp;aclInputInfo,</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; &amp;aclWeightsInfo,</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; optionalAclBiasesInfo,</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; &amp;aclOutputInfo,</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; layerInfo,</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; arm_compute::WeightsInfo(),</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; aclDilationInfo,</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; activationInfo,</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; isFastMathEnabled);</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;}</div>
</div><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00856">NeonLayerSupport::IsConvolution2dSupported()</a>, and <a class="el" href="_neon_backend_8cpp_source.xhtml#l00142">NeonBackend::OptimizeSubgraphView()</a>.</p>
+
</div>
</div>
<a id="acbb4d7b86eb01bb437230e1586b9aeb4"></a>
@@ -23848,11 +31244,33 @@ Variables</h2></td></tr>
</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#l00889">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#l00293">ArmComputeUtils.hpp:293</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="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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00889">NeonLayerSupport::IsConvolution3dSupported()</a>.</p>
+
</div>
</div>
<a id="a116d88067bf98ce9858ab73e68f605f9"></a>
@@ -23888,13 +31306,20 @@ Variables</h2></td></tr>
</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>
-
+<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 = armnn::numeric_cast&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><!-- fragment -->
<p class="reference">References <a class="el" href="_descriptors_8hpp_source.xhtml#l01042">SpaceToDepthDescriptor::m_DataLayout</a>.</p>
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00922">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#l00062">Types.hpp:62</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>
@@ -23948,21 +31373,62 @@ Variables</h2></td></tr>
</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#l00934">NeonLayerSupport::IsDepthwiseConvolutionSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00961">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 format for weights for depthwise is [1, H, W, C] independently of the input/output layout</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="comment">// ACL format for weights for depthwise is:</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="comment">// - [1, H, W, C] for [N, H, W, C] input/output layout (matches with ArmNN)</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="comment">// - [1, C, H, W] for [N, C, H, W] input/output layout</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">// Therefore ArmNN weights have to be permuted when input/output layout is [N, C, H, W] to pass them to ACL.</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="comment">// The PermuteDepthwiseConv2dWeights backend optimization takes care of this, but it has not been performed yet,</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="comment">// so we do the permute here for the TensorInfo weights.</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> aclDepthMultiplier;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> weightsPermuted;</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</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="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">// Convert the weights into the compute library format</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; 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="l00054"></a><span class="lineno"> 54</span>&#160; aclWeightsInfo.set_are_values_constant(weights.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a945263e85c27f3216a8323cfc16d8919">IsConstant</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; arm_compute::TensorInfo aclBiasesInfo;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; arm_compute::TensorInfo* optionalAclBiasesInfo = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</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="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="_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="l00061"></a><span class="lineno"> 61</span>&#160; <span class="comment">// Same for bias as weights. We don&#39;t currently support non const.</span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">if</span> (!biases.<a class="code" href="classarmnn_1_1_optional_reference_switch.xhtml#a77c7d528ac063d870b8c8426ec81c1c3">value</a>().<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a945263e85c27f3216a8323cfc16d8919">IsConstant</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; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>{arm_compute::ErrorCode::RUNTIME_ERROR,</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="stringliteral">&quot;ArmNN NeonDepthwiseConv2dWorkload does not support non constant bias.&quot;</span>};</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; 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="l00068"></a><span class="lineno"> 68</span>&#160; aclBiasesInfo.set_are_values_constant(biases.<a class="code" href="classarmnn_1_1_optional_reference_switch.xhtml#a77c7d528ac063d870b8c8426ec81c1c3">value</a>().<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a945263e85c27f3216a8323cfc16d8919">IsConstant</a>());</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; optionalAclBiasesInfo = &amp;aclBiasesInfo;</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; arm_compute::PadStrideInfo aclPadStrideInfo = BuildArmComputePadStrideInfo(descriptor);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keyword">const</span> arm_compute::Size2D aclDilationInfo = BuildArmComputeSize2D(</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</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="l00075"></a><span class="lineno"> 75</span>&#160;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</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="l00077"></a><span class="lineno"> 77</span>&#160; activationDescriptor);</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> arm_compute::NEDepthwiseConvolutionLayer::validate(&amp;aclInputInfo,</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; &amp;aclWeightsInfo,</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; optionalAclBiasesInfo,</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; &amp;aclOutputInfo,</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; aclPadStrideInfo,</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; aclDepthMultiplier,</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; activationInfo,</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; aclDilationInfo);</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a945263e85c27f3216a8323cfc16d8919"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a945263e85c27f3216a8323cfc16d8919">armnn::TensorInfo::IsConstant</a></div><div class="ttdeci">bool IsConstant() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8cpp_source.xhtml#l00509">Tensor.cpp:509</a></div></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#l00676">Descriptors.hpp:676</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#l00678">Descriptors.hpp:678</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#l00674">Descriptors.hpp:674</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#l00672">Descriptors.hpp:672</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="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70b"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">armnn::Status</a></div><div class="ttdeci">Status</div><div class="ttdoc">enumeration </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00042">Types.hpp:42</a></div></div>
-<div class="ttc" id="_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#l00170">WorkloadUtils.cpp:170</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 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 format for weights for depthwise is [1, H, W, C] independently of the input/output layout</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="comment">//</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="comment">// ACL format for weights for depthwise is:</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="comment">// - [1, H, W, C] for [N, H, W, C] input/output layout (matches with ArmNN)</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="comment">// - [1, C, H, W] for [N, C, H, W] input/output layout</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">// Therefore ArmNN weights have to be permuted when input/output layout is [N, C, H, W] to pass them to ACL.</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="comment">// The PermuteDepthwiseConv2dWeights backend optimization takes care of this, but it has not been performed yet,</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="comment">// so we do the permute here for the TensorInfo weights.</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> aclDepthMultiplier;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> weightsPermuted;</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</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="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">// Convert the weights into the compute library format</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; 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="l00054"></a><span class="lineno"> 54</span>&#160; aclWeightsInfo.set_are_values_constant(weights.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a945263e85c27f3216a8323cfc16d8919">IsConstant</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; arm_compute::TensorInfo aclBiasesInfo;</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; arm_compute::TensorInfo* optionalAclBiasesInfo = <span class="keyword">nullptr</span>;</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</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="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="_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="l00061"></a><span class="lineno"> 61</span>&#160; <span class="comment">// Same for bias as weights. We don&#39;t currently support non const.</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">if</span> (!biases.<a class="code" href="classarmnn_1_1_optional_reference_switch.xhtml#a77c7d528ac063d870b8c8426ec81c1c3">value</a>().<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a945263e85c27f3216a8323cfc16d8919">IsConstant</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; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>{arm_compute::ErrorCode::RUNTIME_ERROR,</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="stringliteral">&quot;ArmNN NeonDepthwiseConv2dWorkload does not support non constant bias.&quot;</span>};</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; 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="l00068"></a><span class="lineno"> 68</span>&#160; aclBiasesInfo.set_are_values_constant(biases.<a class="code" href="classarmnn_1_1_optional_reference_switch.xhtml#a77c7d528ac063d870b8c8426ec81c1c3">value</a>().<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a945263e85c27f3216a8323cfc16d8919">IsConstant</a>());</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; optionalAclBiasesInfo = &amp;aclBiasesInfo;</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; arm_compute::PadStrideInfo aclPadStrideInfo = BuildArmComputePadStrideInfo(descriptor);</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keyword">const</span> arm_compute::Size2D aclDilationInfo = BuildArmComputeSize2D(</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</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="l00075"></a><span class="lineno"> 75</span>&#160; </div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</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="l00077"></a><span class="lineno"> 77</span>&#160; activationDescriptor);</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> arm_compute::NEDepthwiseConvolutionLayer::validate(&amp;aclInputInfo,</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; &amp;aclWeightsInfo,</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; optionalAclBiasesInfo,</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; &amp;aclOutputInfo,</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; aclPadStrideInfo,</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; aclDepthMultiplier,</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; activationInfo,</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; aclDilationInfo);</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;}</div>
</div><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00934">NeonLayerSupport::IsDepthwiseConvolutionSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00961">NeonLayerSupport::IsDilatedDepthwiseConvolutionSupported()</a>, and <a class="el" href="_neon_backend_8cpp_source.xhtml#l00142">NeonBackend::OptimizeSubgraphView()</a>.</p>
+
</div>
</div>
<a id="acefede7cc57c71ea4cfe1c888bb413e0"></a>
@@ -23992,9 +31458,15 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00951">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>
@@ -24013,7 +31485,45 @@ Variables</h2></td></tr>
</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(ARMNN_BUILD_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(ARMNN_BUILD_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(ARMNN_BUILD_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 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(ARMNN_BUILD_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(ARMNN_BUILD_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(ARMNN_BUILD_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>
@@ -24079,11 +31589,43 @@ Variables</h2></td></tr>
</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 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><!-- fragment -->
+<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>
</div>
<a id="a65c912bfcf02b3096f36caf21fa175d0"></a>
@@ -24125,10 +31667,22 @@ Variables</h2></td></tr>
</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#l01232">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 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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01232">NeonLayerSupport::IsDivisionSupported()</a>, and <a class="el" href="_neon_backend_8cpp_source.xhtml#l00142">NeonBackend::OptimizeSubgraphView()</a>.</p>
+
</div>
</div>
<a id="aec5669eb9285cbca1ee6c7e1dd7bcf6a"></a>
@@ -24158,9 +31712,15 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00978">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>
@@ -24214,12 +31774,39 @@ Variables</h2></td></tr>
</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#l01057">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; arm_compute::TensorInfo aclWeights = BuildArmComputeTensorInfo(weights);</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; aclWeights.set_are_values_constant(weights.IsConstant());</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 aclBiases;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; arm_compute::TensorInfo* optionalAclBiases = <span class="keyword">nullptr</span>;</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; <span class="comment">// Same for bias as weights. We don&#39;t currently support non const.</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">if</span> (!biases.value().IsConstant())</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> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>{arm_compute::ErrorCode::RUNTIME_ERROR,</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="stringliteral">&quot;Arm NN NeonFullyConnectedWorkload does not support non constant bias.&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; aclBiases = BuildArmComputeTensorInfo(biases.value());</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; aclBiases.set_are_values_constant(biases.value().IsConstant());</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; optionalAclBiases = &amp;aclBiases;</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="keyword">const</span> arm_compute::FullyConnectedLayerInfo fullyConnectedLayerInfo =</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <a class="code" href="namespacearmnn.xhtml#ae2e0c1d8160fadce44d479379790718e">ConvertFullyConnectedDescriptorToAclFullyConnectedLayerInfo</a>(descriptor, activationDescriptor);</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordflow">return</span> arm_compute::NEFullyConnectedLayer::validate(&amp;aclInput,</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; &amp;aclWeights,</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; optionalAclBiases,</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; &amp;aclOutput,</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; fullyConnectedLayerInfo);</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</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#l00192">ArmComputeUtils.hpp:192</a></div></div>
-<div class="ttc" id="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70b"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">armnn::Status</a></div><div class="ttdeci">Status</div><div class="ttdoc">enumeration </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00042">Types.hpp:42</a></div></div>
-<div class="ttc" id="_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="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; arm_compute::TensorInfo aclWeights = BuildArmComputeTensorInfo(weights);</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; aclWeights.set_are_values_constant(weights.IsConstant());</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 aclBiases;</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; arm_compute::TensorInfo* optionalAclBiases = <span class="keyword">nullptr</span>;</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; <span class="comment">// Same for bias as weights. We don&#39;t currently support non const.</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">if</span> (!biases.value().IsConstant())</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> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>{arm_compute::ErrorCode::RUNTIME_ERROR,</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="stringliteral">&quot;Arm NN NeonFullyConnectedWorkload does not support non constant bias.&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; aclBiases = BuildArmComputeTensorInfo(biases.value());</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; aclBiases.set_are_values_constant(biases.value().IsConstant());</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; optionalAclBiases = &amp;aclBiases;</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="keyword">const</span> arm_compute::FullyConnectedLayerInfo fullyConnectedLayerInfo =</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <a class="code" href="namespacearmnn.xhtml#ae2e0c1d8160fadce44d479379790718e">ConvertFullyConnectedDescriptorToAclFullyConnectedLayerInfo</a>(descriptor, activationDescriptor);</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordflow">return</span> arm_compute::NEFullyConnectedLayer::validate(&amp;aclInput,</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; &amp;aclWeights,</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; optionalAclBiases,</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; &amp;aclOutput,</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; fullyConnectedLayerInfo);</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;}</div>
</div><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01057">NeonLayerSupport::IsFullyConnectedSupported()</a>, and <a class="el" href="_neon_backend_8cpp_source.xhtml#l00142">NeonBackend::OptimizeSubgraphView()</a>.</p>
+
</div>
</div>
<a id="aec41b8c86e61ce02a07b8215bf8bc073"></a>
@@ -24257,21 +31844,93 @@ Variables</h2></td></tr>
<p>Validate ReduceSum</p>
<p>Validate Gather</p>
<p>Validate Reshape</p>
-<p>Return OK if all the layers are valid </p>
+<p>Return OK if all the layers are valid</p>
<p class="definition">Definition at line <a class="el" href="_neon_gather_nd_workload_8cpp_source.xhtml#l00014">14</a> of file <a class="el" href="_neon_gather_nd_workload_8cpp_source.xhtml">NeonGatherNdWorkload.cpp</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="comment">// Calculate ND, K, W, C.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; std::map&lt;std::string, unsigned int&gt; keyIndices = <a class="code" href="namespacearmnn.xhtml#ac40d3e4035af5fbe68d9e126a8d6367c">CalculateGatherNdKeyIndices</a>(paramsInfo, indicesInfo);</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"></span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> /// Validate Mul</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="comment"></span> <span class="comment">// Indices with shape { W, ND }</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> indices_W_ND_Info = indicesInfo;</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; indices_W_ND_Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ keyIndices[<span class="stringliteral">&quot;W&quot;</span>], keyIndices[<span class="stringliteral">&quot;ND&quot;</span>] });</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclIndicesInfo = BuildArmComputeTensorInfo(indices_W_ND_Info);</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">// Flattened coefficients with shape { ND }</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> flattenedCoeff_Info = indicesInfo;</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; flattenedCoeff_Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ keyIndices[<span class="stringliteral">&quot;ND&quot;</span>] });</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclFlattenedCoeffInfo = BuildArmComputeTensorInfo(flattenedCoeff_Info);</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">// Output of Mul with shape { W, ND }</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputMulInfo = BuildArmComputeTensorInfo(indices_W_ND_Info);</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> statusMul = arm_compute::NEPixelWiseMultiplication::validate(&amp;aclIndicesInfo,</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; &amp;aclFlattenedCoeffInfo,</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; &amp;aclOutputMulInfo,</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; 1.0f,</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; arm_compute::ConvertPolicy::WRAP,</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; arm_compute::RoundingPolicy::TO_ZERO,</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; arm_compute::ActivationLayerInfo());</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="comment"></span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="comment"> /// Validate ReduceSum</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="comment"></span> <span class="comment">// Flattened indices with shape { W }</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> flattenedIndices_Info = indicesInfo;</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; flattenedIndices_Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ keyIndices[<span class="stringliteral">&quot;W&quot;</span>] });</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclFlattenedIndicesInfo = BuildArmComputeTensorInfo(flattenedIndices_Info);</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> std::vector&lt;unsigned int&gt; armnnReduceAxes(1, 1);</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <a class="code" href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> coords = BuildArmComputeReductionCoordinates(aclOutputMulInfo.num_dimensions(),</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; indices_W_ND_Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>(),</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; armnnReduceAxes);</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">auto</span> statusReduceSum = arm_compute::NEReductionOperation::validate(&amp;aclOutputMulInfo,</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; &amp;aclFlattenedIndicesInfo,</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(coords[0]),</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; arm_compute::ReductionOperation::SUM,</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="comment"></span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="comment"> /// Validate Gather</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;<span class="comment"></span> <span class="comment">// Params with shape { K, C }</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> params_K_C_Info = paramsInfo;</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; params_K_C_Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ keyIndices[<span class="stringliteral">&quot;K&quot;</span>], keyIndices[<span class="stringliteral">&quot;C&quot;</span>] });</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclParamsInfo = BuildArmComputeTensorInfo(params_K_C_Info);</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">// Output of gather with shape { W, C }</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputGather_Info = outputInfo;</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; outputGather_Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ keyIndices[<span class="stringliteral">&quot;W&quot;</span>], keyIndices[<span class="stringliteral">&quot;C&quot;</span>] });</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputGatherInfo = BuildArmComputeTensorInfo(outputGather_Info);</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> aclAxis = <a class="code" href="namespacearmnn.xhtml#a44a3b98b37a25c995aa9e4dae7d7b456">ComputeAclAxis</a>(0, params_K_C_Info);</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keyword">auto</span> statusGather =</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; arm_compute::NEGather::validate(&amp;aclParamsInfo, &amp;aclFlattenedIndicesInfo, &amp;aclOutputGatherInfo, aclAxis);</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="comment"></span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="comment"> /// Validate Reshape</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="comment"></span> <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(outputInfo);</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="keyword">auto</span> statusReshape = arm_compute::NEReshapeLayer::validate(&amp;aclOutputGatherInfo, &amp;aclOutputInfo);</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;<span class="comment"></span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="comment"> /// Return OK if all the layers are valid</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="comment"></span> <span class="keyword">auto</span> okCode = arm_compute::ErrorCode::OK;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">if</span> (statusMul.error_code() == okCode &amp;&amp;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; statusReduceSum.error_code() == okCode &amp;&amp;</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; statusGather.error_code() == okCode &amp;&amp;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; statusReshape.error_code() == okCode)</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> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="stringliteral">&quot;All GatherND layers validate status OK.&quot;</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="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">return</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::RUNTIME_ERROR,</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="stringliteral">&quot;GatherND layer validate status failed.&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 -->
<p class="reference">References <a class="el" href="_workload_utils_8cpp_source.xhtml#l00300">CalculateGatherNdKeyIndices()</a>, and <a class="el" href="_tensor_8hpp_source.xhtml#l00193">TensorInfo::SetShape()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01088">NeonLayerSupport::IsGatherNdSupported()</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="comment">// Calculate ND, K, W, C.</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; std::map&lt;std::string, unsigned int&gt; keyIndices = <a class="code" href="namespacearmnn.xhtml#ac40d3e4035af5fbe68d9e126a8d6367c">CalculateGatherNdKeyIndices</a>(paramsInfo, indicesInfo);</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> /// Validate Mul</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="comment"></span> <span class="comment">// Indices with shape { W, ND }</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> indices_W_ND_Info = indicesInfo;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; indices_W_ND_Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ keyIndices[<span class="stringliteral">&quot;W&quot;</span>], keyIndices[<span class="stringliteral">&quot;ND&quot;</span>] });</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclIndicesInfo = BuildArmComputeTensorInfo(indices_W_ND_Info);</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">// Flattened coefficients with shape { ND }</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> flattenedCoeff_Info = indicesInfo;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; flattenedCoeff_Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ keyIndices[<span class="stringliteral">&quot;ND&quot;</span>] });</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclFlattenedCoeffInfo = BuildArmComputeTensorInfo(flattenedCoeff_Info);</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">// Output of Mul with shape { W, ND }</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputMulInfo = BuildArmComputeTensorInfo(indices_W_ND_Info);</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> statusMul = arm_compute::NEPixelWiseMultiplication::validate(&amp;aclIndicesInfo,</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; &amp;aclFlattenedCoeffInfo,</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; &amp;aclOutputMulInfo,</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; 1.0f,</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; arm_compute::ConvertPolicy::WRAP,</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; arm_compute::RoundingPolicy::TO_ZERO,</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; arm_compute::ActivationLayerInfo());</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="comment"> /// Validate ReduceSum</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="comment"></span> <span class="comment">// Flattened indices with shape { W }</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> flattenedIndices_Info = indicesInfo;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; flattenedIndices_Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ keyIndices[<span class="stringliteral">&quot;W&quot;</span>] });</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclFlattenedIndicesInfo = BuildArmComputeTensorInfo(flattenedIndices_Info);</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> std::vector&lt;unsigned int&gt; armnnReduceAxes(1, 1);</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <a class="code" href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> coords = BuildArmComputeReductionCoordinates(aclOutputMulInfo.num_dimensions(),</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; indices_W_ND_Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>(),</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; armnnReduceAxes);</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">auto</span> statusReduceSum = arm_compute::NEReductionOperation::validate(&amp;aclOutputMulInfo,</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; &amp;aclFlattenedIndicesInfo,</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; static_cast&lt;unsigned int&gt;(coords[0]),</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; arm_compute::ReductionOperation::SUM,</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keyword">false</span>);</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="comment"> /// Validate Gather</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;<span class="comment"></span> <span class="comment">// Params with shape { K, C }</span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> params_K_C_Info = paramsInfo;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; params_K_C_Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ keyIndices[<span class="stringliteral">&quot;K&quot;</span>], keyIndices[<span class="stringliteral">&quot;C&quot;</span>] });</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclParamsInfo = BuildArmComputeTensorInfo(params_K_C_Info);</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">// Output of gather with shape { W, C }</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputGather_Info = outputInfo;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; outputGather_Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ keyIndices[<span class="stringliteral">&quot;W&quot;</span>], keyIndices[<span class="stringliteral">&quot;C&quot;</span>] });</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputGatherInfo = BuildArmComputeTensorInfo(outputGather_Info);</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> aclAxis = <a class="code" href="namespacearmnn.xhtml#a44a3b98b37a25c995aa9e4dae7d7b456">ComputeAclAxis</a>(0, params_K_C_Info);</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keyword">auto</span> statusGather =</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; arm_compute::NEGather::validate(&amp;aclParamsInfo, &amp;aclFlattenedIndicesInfo, &amp;aclOutputGatherInfo, aclAxis);</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="comment"> /// Validate Reshape</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="comment"></span> <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(outputInfo);</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="keyword">auto</span> statusReshape = arm_compute::NEReshapeLayer::validate(&amp;aclOutputGatherInfo, &amp;aclOutputInfo);</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="comment"> /// Return OK if all the layers are valid</span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="comment"></span> <span class="keyword">auto</span> okCode = arm_compute::ErrorCode::OK;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">if</span> (statusMul.error_code() == okCode &amp;&amp;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; statusReduceSum.error_code() == okCode &amp;&amp;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; statusGather.error_code() == okCode &amp;&amp;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; statusReshape.error_code() == okCode)</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> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="stringliteral">&quot;All GatherND layers validate status OK.&quot;</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="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">return</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::RUNTIME_ERROR,</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="stringliteral">&quot;GatherND layer validate status failed.&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 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#l00264">ArmComputeUtils.hpp:264</a></div></div>
-<div class="ttc" id="namespacearmnn_xhtml_ac40d3e4035af5fbe68d9e126a8d6367c"><div class="ttname"><a href="namespacearmnn.xhtml#ac40d3e4035af5fbe68d9e126a8d6367c">armnn::CalculateGatherNdKeyIndices</a></div><div class="ttdeci">std::map&lt; std::string, unsigned int &gt; CalculateGatherNdKeyIndices(TensorInfo inputInfo0, TensorInfo inputInfo1)</div><div class="ttdoc">Calculates the key index values needed for GatherNd: N, ND, K, W, C (N is always 1) ...</div><div class="ttdef"><b>Definition:</b> <a href="_workload_utils_8cpp_source.xhtml#l00300">WorkloadUtils.cpp:300</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="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="classarmnn_1_1_tensor_info_xhtml_abe8889e8150beef5fd204b2d87b49298"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">armnn::TensorInfo::SetShape</a></div><div class="ttdeci">void SetShape(const TensorShape &amp;newShape)</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00193">Tensor.hpp:193</a></div></div>
-<div class="ttc" id="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70b"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">armnn::Status</a></div><div class="ttdeci">Status</div><div class="ttdoc">enumeration </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00042">Types.hpp:42</a></div></div>
-<div class="ttc" id="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="a6c354904637149b84767275e6f725741"></a>
@@ -24313,10 +31972,18 @@ Variables</h2></td></tr>
</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#l01074">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#l00264">ArmComputeUtils.hpp:264</a></div></div>
+<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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01074">NeonLayerSupport::IsGatherSupported()</a>.</p>
+
</div>
</div>
<a id="aea722abe239545030f4c6fe4e083816f"></a>
@@ -24352,9 +32019,19 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01106">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>
@@ -24390,9 +32067,17 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01118">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>
@@ -24428,10 +32113,19 @@ Variables</h2></td></tr>
</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#l01126">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#l00042">Types.hpp:42</a></div></div>
+<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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01126">NeonLayerSupport::IsLogicalBinarySupported()</a>.</p>
+
</div>
</div>
<a id="af4f8e11ae5715973420a82d841dfa676"></a>
@@ -24461,10 +32155,17 @@ Variables</h2></td></tr>
</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#l00978">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#l00042">Types.hpp:42</a></div></div>
+<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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00978">NeonLayerSupport::IsElementwiseUnarySupported()</a>.</p>
+
</div>
</div>
<a id="a2de04fd10d0a2419e0a05f12741017dc"></a>
@@ -24500,10 +32201,19 @@ Variables</h2></td></tr>
</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#l01126">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#l00042">Types.hpp:42</a></div></div>
+<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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01126">NeonLayerSupport::IsLogicalBinarySupported()</a>.</p>
+
</div>
</div>
<a id="ac57d1e00cc24022c21aa7ff95eb618ba"></a>
@@ -24539,10 +32249,19 @@ Variables</h2></td></tr>
</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#l01151">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#l00264">ArmComputeUtils.hpp:264</a></div></div>
+<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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01151">NeonLayerSupport::IsLogSoftmaxSupported()</a>.</p>
+
</div>
</div>
<a id="ad1991a3499a991b1fdd71d918f793f13"></a>
@@ -24572,9 +32291,15 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00978">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>
@@ -24646,10 +32371,137 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_lstm_float_workload_8cpp_source.xhtml#l00253">253</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#l01159">NeonLayerSupport::IsLstmSupported()</a>.</p>
-<div class="fragment"><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; arm_compute::LSTMParams&lt;arm_compute::ITensorInfo&gt; lstm_params_info;</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160;</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="comment">// The inputs and outputs</span></div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateInInfo = BuildArmComputeTensorInfo(outputStateIn);</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateInInfo = BuildArmComputeTensorInfo(cellStateIn);</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclScratchBufferInfo = BuildArmComputeTensorInfo(scratchBuffer);</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateOutInfo = BuildArmComputeTensorInfo(outputStateOut);</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateOutInfo = BuildArmComputeTensorInfo(cellStateOut);</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</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="comment">// Basic parameters</span></div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToForgetWeightsInfo</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToForgetWeights());</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToCellWeightsInfo</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToCellWeights());</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToOutputWeightsInfo</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToOutputWeights());</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToForgetWeightsInfo</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToForgetWeights());</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToCellWeightsInfo</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToCellWeights());</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToOutputWeightsInfo</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToOutputWeights());</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclForgetGateBiasInfo</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetForgetGateBias());</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellBiasInfo</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetCellBias());</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputGateBiasInfo</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetOutputGateBias());</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; arm_compute::TensorInfo aclInputToInputWeightsInfo;</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; arm_compute::TensorInfo aclRecurrentToInputWeightsInfo;</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; arm_compute::TensorInfo aclCellToInputWeightsInfo;</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; arm_compute::TensorInfo aclInputGateBiasInfo;</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; arm_compute::TensorInfo aclProjectionWeightsInfo;</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; arm_compute::TensorInfo aclProjectionBiasInfo;</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; arm_compute::TensorInfo aclCellToForgetWeightsInfo;</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; arm_compute::TensorInfo aclCellToOutputWeightsInfo;</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; arm_compute::TensorInfo aclInputLayerNormWeightsInfo;</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; arm_compute::TensorInfo aclForgetLayerNormWeightsInfo;</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; arm_compute::TensorInfo aclCellLayerNormWeightsInfo;</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; arm_compute::TensorInfo aclOutputLayerNormWeightsInfo;</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; <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</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; <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</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; aclCellToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToInputWeights());</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; aclInputToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputToInputWeights());</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; aclRecurrentToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToInputWeights());</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; aclInputGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputGateBias());</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; lstm_params_info.set_cifg_params(&amp;aclInputToInputWeightsInfo, &amp;aclRecurrentToInputWeightsInfo,</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; descriptor.m_PeepholeEnabled ? &amp;aclCellToInputWeightsInfo : <span class="keyword">nullptr</span>,</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; &amp;aclInputGateBiasInfo);</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; <span class="keywordflow">if</span> (descriptor.m_ProjectionEnabled)</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="keywordflow">if</span> (paramsInfo.m_ProjectionBias != <span class="keyword">nullptr</span>)</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; aclProjectionBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionBias());</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; aclProjectionWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionWeights());</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; lstm_params_info.set_projection_params(&amp;aclProjectionWeightsInfo,</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; paramsInfo.m_ProjectionBias != <span class="keyword">nullptr</span> ?</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; &amp;aclProjectionBiasInfo : <span class="keyword">nullptr</span>);</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; <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</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; aclCellToForgetWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToForgetWeights());</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; aclCellToOutputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToOutputWeights());</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; lstm_params_info.set_peephole_params(&amp;aclCellToForgetWeightsInfo, &amp;aclCellToOutputWeightsInfo);</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;</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <span class="keywordflow">if</span> (descriptor.m_LayerNormEnabled)</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; {</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; {</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; aclInputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputLayerNormWeights());</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; aclForgetLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetForgetLayerNormWeights());</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; aclCellLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellLayerNormWeights());</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; aclOutputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetOutputLayerNormWeights());</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; lstm_params_info.set_layer_normalization_params(descriptor.m_CifgEnabled ?</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="keyword">nullptr</span> : &amp;aclInputLayerNormWeightsInfo,</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; &amp;aclForgetLayerNormWeightsInfo,</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; &amp;aclCellLayerNormWeightsInfo,</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; &amp;aclOutputLayerNormWeightsInfo);</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="keywordtype">float</span> cell_threshold = descriptor.m_ClippingThresCell;</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <span class="keywordtype">float</span> projection_threshold = descriptor.m_ClippingThresProj;</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">// for preparing the object for the class ActivationLayerInfo, we need to consider 5 situations</span></div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; arm_compute::ActivationLayerInfo activationLayerInfo =</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <a class="code" href="namespacearmnn.xhtml#aa1e93ef5f9ee3dbb5e7faa9578f180ae">ConvertLstmActivationFuncToAclLayerInfo</a>(descriptor.m_ActivationFunc);</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="keywordflow">return</span> arm_compute::NELSTMLayer::validate(&amp;aclInputInfo,</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; &amp;aclInputToForgetWeightsInfo,</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; &amp;aclInputToCellWeightsInfo,</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; &amp;aclInputToOutputWeightsInfo,</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; &amp;aclRecurrentToForgetWeightsInfo,</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; &amp;aclRecurrentToCellWeightsInfo,</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; &amp;aclRecurrentToOutputWeightsInfo,</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; &amp;aclForgetGateBiasInfo,</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; &amp;aclCellBiasInfo,</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; &amp;aclOutputGateBiasInfo,</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; &amp;aclOutputStateInInfo,</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; &amp;aclCellStateInInfo,</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; &amp;aclScratchBufferInfo,</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; &amp;aclOutputStateOutInfo,</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; &amp;aclCellStateOutInfo,</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; &amp;aclOutputInfo,</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; lstm_params_info,</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; activationLayerInfo,</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; cell_threshold,</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; projection_threshold);</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_aa1e93ef5f9ee3dbb5e7faa9578f180ae"><div class="ttname"><a href="namespacearmnn.xhtml#aa1e93ef5f9ee3dbb5e7faa9578f180ae">armnn::ConvertLstmActivationFuncToAclLayerInfo</a></div><div class="ttdeci">arm_compute::ActivationLayerInfo ConvertLstmActivationFuncToAclLayerInfo(uint32_t activationFunction)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.xhtml#l00116">ArmComputeUtils.hpp:116</a></div></div>
+<div class="fragment"><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; arm_compute::LSTMParams&lt;arm_compute::ITensorInfo&gt; lstm_params_info;</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; </div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="comment">// The inputs and outputs</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateInInfo = BuildArmComputeTensorInfo(outputStateIn);</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateInInfo = BuildArmComputeTensorInfo(cellStateIn);</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclScratchBufferInfo = BuildArmComputeTensorInfo(scratchBuffer);</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateOutInfo = BuildArmComputeTensorInfo(outputStateOut);</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateOutInfo = BuildArmComputeTensorInfo(cellStateOut);</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);</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="comment">// Basic parameters</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToForgetWeightsInfo</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToForgetWeights());</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToCellWeightsInfo</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToCellWeights());</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToOutputWeightsInfo</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToOutputWeights());</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToForgetWeightsInfo</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToForgetWeights());</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToCellWeightsInfo</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToCellWeights());</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToOutputWeightsInfo</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToOutputWeights());</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclForgetGateBiasInfo</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetForgetGateBias());</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellBiasInfo</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetCellBias());</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputGateBiasInfo</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetOutputGateBias());</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; arm_compute::TensorInfo aclInputToInputWeightsInfo;</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; arm_compute::TensorInfo aclRecurrentToInputWeightsInfo;</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; arm_compute::TensorInfo aclCellToInputWeightsInfo;</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; arm_compute::TensorInfo aclInputGateBiasInfo;</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; arm_compute::TensorInfo aclProjectionWeightsInfo;</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; arm_compute::TensorInfo aclProjectionBiasInfo;</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; arm_compute::TensorInfo aclCellToForgetWeightsInfo;</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; arm_compute::TensorInfo aclCellToOutputWeightsInfo;</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; arm_compute::TensorInfo aclInputLayerNormWeightsInfo;</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; arm_compute::TensorInfo aclForgetLayerNormWeightsInfo;</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; arm_compute::TensorInfo aclCellLayerNormWeightsInfo;</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; arm_compute::TensorInfo aclOutputLayerNormWeightsInfo;</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; <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</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; <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</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; aclCellToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToInputWeights());</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; aclInputToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputToInputWeights());</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; aclRecurrentToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToInputWeights());</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; aclInputGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputGateBias());</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; lstm_params_info.set_cifg_params(&amp;aclInputToInputWeightsInfo, &amp;aclRecurrentToInputWeightsInfo,</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; descriptor.m_PeepholeEnabled ? &amp;aclCellToInputWeightsInfo : <span class="keyword">nullptr</span>,</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; &amp;aclInputGateBiasInfo);</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; <span class="keywordflow">if</span> (descriptor.m_ProjectionEnabled)</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="keywordflow">if</span> (paramsInfo.m_ProjectionBias != <span class="keyword">nullptr</span>)</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; aclProjectionBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionBias());</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; aclProjectionWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionWeights());</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; lstm_params_info.set_projection_params(&amp;aclProjectionWeightsInfo,</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; paramsInfo.m_ProjectionBias != <span class="keyword">nullptr</span> ?</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; &amp;aclProjectionBiasInfo : <span class="keyword">nullptr</span>);</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; <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</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; aclCellToForgetWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToForgetWeights());</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; aclCellToOutputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToOutputWeights());</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; lstm_params_info.set_peephole_params(&amp;aclCellToForgetWeightsInfo, &amp;aclCellToOutputWeightsInfo);</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; </div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <span class="keywordflow">if</span> (descriptor.m_LayerNormEnabled)</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; {</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; {</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; aclInputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputLayerNormWeights());</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; aclForgetLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetForgetLayerNormWeights());</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; aclCellLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellLayerNormWeights());</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; aclOutputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetOutputLayerNormWeights());</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; lstm_params_info.set_layer_normalization_params(descriptor.m_CifgEnabled ?</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="keyword">nullptr</span> : &amp;aclInputLayerNormWeightsInfo,</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; &amp;aclForgetLayerNormWeightsInfo,</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; &amp;aclCellLayerNormWeightsInfo,</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; &amp;aclOutputLayerNormWeightsInfo);</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="keywordtype">float</span> cell_threshold = descriptor.m_ClippingThresCell;</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <span class="keywordtype">float</span> projection_threshold = descriptor.m_ClippingThresProj;</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">// for preparing the object for the class ActivationLayerInfo, we need to consider 5 situations</span></div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; arm_compute::ActivationLayerInfo activationLayerInfo =</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <a class="code" href="namespacearmnn.xhtml#aa1e93ef5f9ee3dbb5e7faa9578f180ae">ConvertLstmActivationFuncToAclLayerInfo</a>(descriptor.m_ActivationFunc);</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="keywordflow">return</span> arm_compute::NELSTMLayer::validate(&amp;aclInputInfo,</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; &amp;aclInputToForgetWeightsInfo,</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; &amp;aclInputToCellWeightsInfo,</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; &amp;aclInputToOutputWeightsInfo,</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; &amp;aclRecurrentToForgetWeightsInfo,</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; &amp;aclRecurrentToCellWeightsInfo,</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; &amp;aclRecurrentToOutputWeightsInfo,</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; &amp;aclForgetGateBiasInfo,</div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; &amp;aclCellBiasInfo,</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; &amp;aclOutputGateBiasInfo,</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; &amp;aclOutputStateInInfo,</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; &amp;aclCellStateInInfo,</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; &amp;aclScratchBufferInfo,</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; &amp;aclOutputStateOutInfo,</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; &amp;aclCellStateOutInfo,</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; &amp;aclOutputInfo,</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; lstm_params_info,</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; activationLayerInfo,</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; cell_threshold,</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; projection_threshold);</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160;}</div>
</div><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01159">NeonLayerSupport::IsLstmSupported()</a>.</p>
+
</div>
</div>
<a id="a8d2ea79addd8ef64be2ca0dad3408f00"></a>
@@ -24685,9 +32537,18 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01183">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>
@@ -24723,10 +32584,19 @@ Variables</h2></td></tr>
</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#l01195">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 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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01195">NeonLayerSupport::IsMeanSupported()</a>.</p>
+
</div>
</div>
<a id="ab81159ebfa638af1b91fe1e8c5de1955"></a>
@@ -24772,9 +32642,18 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01207">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>
@@ -24816,11 +32695,32 @@ Variables</h2></td></tr>
</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#l01219">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#l00284">TypesUtils.hpp:284</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 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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01219">NeonLayerSupport::IsMultiplicationSupported()</a>, and <a class="el" href="_neon_backend_8cpp_source.xhtml#l00142">NeonBackend::OptimizeSubgraphView()</a>.</p>
+
</div>
</div>
<a id="a7f955750d00cdcae6038f07cc73686ea"></a>
@@ -24850,9 +32750,15 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00978">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>
@@ -24888,9 +32794,17 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01245">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>
@@ -24926,10 +32840,29 @@ Variables</h2></td></tr>
</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#l01263">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#l00327">ArmComputeUtils.hpp:327</a></div></div>
+<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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01263">NeonLayerSupport::IsPadSupported()</a>.</p>
+
</div>
</div>
<a id="a70650f6b1d3b8511fcdb989ca769cdbb"></a>
@@ -24965,10 +32898,17 @@ Variables</h2></td></tr>
</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#l01275">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#l00295">Types.hpp:295</a></div></div>
+<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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01275">NeonLayerSupport::IsPermuteSupported()</a>.</p>
+
</div>
</div>
<a id="a1f07655db8ad7f2738bb0d3d9e2316cc"></a>
@@ -25004,9 +32944,19 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01283">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="aa2b7034aa064d5ec7a9d07828edc48bc"></a>
@@ -25042,9 +32992,15 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_pooling3d_workload_8cpp_source.xhtml#l00015">15</a> of file <a class="el" href="_neon_pooling3d_workload_8cpp_source.xhtml">NeonPooling3dWorkload.cpp</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 = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; arm_compute::Pooling3dLayerInfo layerInfo = BuildArmComputePooling3dLayerInfo(descriptor);</div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keywordflow">return</span> arm_compute::NEPooling3dLayer::validate(&amp;aclInputInfo, &amp;aclOutputInfo, layerInfo);</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; }</div>
+</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01291">NeonLayerSupport::IsPooling3dSupported()</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 = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; arm_compute::Pooling3dLayerInfo layerInfo = BuildArmComputePooling3dLayerInfo(descriptor);</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keywordflow">return</span> arm_compute::NEPooling3dLayer::validate(&amp;aclInputInfo, &amp;aclOutputInfo, layerInfo);</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; }</div></div><!-- fragment -->
+
</div>
</div>
<a id="a188adc104b16db3dc23ed2c5ff06cbb8"></a>
@@ -25080,9 +33036,18 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01299">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>
@@ -25148,9 +33113,150 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01307">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>
@@ -25204,9 +33310,63 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01352">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>
@@ -25236,9 +33396,15 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01342">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>
@@ -25274,16 +33440,35 @@ Variables</h2></td></tr>
</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>
-
+<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; <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(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><!-- fragment -->
<p class="reference">References <a class="el" href="_descriptors_8hpp_source.xhtml#l01503">ReduceDescriptor::m_vAxis</a>.</p>
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01370">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#l00405">ArmComputeUtils.hpp:405</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#l00338">ArmComputeUtils.hpp:338</a></div></div>
-<div class="ttc" id="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70b"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">armnn::Status</a></div><div class="ttdeci">Status</div><div class="ttdoc">enumeration </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00042">Types.hpp:42</a></div></div>
-</div><!-- fragment -->
+
</div>
</div>
<a id="a430021076042c8157a926a3bb3a37152"></a>
@@ -25313,9 +33498,15 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01382">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>
@@ -25351,11 +33542,35 @@ Variables</h2></td></tr>
</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#l01394">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#l00211">ArmComputeUtils.hpp:211</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#l00062">Types.hpp:62</a></div></div>
+<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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01394">NeonLayerSupport::IsResizeSupported()</a>.</p>
+
</div>
</div>
<a id="aa7d1b5e38aa8cb731519ff12e2a73350"></a>
@@ -25385,9 +33600,15 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00978">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>
@@ -25417,9 +33638,15 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00978">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>
@@ -25455,11 +33682,20 @@ Variables</h2></td></tr>
</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#l01406">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#l00153">NeonWorkloadUtils.hpp:153</a></div></div>
+<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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01406">NeonLayerSupport::IsSliceSupported()</a>.</p>
+
</div>
</div>
<a id="a4077a9771ba9c551f4ce61863f65e798"></a>
@@ -25495,10 +33731,19 @@ Variables</h2></td></tr>
</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#l01418">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#l00264">ArmComputeUtils.hpp:264</a></div></div>
+<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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01418">NeonLayerSupport::IsSoftmaxSupported()</a>.</p>
+
</div>
</div>
<a id="ab29257da888af2c4971db1344d8a526c"></a>
@@ -25534,10 +33779,29 @@ Variables</h2></td></tr>
</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#l01426">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 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 = armnn::numeric_cast&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 = armnn::numeric_cast&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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01426">NeonLayerSupport::IsSpaceToBatchNdSupported()</a>.</p>
+
</div>
</div>
<a id="af6d2d40482240def4614deb694933d1e"></a>
@@ -25573,13 +33837,20 @@ Variables</h2></td></tr>
</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>
-
+<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 = armnn::numeric_cast&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><!-- fragment -->
<p class="reference">References <a class="el" href="_descriptors_8hpp_source.xhtml#l01042">SpaceToDepthDescriptor::m_DataLayout</a>.</p>
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01438">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#l00062">Types.hpp:62</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>
@@ -25615,9 +33886,29 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01450">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="a5fadc539a1a3c35c4a6138bf6e970e4c"></a>
@@ -25647,14 +33938,24 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_sqrt_workload_8cpp_source.xhtml#l00018">18</a> of file <a class="el" href="_neon_sqrt_workload_8cpp_source.xhtml">NeonSqrtWorkload.cpp</a>.</p>
-
-<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00978">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; ActivationDescriptor descriptor;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; descriptor.m_Function = ActivationFunction::Sqrt;</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationLayerInfo =</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(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::NEActivationLayer::validate(&amp;aclInput, &amp;aclOutput, activationLayerInfo);</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</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 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; ActivationDescriptor descriptor;</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; descriptor.m_Function = ActivationFunction::Sqrt;</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> arm_compute::ActivationLayerInfo activationLayerInfo =</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad701d0d29baa4266ab4d33b090aa661c">ConvertActivationDescriptorToAclActivationLayerInfo</a>(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::NEActivationLayer::validate(&amp;aclInput, &amp;aclOutput, activationLayerInfo);</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;}</div>
</div><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00978">NeonLayerSupport::IsElementwiseUnarySupported()</a>.</p>
+
</div>
</div>
-<a id="a65c83c74bdbd66cdd547d331998952eb"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a65c83c74bdbd66cdd547d331998952eb">&#9670;&nbsp;</a></span>NeonStackWorkloadValidate()</h2>
+<a id="add549d4deb11580fc32d17fb38b309b4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#add549d4deb11580fc32d17fb38b309b4">&#9670;&nbsp;</a></span>NeonStackWorkloadValidate()</h2>
<div class="memitem">
<div class="memproto">
@@ -25662,7 +33963,7 @@ Variables</h2></td></tr>
<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="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>
@@ -25686,10 +33987,27 @@ Variables</h2></td></tr>
</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#l01483">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 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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01483">NeonLayerSupport::IsStackSupported()</a>.</p>
+
</div>
</div>
<a id="ac71d08bf1257807c112b4d019802acc3"></a>
@@ -25725,13 +34043,35 @@ Variables</h2></td></tr>
</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#l01495">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#l00131">NeonWorkloadUtils.hpp:131</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#l00286">WorkloadUtils.cpp:286</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="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 = armnn::numeric_cast&lt;int&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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01495">NeonLayerSupport::IsStridedSliceSupported()</a>.</p>
+
</div>
</div>
<a id="abc968e1323027f9e42cbc7642800d5ce"></a>
@@ -25773,10 +34113,23 @@ Variables</h2></td></tr>
</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#l01507">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 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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01507">NeonLayerSupport::IsSubtractionSupported()</a>, and <a class="el" href="_neon_backend_8cpp_source.xhtml#l00142">NeonBackend::OptimizeSubgraphView()</a>.</p>
+
</div>
</div>
<a id="aad5d4888304a57fb22c4608dc5d94dc1"></a>
@@ -25784,6 +34137,9 @@ Variables</h2></td></tr>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr const char* armnn::NeonTensorHandleFactoryId </td>
@@ -25792,12 +34148,18 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
-
+<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 -->
<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>
@@ -25845,10 +34207,33 @@ Variables</h2></td></tr>
</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#l01520">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 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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01520">NeonLayerSupport::IsTransposeConvolution2dSupported()</a>.</p>
+
</div>
</div>
<a id="a2b8555526752015115fa7fa00d88542b"></a>
@@ -25884,10 +34269,17 @@ Variables</h2></td></tr>
</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#l01536">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#l00295">Types.hpp:295</a></div></div>
+<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><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01536">NeonLayerSupport::IsTransposeSupported()</a>.</p>
+
</div>
</div>
<a id="a963622d85527f420f0b922ef27de4f6b"></a>
@@ -25953,14 +34345,373 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_unidirectional_sequence_lstm_float_workload_8cpp_source.xhtml#l00510">510</a> of file <a class="el" href="_neon_unidirectional_sequence_lstm_float_workload_8cpp_source.xhtml">NeonUnidirectionalSequenceLstmFloatWorkload.cpp</a>.</p>
-
+<div class="fragment"><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; TensorShape inputLayerShape = input.GetShape();</div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; TensorShape outputLayerShape = outputStateIn.GetShape();</div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; </div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> maxTime = descriptor.m_TimeMajor ? inputLayerShape[0] : inputLayerShape[1];</div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> batchSize = descriptor.m_TimeMajor ? inputLayerShape[1] : inputLayerShape[0];</div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputSize = inputLayerShape[2];</div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputSize = outputLayerShape[2];</div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; </div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; <span class="keyword">const</span> TensorShape timeMajorShapeInput({maxTime, batchSize, inputSize});</div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; <span class="keyword">const</span> TensorShape timeMajorShapeOutput({maxTime, batchSize, outputSize});</div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; </div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusPermute1 = <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <span class="stringliteral">&quot;Permute1 status&quot;</span>);</div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusSplit = <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <span class="stringliteral">&quot;Split status&quot;</span>);</div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusLSTM = <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; <span class="stringliteral">&quot;LSTM status&quot;</span>);</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusConcat = <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; <span class="stringliteral">&quot;Concat status&quot;</span>);</div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusPermute2 = <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <span class="stringliteral">&quot;Permute2 status&quot;</span>);</div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; </div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; </div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <span class="comment">//</span></div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; <span class="comment">// Permute validate</span></div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; <span class="comment">//</span></div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; TensorInfo permuteOutInfo = TensorInfo(input);</div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; arm_compute::TensorInfo aclPermuteOutInfo = armcomputetensorutils::BuildArmComputeTensorInfo(permuteOutInfo);</div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; {</div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; statusPermute1 = arm_compute::NEPermute::validate(&amp;aclInputInfo,</div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; &amp;aclPermuteOutInfo,</div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; arm_compute::PermutationVector(0U, 2U, 1U));</div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; }</div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; </div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; <span class="comment">//</span></div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; <span class="comment">// Split and Concat Tensors validate</span></div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; <span class="comment">//</span></div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; std::vector&lt;arm_compute::TensorInfo&gt; splitterOutputsTensorInfos;</div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; std::vector&lt;arm_compute::TensorInfo&gt; concatInputsTensorInfos;</div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; std::vector&lt;arm_compute::ITensorInfo*&gt; splitterOutputsTensorInfosPtr;</div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; std::vector&lt;const arm_compute::ITensorInfo*&gt; concatInputsTensorInfosPtr;</div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; splitterOutputsTensorInfos.reserve(maxTime);</div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; concatInputsTensorInfos.reserve(maxTime);</div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; maxTime; ++i)</div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; {</div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; arm_compute::TensorInfo splitter_out;</div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; arm_compute::TensorInfo concat_in;</div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; </div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; <span class="keyword">auto</span> splitterTensorInfo = TensorInfo(input);</div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; <span class="keyword">auto</span> concatTensorInfo = TensorInfo(output);</div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; splitterTensorInfo.SetShape({batchSize, inputSize});</div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; concatTensorInfo.SetShape({batchSize, outputSize});</div>
+<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; arm_compute::TensorInfo aclSplitterTensorInfo</div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; = armcomputetensorutils::BuildArmComputeTensorInfo(splitterTensorInfo);</div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; arm_compute::TensorInfo aclConcatTensorInfo</div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; = armcomputetensorutils::BuildArmComputeTensorInfo(concatTensorInfo);</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; splitterOutputsTensorInfos.emplace_back(aclSplitterTensorInfo);</div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; concatInputsTensorInfos.emplace_back(aclConcatTensorInfo);</div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; splitterOutputsTensorInfosPtr.emplace_back(&amp;splitterOutputsTensorInfos[i]);</div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; concatInputsTensorInfosPtr.emplace_back(&amp;concatInputsTensorInfos[i]);</div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; }</div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; </div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; <span class="comment">//</span></div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; <span class="comment">// Split validate</span></div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; <span class="comment">//</span></div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numberDimensions = 3;</div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dimension = 0; <span class="comment">// splitting on 0-dimension (i.e. maxTime dimension)</span></div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> aclAxisSplit = CalcAclAxis(numberDimensions, dimension);</div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; </div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <span class="keywordflow">if</span> (maxTime != 1) <span class="comment">// ACL split does not work with only one element to split.</span></div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; {</div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; {</div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; statusSplit = arm_compute::NESplit::validate(&amp;aclPermuteOutInfo,</div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; splitterOutputsTensorInfosPtr,</div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; aclAxisSplit);</div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; } <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; {</div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; statusSplit = arm_compute::NESplit::validate(&amp;aclInputInfo, splitterOutputsTensorInfosPtr, aclAxisSplit);</div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; }</div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; }</div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; </div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; <span class="comment">//</span></div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; <span class="comment">// LSTM validate</span></div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; <span class="comment">//</span></div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; </div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; arm_compute::LSTMParams&lt;arm_compute::ITensorInfo&gt; lstm_params_info;</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; <span class="keyword">const</span> TensorInfo&amp; scratchBuffer = TensorInfo(cellStateIn.GetShape(), input.GetDataType());</div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; </div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <span class="comment">// The inputs and outputs</span></div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateInInfo = BuildArmComputeTensorInfo(outputStateIn);</div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateInInfo = BuildArmComputeTensorInfo(cellStateIn);</div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclScratchBufferInfo = BuildArmComputeTensorInfo(scratchBuffer);</div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateOutInfo = BuildArmComputeTensorInfo(outputStateOut);</div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateOutInfo = BuildArmComputeTensorInfo(cellStateOut);</div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; </div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; <span class="comment">// Basic parameters</span></div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToForgetWeightsInfo</div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToForgetWeights());</div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToCellWeightsInfo</div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToCellWeights());</div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToOutputWeightsInfo</div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToOutputWeights());</div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToForgetWeightsInfo</div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToForgetWeights());</div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToCellWeightsInfo</div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToCellWeights());</div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToOutputWeightsInfo</div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToOutputWeights());</div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclForgetGateBiasInfo</div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetForgetGateBias());</div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellBiasInfo</div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetCellBias());</div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputGateBiasInfo</div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetOutputGateBias());</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; arm_compute::TensorInfo aclInputToInputWeightsInfo;</div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; arm_compute::TensorInfo aclRecurrentToInputWeightsInfo;</div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; arm_compute::TensorInfo aclCellToInputWeightsInfo;</div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; arm_compute::TensorInfo aclInputGateBiasInfo;</div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; arm_compute::TensorInfo aclProjectionWeightsInfo;</div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; arm_compute::TensorInfo aclProjectionBiasInfo;</div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; arm_compute::TensorInfo aclCellToForgetWeightsInfo;</div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; arm_compute::TensorInfo aclCellToOutputWeightsInfo;</div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; </div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; arm_compute::TensorInfo aclInputLayerNormWeightsInfo;</div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; arm_compute::TensorInfo aclForgetLayerNormWeightsInfo;</div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; arm_compute::TensorInfo aclCellLayerNormWeightsInfo;</div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; arm_compute::TensorInfo aclOutputLayerNormWeightsInfo;</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; </div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</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; <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; {</div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; aclCellToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToInputWeights());</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; aclInputToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputToInputWeights());</div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; aclRecurrentToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToInputWeights());</div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; aclInputGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputGateBias());</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; lstm_params_info.set_cifg_params(&amp;aclInputToInputWeightsInfo,</div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; &amp;aclRecurrentToInputWeightsInfo,</div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; descriptor.m_PeepholeEnabled ? &amp;aclCellToInputWeightsInfo : <span class="keyword">nullptr</span>,</div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; &amp;aclInputGateBiasInfo);</div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; }</div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; </div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; <span class="keywordflow">if</span> (descriptor.m_ProjectionEnabled)</div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; {</div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; <span class="keywordflow">if</span> (paramsInfo.m_ProjectionBias != <span class="keyword">nullptr</span>)</div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; {</div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; aclProjectionBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionBias());</div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; }</div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; aclProjectionWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionWeights());</div>
+<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; lstm_params_info.set_projection_params(&amp;aclProjectionWeightsInfo,</div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; paramsInfo.m_ProjectionBias ? &amp;aclProjectionBiasInfo : <span class="keyword">nullptr</span>);</div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; }</div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; </div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; {</div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; aclCellToForgetWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToForgetWeights());</div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; aclCellToOutputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToOutputWeights());</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; lstm_params_info.set_peephole_params(&amp;aclCellToForgetWeightsInfo, &amp;aclCellToOutputWeightsInfo);</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; </div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; <span class="keywordflow">if</span> (descriptor.m_LayerNormEnabled)</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; <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; {</div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; aclInputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputLayerNormWeights());</div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; }</div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; aclForgetLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetForgetLayerNormWeights());</div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; aclCellLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellLayerNormWeights());</div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; aclOutputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetOutputLayerNormWeights());</div>
+<div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; </div>
+<div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; lstm_params_info.set_layer_normalization_params(descriptor.m_CifgEnabled ? <span class="keyword">nullptr</span> :</div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; &amp;aclInputLayerNormWeightsInfo,</div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; &amp;aclForgetLayerNormWeightsInfo,</div>
+<div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; &amp;aclCellLayerNormWeightsInfo,</div>
+<div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; &amp;aclOutputLayerNormWeightsInfo);</div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; }</div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; </div>
+<div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; <span class="comment">// Need to be set at negative threshold to be compatible for ACL</span></div>
+<div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; <span class="keywordtype">float</span> cell_threshold = descriptor.m_ClippingThresCell;</div>
+<div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; <span class="keywordtype">float</span> projection_threshold = descriptor.m_ClippingThresProj;</div>
+<div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; </div>
+<div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; arm_compute::ActivationLayerInfo activationLayerInfo =</div>
+<div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; <a class="code" href="namespacearmnn.xhtml#aa1e93ef5f9ee3dbb5e7faa9578f180ae">ConvertLstmActivationFuncToAclLayerInfo</a>(descriptor.m_ActivationFunc);</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; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i != maxTime; ++i)</div>
+<div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; {</div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; </div>
+<div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; <span class="comment">// Set LSTM input and output ITensors depending on:</span></div>
+<div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; <span class="comment">// input format (timeMajor) &amp; number of LSTM batches (maxTime).</span></div>
+<div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; arm_compute::ITensorInfo* outputLSTM;</div>
+<div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; arm_compute::ITensorInfo* inputLSTM;</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; <span class="comment">// If there is only one LSTM time major batch, we will not concat OR permute.</span></div>
+<div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; <span class="comment">// Set input of LSTM to be first input ITensor.</span></div>
+<div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; <span class="comment">// Set output of LSTM to be final output ITensor.</span></div>
+<div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; <span class="comment">// LSTM input/output cannot be &gt; 2 dimensions so need to resize its TensorInfo.</span></div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; <span class="keywordflow">if</span> (maxTime == 1 &amp;&amp; !descriptor.m_TimeMajor)</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; TensorShape inputShape = <a class="code" href="namespacearmnn_utils.xhtml#ab53d94ea22b51c6bcdf9584644bd67bb">GetTensorShape</a>(aclInputInfo.tensor_shape(), 1U);</div>
+<div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; TensorShape outputShape = <a class="code" href="namespacearmnn_utils.xhtml#ab53d94ea22b51c6bcdf9584644bd67bb">GetTensorShape</a>(aclOutputInfo.tensor_shape(), 1U);</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; TensorShape inputShapeShrink({inputShape[1], inputShape[2]});</div>
+<div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; TensorShape outputShapeShrink({outputShape[1], outputShape[2]});</div>
+<div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; </div>
+<div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; <span class="keyword">auto</span> acl_input_shape_shrink = BuildArmComputeTensorShape(inputShapeShrink);</div>
+<div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; <span class="keyword">auto</span> acl_output_shape_shrink = BuildArmComputeTensorShape(outputShapeShrink);</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; <span class="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclInputInfo)-&gt;set_tensor_shape(acl_input_shape_shrink);</div>
+<div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; inputLSTM = <span class="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclInputInfo);</div>
+<div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; </div>
+<div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; <span class="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclOutputInfo)-&gt;set_tensor_shape(acl_output_shape_shrink);</div>
+<div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; outputLSTM = <span class="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclOutputInfo);</div>
+<div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; }</div>
+<div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; <span class="comment">// If there is only one LSTM batch major batch, we will not concat, only permute.</span></div>
+<div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; <span class="comment">// Set input of LSTM to be output of initial permute.</span></div>
+<div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; <span class="comment">// Set output of LSTM to be first element of m_ConcatInputs &amp; use that value later in permute.</span></div>
+<div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; <span class="comment">// LSTM output cannot be &gt; 2 dimensions so need to resize its TensorInfo.</span></div>
+<div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (maxTime == 1 &amp;&amp; !descriptor.m_TimeMajor)</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; TensorShape inputShape = <a class="code" href="namespacearmnn_utils.xhtml#ab53d94ea22b51c6bcdf9584644bd67bb">GetTensorShape</a>(aclPermuteOutInfo.tensor_shape(), 1U);</div>
+<div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; TensorShape inputShapeShrink({inputShape[1], inputShape[2]});</div>
+<div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; <span class="keyword">auto</span> acl_input_shape_shrink = BuildArmComputeTensorShape(inputShapeShrink);</div>
+<div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; aclPermuteOutInfo.set_tensor_shape(acl_input_shape_shrink);</div>
+<div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; inputLSTM = &amp;aclPermuteOutInfo;</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; outputLSTM = <span class="keyword">const_cast&lt;</span>arm_compute::ITensorInfo*<span class="keyword">&gt;</span>(concatInputsTensorInfosPtr[i]);</div>
+<div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; }</div>
+<div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; <span class="comment">// Batch major AND/OR 2+ LSTM batches so will use concat AND/OR permute later on.</span></div>
+<div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; {</div>
+<div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; inputLSTM = splitterOutputsTensorInfosPtr[i];</div>
+<div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; outputLSTM = <span class="keyword">const_cast&lt;</span>arm_compute::ITensorInfo*<span class="keyword">&gt;</span>(concatInputsTensorInfosPtr[i]);</div>
+<div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; }</div>
+<div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; </div>
+<div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; statusLSTM = arm_compute::NELSTMLayer::validate(inputLSTM,</div>
+<div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; &amp;aclInputToForgetWeightsInfo,</div>
+<div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; &amp;aclInputToCellWeightsInfo,</div>
+<div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; &amp;aclInputToOutputWeightsInfo,</div>
+<div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; &amp;aclRecurrentToForgetWeightsInfo,</div>
+<div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; &amp;aclRecurrentToCellWeightsInfo,</div>
+<div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; &amp;aclRecurrentToOutputWeightsInfo,</div>
+<div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; &amp;aclForgetGateBiasInfo,</div>
+<div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; &amp;aclCellBiasInfo,</div>
+<div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; &amp;aclOutputGateBiasInfo,</div>
+<div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; &amp;aclOutputStateInInfo,</div>
+<div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; &amp;aclCellStateInInfo,</div>
+<div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; &amp;aclScratchBufferInfo,</div>
+<div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; &amp;aclOutputStateOutInfo,</div>
+<div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; &amp;aclCellStateOutInfo,</div>
+<div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; outputLSTM,</div>
+<div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; lstm_params_info,</div>
+<div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; activationLayerInfo,</div>
+<div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; cell_threshold,</div>
+<div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; projection_threshold);</div>
+<div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; </div>
+<div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; <span class="keywordflow">if</span> (statusLSTM.error_code() != arm_compute::ErrorCode::OK)</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; <span class="keywordflow">break</span>;</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; </div>
+<div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; <span class="comment">//</span></div>
+<div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; <span class="comment">// Concat validate</span></div>
+<div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; <span class="comment">//</span></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="comment">// Expand dimensions of LSTM outputs adding one empty dimension to fit concatenate inputs.</span></div>
+<div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; TensorShape shape = <a class="code" href="namespacearmnn_utils.xhtml#ab53d94ea22b51c6bcdf9584644bd67bb">GetTensorShape</a>(concatInputsTensorInfosPtr[0]-&gt;tensor_shape(), 1U);</div>
+<div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; TensorShape shapeExpandTimeMajor({1, shape[0], shape[1]});</div>
+<div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; TensorShape shapeExpandBatchMajor({shape[0], 1, shape[1]});</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; TensorInfo concatOutputTensorInfo = TensorInfo(output);</div>
+<div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; concatOutputTensorInfo.SetShape(timeMajorShapeOutput);</div>
+<div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; arm_compute::TensorInfo aclConcatOutputTensorInfo= BuildArmComputeTensorInfo(concatOutputTensorInfo);</div>
+<div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; </div>
+<div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160; <span class="keywordflow">if</span> (maxTime != 1) <span class="comment">// ACL concat does not work with only one element to concatenate.</span></div>
+<div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; {</div>
+<div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; maxTime; ++i)</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; <span class="keyword">auto</span> acl_shape_expand = BuildArmComputeTensorShape(shapeExpandTimeMajor);</div>
+<div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; concatInputsTensorInfos[i].set_tensor_shape(acl_shape_expand);</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="keywordtype">unsigned</span> <span class="keywordtype">int</span> aclAxisConcat = CalcAclAxis(numberDimensions, dimension);</div>
+<div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div>
+<div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; {</div>
+<div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; statusConcat = arm_compute::NEConcatenateLayer::validate(concatInputsTensorInfosPtr,</div>
+<div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; &amp;aclConcatOutputTensorInfo,</div>
+<div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; aclAxisConcat);</div>
+<div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; }</div>
+<div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; {</div>
+<div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; statusConcat = arm_compute::NEConcatenateLayer::validate(concatInputsTensorInfosPtr,</div>
+<div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; &amp;aclOutputInfo,</div>
+<div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; aclAxisConcat);</div>
+<div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; }</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; <span class="comment">// If only one LSTM batch, we do not concat and/or permute.</span></div>
+<div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; <span class="comment">// Must ensure final output info is expanded to correct batch major dimensions.</span></div>
+<div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; <span class="keywordflow">else</span></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; <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</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; <span class="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclInputInfo)-&gt;set_tensor_shape(</div>
+<div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; BuildArmComputeTensorShape(shapeExpandBatchMajor));</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; <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; {</div>
+<div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; <span class="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclInputInfo)-&gt;set_tensor_shape(</div>
+<div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; BuildArmComputeTensorShape(shapeExpandTimeMajor));</div>
+<div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; }</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">//</span></div>
+<div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; <span class="comment">// Permute validate</span></div>
+<div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; <span class="comment">//</span></div>
+<div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</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; <span class="comment">// Output now time major. Permute output back to batch major.</span></div>
+<div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; <span class="keywordflow">if</span> (maxTime != 1)</div>
+<div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; {</div>
+<div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160; statusPermute2 = arm_compute::NEPermute::validate(&amp;aclConcatOutputTensorInfo,</div>
+<div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160; &amp;aclOutputInfo,</div>
+<div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160; arm_compute::PermutationVector(0U, 2U, 1U));</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; <span class="keywordflow">else</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; statusPermute2 = arm_compute::NEPermute::validate(concatInputsTensorInfosPtr[0],</div>
+<div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160; &amp;aclOutputInfo,</div>
+<div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160; arm_compute::PermutationVector(0U, 2U, 1U));</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; }</div>
+<div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160; </div>
+<div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160; <span class="keyword">auto</span> okCode = arm_compute::ErrorCode::OK;</div>
+<div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160; <span class="keywordflow">if</span> (statusPermute1.error_code() == okCode &amp;&amp;</div>
+<div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160; statusSplit.error_code() == okCode &amp;&amp;</div>
+<div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160; statusLSTM .error_code() == okCode &amp;&amp;</div>
+<div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160; statusConcat.error_code() == okCode &amp;&amp;</div>
+<div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160; statusPermute2.error_code() == okCode)</div>
+<div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160; {</div>
+<div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div>
+<div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160; <span class="stringliteral">&quot;All Unidirectional Sequence LSTM layer validate status OK.&quot;</span>);</div>
+<div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160; }</div>
+<div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160; <span class="keywordflow">else</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; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::RUNTIME_ERROR,</div>
+<div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160; <span class="stringliteral">&quot;Unidirectional Sequence LSTM layer validate status failed.&quot;</span>);</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;}</div>
+</div><!-- fragment -->
<p class="reference">References <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</a>, and <a class="el" href="_descriptors_8hpp_source.xhtml#l01101">LstmDescriptor::m_TimeMajor</a>.</p>
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01544">NeonLayerSupport::IsUnidirectionalSequenceLstmSupported()</a>.</p>
-<div class="fragment"><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; TensorShape inputLayerShape = input.GetShape();</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; TensorShape outputLayerShape = outputStateIn.GetShape();</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160;</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> maxTime = descriptor.m_TimeMajor ? inputLayerShape[0] : inputLayerShape[1];</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> batchSize = descriptor.m_TimeMajor ? inputLayerShape[1] : inputLayerShape[0];</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputSize = inputLayerShape[2];</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputSize = outputLayerShape[2];</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160;</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; <span class="keyword">const</span> TensorShape timeMajorShapeInput({maxTime, batchSize, inputSize});</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; <span class="keyword">const</span> TensorShape timeMajorShapeOutput({maxTime, batchSize, outputSize});</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160;</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusPermute1 = <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <span class="stringliteral">&quot;Permute1 status&quot;</span>);</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusSplit = <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <span class="stringliteral">&quot;Split status&quot;</span>);</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusLSTM = <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; <span class="stringliteral">&quot;LSTM status&quot;</span>);</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusConcat = <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; <span class="stringliteral">&quot;Concat status&quot;</span>);</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusPermute2 = <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <span class="stringliteral">&quot;Permute2 status&quot;</span>);</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160;</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160;</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; <span class="comment">// Permute validate</span></div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; TensorInfo permuteOutInfo = TensorInfo(input);</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; arm_compute::TensorInfo aclPermuteOutInfo = armcomputetensorutils::BuildArmComputeTensorInfo(permuteOutInfo);</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; {</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; statusPermute1 = arm_compute::NEPermute::validate(&amp;aclInputInfo,</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; &amp;aclPermuteOutInfo,</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; arm_compute::PermutationVector(0U, 2U, 1U));</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; }</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160;</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; <span class="comment">// Split and Concat Tensors validate</span></div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; std::vector&lt;arm_compute::TensorInfo&gt; splitterOutputsTensorInfos;</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; std::vector&lt;arm_compute::TensorInfo&gt; concatInputsTensorInfos;</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; std::vector&lt;arm_compute::ITensorInfo*&gt; splitterOutputsTensorInfosPtr;</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; std::vector&lt;const arm_compute::ITensorInfo*&gt; concatInputsTensorInfosPtr;</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; splitterOutputsTensorInfos.reserve(maxTime);</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; concatInputsTensorInfos.reserve(maxTime);</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; maxTime; ++i)</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; {</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; arm_compute::TensorInfo splitter_out;</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; arm_compute::TensorInfo concat_in;</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160;</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; <span class="keyword">auto</span> splitterTensorInfo = TensorInfo(input);</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; <span class="keyword">auto</span> concatTensorInfo = TensorInfo(output);</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; splitterTensorInfo.SetShape({batchSize, inputSize});</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; concatTensorInfo.SetShape({batchSize, outputSize});</div><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; arm_compute::TensorInfo aclSplitterTensorInfo</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; = armcomputetensorutils::BuildArmComputeTensorInfo(splitterTensorInfo);</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; arm_compute::TensorInfo aclConcatTensorInfo</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; = armcomputetensorutils::BuildArmComputeTensorInfo(concatTensorInfo);</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; splitterOutputsTensorInfos.emplace_back(aclSplitterTensorInfo);</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; concatInputsTensorInfos.emplace_back(aclConcatTensorInfo);</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; splitterOutputsTensorInfosPtr.emplace_back(&amp;splitterOutputsTensorInfos[i]);</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; concatInputsTensorInfosPtr.emplace_back(&amp;concatInputsTensorInfos[i]);</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; }</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160;</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; <span class="comment">// Split validate</span></div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numberDimensions = 3;</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dimension = 0; <span class="comment">// splitting on 0-dimension (i.e. maxTime dimension)</span></div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> aclAxisSplit = CalcAclAxis(numberDimensions, dimension);</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160;</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <span class="keywordflow">if</span> (maxTime != 1) <span class="comment">// ACL split does not work with only one element to split.</span></div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; {</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; {</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; statusSplit = arm_compute::NESplit::validate(&amp;aclPermuteOutInfo,</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; splitterOutputsTensorInfosPtr,</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; aclAxisSplit);</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; } <span class="keywordflow">else</span></div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; {</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; statusSplit = arm_compute::NESplit::validate(&amp;aclInputInfo, splitterOutputsTensorInfosPtr, aclAxisSplit);</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; }</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; }</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160;</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; <span class="comment">// LSTM validate</span></div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160;</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; arm_compute::LSTMParams&lt;arm_compute::ITensorInfo&gt; lstm_params_info;</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; <span class="keyword">const</span> TensorInfo&amp; scratchBuffer = TensorInfo(cellStateIn.GetShape(), input.GetDataType());</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160;</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <span class="comment">// The inputs and outputs</span></div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateInInfo = BuildArmComputeTensorInfo(outputStateIn);</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateInInfo = BuildArmComputeTensorInfo(cellStateIn);</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclScratchBufferInfo = BuildArmComputeTensorInfo(scratchBuffer);</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateOutInfo = BuildArmComputeTensorInfo(outputStateOut);</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateOutInfo = BuildArmComputeTensorInfo(cellStateOut);</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160;</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; <span class="comment">// Basic parameters</span></div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToForgetWeightsInfo</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToForgetWeights());</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToCellWeightsInfo</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToCellWeights());</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToOutputWeightsInfo</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToOutputWeights());</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToForgetWeightsInfo</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToForgetWeights());</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToCellWeightsInfo</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToCellWeights());</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToOutputWeightsInfo</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToOutputWeights());</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclForgetGateBiasInfo</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetForgetGateBias());</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellBiasInfo</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetCellBias());</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputGateBiasInfo</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetOutputGateBias());</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; arm_compute::TensorInfo aclInputToInputWeightsInfo;</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; arm_compute::TensorInfo aclRecurrentToInputWeightsInfo;</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; arm_compute::TensorInfo aclCellToInputWeightsInfo;</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; arm_compute::TensorInfo aclInputGateBiasInfo;</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; arm_compute::TensorInfo aclProjectionWeightsInfo;</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; arm_compute::TensorInfo aclProjectionBiasInfo;</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; arm_compute::TensorInfo aclCellToForgetWeightsInfo;</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; arm_compute::TensorInfo aclCellToOutputWeightsInfo;</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160;</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; arm_compute::TensorInfo aclInputLayerNormWeightsInfo;</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; arm_compute::TensorInfo aclForgetLayerNormWeightsInfo;</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; arm_compute::TensorInfo aclCellLayerNormWeightsInfo;</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; arm_compute::TensorInfo aclOutputLayerNormWeightsInfo;</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;</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</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; <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; {</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; aclCellToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToInputWeights());</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; aclInputToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputToInputWeights());</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; aclRecurrentToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToInputWeights());</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; aclInputGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputGateBias());</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; lstm_params_info.set_cifg_params(&amp;aclInputToInputWeightsInfo,</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; &amp;aclRecurrentToInputWeightsInfo,</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; descriptor.m_PeepholeEnabled ? &amp;aclCellToInputWeightsInfo : <span class="keyword">nullptr</span>,</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; &amp;aclInputGateBiasInfo);</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; }</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160;</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; <span class="keywordflow">if</span> (descriptor.m_ProjectionEnabled)</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; {</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; <span class="keywordflow">if</span> (paramsInfo.m_ProjectionBias != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; {</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; aclProjectionBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionBias());</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; }</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; aclProjectionWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionWeights());</div><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; lstm_params_info.set_projection_params(&amp;aclProjectionWeightsInfo,</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; paramsInfo.m_ProjectionBias ? &amp;aclProjectionBiasInfo : <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; }</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160;</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; {</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; aclCellToForgetWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToForgetWeights());</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; aclCellToOutputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToOutputWeights());</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; lstm_params_info.set_peephole_params(&amp;aclCellToForgetWeightsInfo, &amp;aclCellToOutputWeightsInfo);</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;</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; <span class="keywordflow">if</span> (descriptor.m_LayerNormEnabled)</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; <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; {</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; aclInputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputLayerNormWeights());</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; }</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; aclForgetLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetForgetLayerNormWeights());</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; aclCellLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellLayerNormWeights());</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; aclOutputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetOutputLayerNormWeights());</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160;</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; lstm_params_info.set_layer_normalization_params(descriptor.m_CifgEnabled ? <span class="keyword">nullptr</span> :</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; &amp;aclInputLayerNormWeightsInfo,</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; &amp;aclForgetLayerNormWeightsInfo,</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; &amp;aclCellLayerNormWeightsInfo,</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; &amp;aclOutputLayerNormWeightsInfo);</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; }</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160;</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; <span class="comment">// Need to be set at negative threshold to be compatible for ACL</span></div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; <span class="keywordtype">float</span> cell_threshold = descriptor.m_ClippingThresCell;</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; <span class="keywordtype">float</span> projection_threshold = descriptor.m_ClippingThresProj;</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160;</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; arm_compute::ActivationLayerInfo activationLayerInfo =</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; <a class="code" href="namespacearmnn.xhtml#aa1e93ef5f9ee3dbb5e7faa9578f180ae">ConvertLstmActivationFuncToAclLayerInfo</a>(descriptor.m_ActivationFunc);</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; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i != maxTime; ++i)</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; {</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160;</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; <span class="comment">// Set LSTM input and output ITensors depending on:</span></div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; <span class="comment">// input format (timeMajor) &amp; number of LSTM batches (maxTime).</span></div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; arm_compute::ITensorInfo* outputLSTM;</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; arm_compute::ITensorInfo* inputLSTM;</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; <span class="comment">// If there is only one LSTM time major batch, we will not concat OR permute.</span></div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; <span class="comment">// Set input of LSTM to be first input ITensor.</span></div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; <span class="comment">// Set output of LSTM to be final output ITensor.</span></div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; <span class="comment">// LSTM input/output cannot be &gt; 2 dimensions so need to resize its TensorInfo.</span></div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; <span class="keywordflow">if</span> (maxTime == 1 &amp;&amp; !descriptor.m_TimeMajor)</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; TensorShape inputShape = <a class="code" href="namespacearmnn_utils.xhtml#ab53d94ea22b51c6bcdf9584644bd67bb">GetTensorShape</a>(aclInputInfo.tensor_shape(), 1U);</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; TensorShape outputShape = <a class="code" href="namespacearmnn_utils.xhtml#ab53d94ea22b51c6bcdf9584644bd67bb">GetTensorShape</a>(aclOutputInfo.tensor_shape(), 1U);</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; TensorShape inputShapeShrink({inputShape[1], inputShape[2]});</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; TensorShape outputShapeShrink({outputShape[1], outputShape[2]});</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160;</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; <span class="keyword">auto</span> acl_input_shape_shrink = BuildArmComputeTensorShape(inputShapeShrink);</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; <span class="keyword">auto</span> acl_output_shape_shrink = BuildArmComputeTensorShape(outputShapeShrink);</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; <span class="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclInputInfo)-&gt;set_tensor_shape(acl_input_shape_shrink);</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; inputLSTM = <span class="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclInputInfo);</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160;</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; <span class="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclOutputInfo)-&gt;set_tensor_shape(acl_output_shape_shrink);</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; outputLSTM = <span class="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclOutputInfo);</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; }</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; <span class="comment">// If there is only one LSTM batch major batch, we will not concat, only permute.</span></div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; <span class="comment">// Set input of LSTM to be output of initial permute.</span></div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; <span class="comment">// Set output of LSTM to be first element of m_ConcatInputs &amp; use that value later in permute.</span></div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; <span class="comment">// LSTM output cannot be &gt; 2 dimensions so need to resize its TensorInfo.</span></div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (maxTime == 1 &amp;&amp; !descriptor.m_TimeMajor)</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; TensorShape inputShape = <a class="code" href="namespacearmnn_utils.xhtml#ab53d94ea22b51c6bcdf9584644bd67bb">GetTensorShape</a>(aclPermuteOutInfo.tensor_shape(), 1U);</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; TensorShape inputShapeShrink({inputShape[1], inputShape[2]});</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; <span class="keyword">auto</span> acl_input_shape_shrink = BuildArmComputeTensorShape(inputShapeShrink);</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; aclPermuteOutInfo.set_tensor_shape(acl_input_shape_shrink);</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; inputLSTM = &amp;aclPermuteOutInfo;</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; outputLSTM = <span class="keyword">const_cast&lt;</span>arm_compute::ITensorInfo*<span class="keyword">&gt;</span>(concatInputsTensorInfosPtr[i]);</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; }</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; <span class="comment">// Batch major AND/OR 2+ LSTM batches so will use concat AND/OR permute later on.</span></div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; {</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; inputLSTM = splitterOutputsTensorInfosPtr[i];</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; outputLSTM = <span class="keyword">const_cast&lt;</span>arm_compute::ITensorInfo*<span class="keyword">&gt;</span>(concatInputsTensorInfosPtr[i]);</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; }</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160;</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; statusLSTM = arm_compute::NELSTMLayer::validate(inputLSTM,</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; &amp;aclInputToForgetWeightsInfo,</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; &amp;aclInputToCellWeightsInfo,</div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; &amp;aclInputToOutputWeightsInfo,</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; &amp;aclRecurrentToForgetWeightsInfo,</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; &amp;aclRecurrentToCellWeightsInfo,</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; &amp;aclRecurrentToOutputWeightsInfo,</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; &amp;aclForgetGateBiasInfo,</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; &amp;aclCellBiasInfo,</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; &amp;aclOutputGateBiasInfo,</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; &amp;aclOutputStateInInfo,</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; &amp;aclCellStateInInfo,</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; &amp;aclScratchBufferInfo,</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; &amp;aclOutputStateOutInfo,</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; &amp;aclCellStateOutInfo,</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; outputLSTM,</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; lstm_params_info,</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; activationLayerInfo,</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; cell_threshold,</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; projection_threshold);</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160;</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; <span class="keywordflow">if</span> (statusLSTM.error_code() != arm_compute::ErrorCode::OK)</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; <span class="keywordflow">break</span>;</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;</div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; <span class="comment">// Concat validate</span></div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; <span class="comment">//</span></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="comment">// Expand dimensions of LSTM outputs adding one empty dimension to fit concatenate inputs.</span></div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; TensorShape shape = <a class="code" href="namespacearmnn_utils.xhtml#ab53d94ea22b51c6bcdf9584644bd67bb">GetTensorShape</a>(concatInputsTensorInfosPtr[0]-&gt;tensor_shape(), 1U);</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; TensorShape shapeExpandTimeMajor({1, shape[0], shape[1]});</div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; TensorShape shapeExpandBatchMajor({shape[0], 1, shape[1]});</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; TensorInfo concatOutputTensorInfo = TensorInfo(output);</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; concatOutputTensorInfo.SetShape(timeMajorShapeOutput);</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; arm_compute::TensorInfo aclConcatOutputTensorInfo= BuildArmComputeTensorInfo(concatOutputTensorInfo);</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160;</div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160; <span class="keywordflow">if</span> (maxTime != 1) <span class="comment">// ACL concat does not work with only one element to concatenate.</span></div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; {</div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; maxTime; ++i)</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; <span class="keyword">auto</span> acl_shape_expand = BuildArmComputeTensorShape(shapeExpandTimeMajor);</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; concatInputsTensorInfos[i].set_tensor_shape(acl_shape_expand);</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="keywordtype">unsigned</span> <span class="keywordtype">int</span> aclAxisConcat = CalcAclAxis(numberDimensions, dimension);</div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; {</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; statusConcat = arm_compute::NEConcatenateLayer::validate(concatInputsTensorInfosPtr,</div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; &amp;aclConcatOutputTensorInfo,</div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; aclAxisConcat);</div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; }</div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; {</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; statusConcat = arm_compute::NEConcatenateLayer::validate(concatInputsTensorInfosPtr,</div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; &amp;aclOutputInfo,</div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; aclAxisConcat);</div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; }</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; <span class="comment">// If only one LSTM batch, we do not concat and/or permute.</span></div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; <span class="comment">// Must ensure final output info is expanded to correct batch major dimensions.</span></div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; <span class="keywordflow">else</span></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; <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</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; <span class="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclInputInfo)-&gt;set_tensor_shape(</div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; BuildArmComputeTensorShape(shapeExpandBatchMajor));</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; <span class="keywordflow">else</span></div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; {</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; <span class="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclInputInfo)-&gt;set_tensor_shape(</div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; BuildArmComputeTensorShape(shapeExpandTimeMajor));</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; }</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">//</span></div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; <span class="comment">// Permute validate</span></div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</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; <span class="comment">// Output now time major. Permute output back to batch major.</span></div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; <span class="keywordflow">if</span> (maxTime != 1)</div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; {</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160; statusPermute2 = arm_compute::NEPermute::validate(&amp;aclConcatOutputTensorInfo,</div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160; &amp;aclOutputInfo,</div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160; arm_compute::PermutationVector(0U, 2U, 1U));</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; <span class="keywordflow">else</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; statusPermute2 = arm_compute::NEPermute::validate(concatInputsTensorInfosPtr[0],</div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160; &amp;aclOutputInfo,</div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160; arm_compute::PermutationVector(0U, 2U, 1U));</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; }</div><div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160;</div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160; <span class="keyword">auto</span> okCode = arm_compute::ErrorCode::OK;</div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160; <span class="keywordflow">if</span> (statusPermute1.error_code() == okCode &amp;&amp;</div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160; statusSplit.error_code() == okCode &amp;&amp;</div><div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160; statusLSTM .error_code() == okCode &amp;&amp;</div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160; statusConcat.error_code() == okCode &amp;&amp;</div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160; statusPermute2.error_code() == okCode)</div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160; {</div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160; <span class="stringliteral">&quot;All Unidirectional Sequence LSTM layer validate status OK.&quot;</span>);</div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160; }</div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160; <span class="keywordflow">else</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; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::RUNTIME_ERROR,</div><div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160; <span class="stringliteral">&quot;Unidirectional Sequence LSTM layer validate status failed.&quot;</span>);</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;}</div><div class="ttc" id="namespacearmnn_xhtml_aa1e93ef5f9ee3dbb5e7faa9578f180ae"><div class="ttname"><a href="namespacearmnn.xhtml#aa1e93ef5f9ee3dbb5e7faa9578f180ae">armnn::ConvertLstmActivationFuncToAclLayerInfo</a></div><div class="ttdeci">arm_compute::ActivationLayerInfo ConvertLstmActivationFuncToAclLayerInfo(uint32_t activationFunction)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.xhtml#l00116">ArmComputeUtils.hpp:116</a></div></div>
-<div class="ttc" id="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70b"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">armnn::Status</a></div><div class="ttdeci">Status</div><div class="ttdoc">enumeration </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00042">Types.hpp:42</a></div></div>
-<div class="ttc" id="namespacearmnn_utils_xhtml_ab53d94ea22b51c6bcdf9584644bd67bb"><div class="ttname"><a href="namespacearmnn_utils.xhtml#ab53d94ea22b51c6bcdf9584644bd67bb">armnnUtils::GetTensorShape</a></div><div class="ttdeci">armnn::TensorShape GetTensorShape(unsigned int numberOfBatches, unsigned int numberOfChannels, unsigned int height, unsigned int width, const armnn::DataLayout dataLayout)</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_utils_8cpp_source.xhtml#l00019">TensorUtils.cpp:19</a></div></div>
-</div><!-- fragment -->
+
</div>
</div>
<a id="a42561b8004ee341ac089d5f1657120db"></a>
@@ -26026,13 +34777,365 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_unidirectional_sequence_lstm_workload_8cpp_source.xhtml#l00491">491</a> of file <a class="el" href="_neon_unidirectional_sequence_lstm_workload_8cpp_source.xhtml">NeonUnidirectionalSequenceLstmWorkload.cpp</a>.</p>
-
+<div class="fragment"><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160;{</div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; TensorShape inputLayerShape = input.GetShape();</div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; TensorShape outputLayerShape = output.GetShape();</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; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> maxTime = descriptor.m_TimeMajor ? inputLayerShape[0] : inputLayerShape[1];</div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> batchSize = descriptor.m_TimeMajor ? inputLayerShape[1] : inputLayerShape[0];</div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputSize = inputLayerShape[2];</div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputSize = outputLayerShape[2];</div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; </div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; <span class="keyword">const</span> TensorShape timeMajorShapeInput({maxTime, batchSize, inputSize});</div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; <span class="keyword">const</span> TensorShape timeMajorShapeOutput({maxTime, batchSize, outputSize});</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; <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusPermute1 = <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; <span class="stringliteral">&quot;Permute1 status&quot;</span>);</div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusSplit = <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; <span class="stringliteral">&quot;Split status&quot;</span>);</div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusLSTM = <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <span class="stringliteral">&quot;LSTM status&quot;</span>);</div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusConcat = <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; <span class="stringliteral">&quot;Concat status&quot;</span>);</div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusPermute2 = <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; <span class="stringliteral">&quot;Permute2 status&quot;</span>);</div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; </div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; </div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; <span class="comment">//</span></div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <span class="comment">// Permute validate</span></div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; <span class="comment">//</span></div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; TensorInfo permuteOutInfo = TensorInfo(input);</div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; arm_compute::TensorInfo aclPermuteOutInfo = armcomputetensorutils::BuildArmComputeTensorInfo(permuteOutInfo);</div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</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; statusPermute1 = arm_compute::NEPermute::validate(&amp;aclInputInfo,</div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; &amp;aclPermuteOutInfo,</div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; arm_compute::PermutationVector(0U, 2U, 1U));</div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; }</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; </div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; <span class="comment">//</span></div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; <span class="comment">// Split and Concat Tensors validate</span></div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <span class="comment">//</span></div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; std::vector&lt;arm_compute::TensorInfo&gt; splitterOutputsTensorInfos;</div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; std::vector&lt;arm_compute::TensorInfo&gt; concatInputsTensorInfos;</div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; std::vector&lt;arm_compute::ITensorInfo*&gt; splitterOutputsTensorInfosPtr;</div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; std::vector&lt;const arm_compute::ITensorInfo*&gt; concatInputsTensorInfosPtr;</div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; splitterOutputsTensorInfos.reserve(maxTime);</div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; concatInputsTensorInfos.reserve(maxTime);</div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; maxTime; ++i)</div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; {</div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; arm_compute::TensorInfo splitter_out;</div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; arm_compute::TensorInfo concat_in;</div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; </div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; <span class="keyword">auto</span> splitterTensorInfo = TensorInfo(input);</div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; <span class="keyword">auto</span> concatTensorInfo = TensorInfo(output);</div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; splitterTensorInfo.SetShape({batchSize, inputSize});</div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; concatTensorInfo.SetShape({batchSize, outputSize});</div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; </div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; arm_compute::TensorInfo aclSplitterTensorInfo</div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; = armcomputetensorutils::BuildArmComputeTensorInfo(splitterTensorInfo);</div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; arm_compute::TensorInfo aclConcatTensorInfo</div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; = armcomputetensorutils::BuildArmComputeTensorInfo(concatTensorInfo);</div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; </div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; splitterOutputsTensorInfos.emplace_back(aclSplitterTensorInfo);</div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; concatInputsTensorInfos.emplace_back(aclConcatTensorInfo);</div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; splitterOutputsTensorInfosPtr.emplace_back(&amp;splitterOutputsTensorInfos[i]);</div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; concatInputsTensorInfosPtr.emplace_back(&amp;concatInputsTensorInfos[i]);</div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; }</div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; </div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; <span class="comment">//</span></div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; <span class="comment">// Split validate</span></div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; <span class="comment">//</span></div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numberDimensions = 3;</div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dimension = 0; <span class="comment">// splitting on 0-dimension (i.e. maxTime dimension)</span></div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> aclAxisSplit = CalcAclAxis(numberDimensions, dimension);</div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; </div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; <span class="keywordflow">if</span> (maxTime != 1) <span class="comment">// ACL split does not work with only one element to split.</span></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; <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; {</div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; statusSplit = arm_compute::NESplit::validate(&amp;aclPermuteOutInfo,</div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; splitterOutputsTensorInfosPtr,</div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; aclAxisSplit);</div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; } <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; {</div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; statusSplit = arm_compute::NESplit::validate(&amp;aclInputInfo, splitterOutputsTensorInfosPtr, aclAxisSplit);</div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; }</div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; }</div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; </div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; <span class="comment">//</span></div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; <span class="comment">// LSTM validate</span></div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <span class="comment">//</span></div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; </div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; arm_compute::LSTMParams&lt;arm_compute::ITensorInfo&gt; lstm_params_info;</div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; </div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <span class="keyword">const</span> TensorInfo&amp; scratchBuffer = TensorInfo(cellStateIn.GetShape(), input.GetDataType());</div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; </div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; lstm_params_info.set_cell_clip_params(descriptor.m_ClippingThresCell);</div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; lstm_params_info.set_projection_clip_params(descriptor.m_ClippingThresProj);</div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <span class="comment">// The inputs and outputs</span></div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateInInfo = BuildArmComputeTensorInfo(outputStateIn);</div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateInInfo = BuildArmComputeTensorInfo(cellStateIn);</div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclScratchBufferInfo = BuildArmComputeTensorInfo(scratchBuffer);</div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateOutInfo = BuildArmComputeTensorInfo(outputStateOut);</div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateOutInfo = BuildArmComputeTensorInfo(cellStateOut);</div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; </div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; <span class="comment">// Basic parameters</span></div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToForgetWeightsInfo</div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToForgetWeights());</div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToCellWeightsInfo</div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToCellWeights());</div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToOutputWeightsInfo</div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToOutputWeights());</div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToForgetWeightsInfo</div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToForgetWeights());</div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToCellWeightsInfo</div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToCellWeights());</div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToOutputWeightsInfo</div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToOutputWeights());</div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclForgetGateBiasInfo</div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetForgetGateBias());</div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellBiasInfo</div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetCellBias());</div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputGateBiasInfo</div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetOutputGateBias());</div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; </div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; arm_compute::TensorInfo aclInputToInputWeightsInfo;</div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; arm_compute::TensorInfo aclRecurrentToInputWeightsInfo;</div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; arm_compute::TensorInfo aclCellToInputWeightsInfo;</div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; arm_compute::TensorInfo aclInputGateBiasInfo;</div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; arm_compute::TensorInfo aclProjectionWeightsInfo;</div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; arm_compute::TensorInfo aclProjectionBiasInfo;</div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; arm_compute::TensorInfo aclCellToForgetWeightsInfo;</div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; arm_compute::TensorInfo aclCellToOutputWeightsInfo;</div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; </div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; arm_compute::TensorInfo aclInputLayerNormWeightsInfo;</div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; arm_compute::TensorInfo aclForgetLayerNormWeightsInfo;</div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; arm_compute::TensorInfo aclCellLayerNormWeightsInfo;</div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; arm_compute::TensorInfo aclOutputLayerNormWeightsInfo;</div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; </div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</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; <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</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; aclCellToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToInputWeights());</div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; }</div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; aclInputToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputToInputWeights());</div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; aclRecurrentToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToInputWeights());</div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; aclInputGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputGateBias());</div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; </div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; lstm_params_info.set_cifg_params(&amp;aclInputToInputWeightsInfo,</div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; &amp;aclRecurrentToInputWeightsInfo,</div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; descriptor.m_PeepholeEnabled ? &amp;aclCellToInputWeightsInfo : <span class="keyword">nullptr</span>,</div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; &amp;aclInputGateBiasInfo);</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; </div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; <span class="keywordflow">if</span> (descriptor.m_ProjectionEnabled)</div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; {</div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; <span class="keywordflow">if</span> (paramsInfo.m_ProjectionBias != <span class="keyword">nullptr</span>)</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; aclProjectionBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionBias());</div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; }</div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; aclProjectionWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionWeights());</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; lstm_params_info.set_projection_params(&amp;aclProjectionWeightsInfo,</div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; paramsInfo.m_ProjectionBias ? &amp;aclProjectionBiasInfo : <span class="keyword">nullptr</span>);</div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; }</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; <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; {</div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; aclCellToForgetWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToForgetWeights());</div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; aclCellToOutputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToOutputWeights());</div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; </div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; lstm_params_info.set_peephole_params(&amp;aclCellToForgetWeightsInfo, &amp;aclCellToOutputWeightsInfo);</div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; }</div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; </div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; <span class="keywordflow">if</span> (descriptor.m_LayerNormEnabled)</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; <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; {</div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; aclInputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputLayerNormWeights());</div>
+<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; aclForgetLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetForgetLayerNormWeights());</div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; aclCellLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellLayerNormWeights());</div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; aclOutputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetOutputLayerNormWeights());</div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; </div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; lstm_params_info.set_layer_normalization_params(descriptor.m_CifgEnabled ? <span class="keyword">nullptr</span> :</div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; &amp;aclInputLayerNormWeightsInfo,</div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; &amp;aclForgetLayerNormWeightsInfo,</div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; &amp;aclCellLayerNormWeightsInfo,</div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; &amp;aclOutputLayerNormWeightsInfo);</div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; }</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; lstm_params_info.set_matmul_scale_params(descriptor.m_InputIntermediateScale,</div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; descriptor.m_ForgetIntermediateScale,</div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; descriptor.m_CellIntermediateScale,</div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; descriptor.m_OutputIntermediateScale);</div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; </div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; lstm_params_info.set_hidden_state_params(descriptor.m_HiddenStateZeroPoint, descriptor.m_HiddenStateScale);</div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; </div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i != maxTime; ++i)</div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; {</div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; </div>
+<div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; <span class="comment">// Set LSTM input and output ITensors depending on:</span></div>
+<div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; <span class="comment">// input format (timeMajor) &amp; number of LSTM batches (maxTime).</span></div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; arm_compute::ITensorInfo* outputLSTM;</div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; arm_compute::ITensorInfo* inputLSTM;</div>
+<div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; </div>
+<div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; <span class="comment">// If there is only one LSTM time major batch, we will not concat OR permute.</span></div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; <span class="comment">// Set input of LSTM to be first input ITensor.</span></div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; <span class="comment">// Set output of LSTM to be final output ITensor.</span></div>
+<div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; <span class="comment">// LSTM input/output cannot be &gt; 2 dimensions so need to resize its TensorInfo.</span></div>
+<div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; <span class="keywordflow">if</span> (maxTime == 1 &amp;&amp; !descriptor.m_TimeMajor)</div>
+<div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; {</div>
+<div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; TensorShape inputShape = <a class="code" href="namespacearmnn_utils.xhtml#ab53d94ea22b51c6bcdf9584644bd67bb">GetTensorShape</a>(aclInputInfo.tensor_shape(), 1U);</div>
+<div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; TensorShape outputShape = <a class="code" href="namespacearmnn_utils.xhtml#ab53d94ea22b51c6bcdf9584644bd67bb">GetTensorShape</a>(aclOutputInfo.tensor_shape(), 1U);</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; TensorShape inputShapeShrink({inputShape[1], inputShape[2]});</div>
+<div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; TensorShape outputShapeShrink({outputShape[1], outputShape[2]});</div>
+<div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; </div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; <span class="keyword">auto</span> acl_input_shape_shrink = BuildArmComputeTensorShape(inputShapeShrink);</div>
+<div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; <span class="keyword">auto</span> acl_output_shape_shrink = BuildArmComputeTensorShape(outputShapeShrink);</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; <span class="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclInputInfo)-&gt;set_tensor_shape(acl_input_shape_shrink);</div>
+<div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; inputLSTM = <span class="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclInputInfo);</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; <span class="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclOutputInfo)-&gt;set_tensor_shape(acl_output_shape_shrink);</div>
+<div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; outputLSTM = <span class="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclOutputInfo);</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; <span class="comment">// If there is only one LSTM batch major batch, we will not concat, only permute.</span></div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; <span class="comment">// Set input of LSTM to be output of initial permute.</span></div>
+<div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; <span class="comment">// Set output of LSTM to be first element of m_ConcatInputs &amp; use that value later in permute.</span></div>
+<div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; <span class="comment">// LSTM output cannot be &gt; 2 dimensions so need to resize its TensorInfo.</span></div>
+<div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (maxTime == 1 &amp;&amp; !descriptor.m_TimeMajor)</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; TensorShape inputShape = <a class="code" href="namespacearmnn_utils.xhtml#ab53d94ea22b51c6bcdf9584644bd67bb">GetTensorShape</a>(aclPermuteOutInfo.tensor_shape(), 1U);</div>
+<div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; TensorShape inputShapeShrink({inputShape[1], inputShape[2]});</div>
+<div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; <span class="keyword">auto</span> acl_input_shape_shrink = BuildArmComputeTensorShape(inputShapeShrink);</div>
+<div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; aclPermuteOutInfo.set_tensor_shape(acl_input_shape_shrink);</div>
+<div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; inputLSTM = &amp;aclPermuteOutInfo;</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; outputLSTM = <span class="keyword">const_cast&lt;</span>arm_compute::ITensorInfo*<span class="keyword">&gt;</span>(concatInputsTensorInfosPtr[i]);</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">// Batch major AND/OR 2+ LSTM batches so will use concat AND/OR permute later on.</span></div>
+<div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; {</div>
+<div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; inputLSTM = splitterOutputsTensorInfosPtr[i];</div>
+<div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; outputLSTM = <span class="keyword">const_cast&lt;</span>arm_compute::ITensorInfo*<span class="keyword">&gt;</span>(concatInputsTensorInfosPtr[i]);</div>
+<div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; }</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; statusLSTM = arm_compute::NEQLSTMLayer::validate(inputLSTM,</div>
+<div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; &amp;aclInputToForgetWeightsInfo,</div>
+<div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; &amp;aclInputToCellWeightsInfo,</div>
+<div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; &amp;aclInputToOutputWeightsInfo,</div>
+<div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; &amp;aclRecurrentToForgetWeightsInfo,</div>
+<div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; &amp;aclRecurrentToCellWeightsInfo,</div>
+<div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; &amp;aclRecurrentToOutputWeightsInfo,</div>
+<div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; &amp;aclForgetGateBiasInfo,</div>
+<div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; &amp;aclCellBiasInfo,</div>
+<div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; &amp;aclOutputGateBiasInfo,</div>
+<div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; &amp;aclCellStateInInfo,</div>
+<div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; &amp;aclOutputStateInInfo,</div>
+<div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; &amp;aclCellStateOutInfo,</div>
+<div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; &amp;aclOutputStateOutInfo,</div>
+<div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; outputLSTM,</div>
+<div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; lstm_params_info);</div>
+<div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; }</div>
+<div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; </div>
+<div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; <span class="comment">//</span></div>
+<div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; <span class="comment">// Concat validate</span></div>
+<div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; <span class="comment">//</span></div>
+<div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; </div>
+<div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; <span class="comment">// Expand dimensions of LSTM outputs adding one empty dimension to fit concatenate inputs.</span></div>
+<div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; TensorShape shape = <a class="code" href="namespacearmnn_utils.xhtml#ab53d94ea22b51c6bcdf9584644bd67bb">GetTensorShape</a>(concatInputsTensorInfosPtr[0]-&gt;tensor_shape(), 1U);</div>
+<div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; TensorShape shapeExpandTimeMajor({1, shape[0], shape[1]});</div>
+<div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; TensorShape shapeExpandBatchMajor({shape[0], 1, shape[1]});</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; TensorInfo concatOutputTensorInfo = TensorInfo(output);</div>
+<div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; concatOutputTensorInfo.SetShape(timeMajorShapeOutput);</div>
+<div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; arm_compute::TensorInfo aclConcatOutputTensorInfo= BuildArmComputeTensorInfo(concatOutputTensorInfo);</div>
+<div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; </div>
+<div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; <span class="keywordflow">if</span> (maxTime != 1) <span class="comment">// ACL concat does not work with only one element to concatenate.</span></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; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; maxTime; ++i)</div>
+<div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; {</div>
+<div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; <span class="keyword">auto</span> acl_shape_expand = BuildArmComputeTensorShape(shapeExpandTimeMajor);</div>
+<div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; concatInputsTensorInfos[i].set_tensor_shape(acl_shape_expand);</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; </div>
+<div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> aclAxisConcat = CalcAclAxis(numberDimensions, dimension);</div>
+<div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</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; statusConcat = arm_compute::NEConcatenateLayer::validate(concatInputsTensorInfosPtr,</div>
+<div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; &amp;aclConcatOutputTensorInfo,</div>
+<div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; aclAxisConcat);</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; <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; {</div>
+<div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; statusConcat = arm_compute::NEConcatenateLayer::validate(concatInputsTensorInfosPtr,</div>
+<div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; &amp;aclOutputInfo,</div>
+<div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; aclAxisConcat);</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; }</div>
+<div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; <span class="comment">// If only one LSTM batch, we do not concat and/or permute.</span></div>
+<div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; <span class="comment">// Must ensure final output info is expanded to correct batch major dimensions.</span></div>
+<div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; <span class="keywordflow">else</span></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> (!descriptor.m_TimeMajor)</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="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclInputInfo)-&gt;set_tensor_shape(</div>
+<div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; BuildArmComputeTensorShape(shapeExpandBatchMajor));</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; <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; {</div>
+<div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160; <span class="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclInputInfo)-&gt;set_tensor_shape(</div>
+<div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; BuildArmComputeTensorShape(shapeExpandTimeMajor));</div>
+<div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160; }</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; </div>
+<div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; <span class="comment">//</span></div>
+<div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; <span class="comment">// Permute validate</span></div>
+<div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; <span class="comment">//</span></div>
+<div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div>
+<div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; {</div>
+<div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; <span class="comment">// Output now time major. Permute output back to batch major.</span></div>
+<div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; <span class="keywordflow">if</span> (maxTime != 1)</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; statusPermute2 = arm_compute::NEPermute::validate(&amp;aclConcatOutputTensorInfo,</div>
+<div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; &amp;aclOutputInfo,</div>
+<div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; arm_compute::PermutationVector(0U, 2U, 1U));</div>
+<div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; }</div>
+<div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; <span class="keywordflow">else</span></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; statusPermute2 = arm_compute::NEPermute::validate(concatInputsTensorInfosPtr[0],</div>
+<div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; &amp;aclOutputInfo,</div>
+<div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; arm_compute::PermutationVector(0U, 2U, 1U));</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; </div>
+<div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; <span class="keyword">auto</span> okCode = arm_compute::ErrorCode::OK;</div>
+<div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; <span class="keywordflow">if</span> (statusPermute1.error_code() == okCode &amp;&amp;</div>
+<div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; statusSplit.error_code() == okCode &amp;&amp;</div>
+<div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; statusLSTM .error_code() == okCode &amp;&amp;</div>
+<div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; statusConcat.error_code() == okCode &amp;&amp;</div>
+<div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160; statusPermute2.error_code() == okCode)</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="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div>
+<div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; <span class="stringliteral">&quot;All Unidirectional Sequence LSTM layer validate status OK.&quot;</span>);</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="keywordflow">else</span></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; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::RUNTIME_ERROR,</div>
+<div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; <span class="stringliteral">&quot;Unidirectional Sequence LSTM layer validate status failed.&quot;</span>);</div>
+<div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; }</div>
+<div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160;}</div>
+</div><!-- fragment -->
<p class="reference">References <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</a>, and <a class="el" href="_descriptors_8hpp_source.xhtml#l01101">LstmDescriptor::m_TimeMajor</a>.</p>
<p class="reference">Referenced by <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01544">NeonLayerSupport::IsUnidirectionalSequenceLstmSupported()</a>.</p>
-<div class="fragment"><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160;{</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; TensorShape inputLayerShape = input.GetShape();</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; TensorShape outputLayerShape = output.GetShape();</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; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> maxTime = descriptor.m_TimeMajor ? inputLayerShape[0] : inputLayerShape[1];</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> batchSize = descriptor.m_TimeMajor ? inputLayerShape[1] : inputLayerShape[0];</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputSize = inputLayerShape[2];</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputSize = outputLayerShape[2];</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160;</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; <span class="keyword">const</span> TensorShape timeMajorShapeInput({maxTime, batchSize, inputSize});</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; <span class="keyword">const</span> TensorShape timeMajorShapeOutput({maxTime, batchSize, outputSize});</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; <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusPermute1 = <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; <span class="stringliteral">&quot;Permute1 status&quot;</span>);</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusSplit = <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; <span class="stringliteral">&quot;Split status&quot;</span>);</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusLSTM = <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <span class="stringliteral">&quot;LSTM status&quot;</span>);</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusConcat = <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; <span class="stringliteral">&quot;Concat status&quot;</span>);</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a> statusPermute2 = <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; <span class="stringliteral">&quot;Permute2 status&quot;</span>);</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160;</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input);</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160;</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <span class="comment">// Permute validate</span></div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; TensorInfo permuteOutInfo = TensorInfo(input);</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; arm_compute::TensorInfo aclPermuteOutInfo = armcomputetensorutils::BuildArmComputeTensorInfo(permuteOutInfo);</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</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; statusPermute1 = arm_compute::NEPermute::validate(&amp;aclInputInfo,</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; &amp;aclPermuteOutInfo,</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; arm_compute::PermutationVector(0U, 2U, 1U));</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; }</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160;</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; <span class="comment">// Split and Concat Tensors validate</span></div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; std::vector&lt;arm_compute::TensorInfo&gt; splitterOutputsTensorInfos;</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; std::vector&lt;arm_compute::TensorInfo&gt; concatInputsTensorInfos;</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; std::vector&lt;arm_compute::ITensorInfo*&gt; splitterOutputsTensorInfosPtr;</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; std::vector&lt;const arm_compute::ITensorInfo*&gt; concatInputsTensorInfosPtr;</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; splitterOutputsTensorInfos.reserve(maxTime);</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; concatInputsTensorInfos.reserve(maxTime);</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; maxTime; ++i)</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; {</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; arm_compute::TensorInfo splitter_out;</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; arm_compute::TensorInfo concat_in;</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160;</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; <span class="keyword">auto</span> splitterTensorInfo = TensorInfo(input);</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; <span class="keyword">auto</span> concatTensorInfo = TensorInfo(output);</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; splitterTensorInfo.SetShape({batchSize, inputSize});</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; concatTensorInfo.SetShape({batchSize, outputSize});</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160;</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; arm_compute::TensorInfo aclSplitterTensorInfo</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; = armcomputetensorutils::BuildArmComputeTensorInfo(splitterTensorInfo);</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; arm_compute::TensorInfo aclConcatTensorInfo</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; = armcomputetensorutils::BuildArmComputeTensorInfo(concatTensorInfo);</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160;</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; splitterOutputsTensorInfos.emplace_back(aclSplitterTensorInfo);</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; concatInputsTensorInfos.emplace_back(aclConcatTensorInfo);</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; splitterOutputsTensorInfosPtr.emplace_back(&amp;splitterOutputsTensorInfos[i]);</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; concatInputsTensorInfosPtr.emplace_back(&amp;concatInputsTensorInfos[i]);</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; }</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160;</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; <span class="comment">// Split validate</span></div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numberDimensions = 3;</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dimension = 0; <span class="comment">// splitting on 0-dimension (i.e. maxTime dimension)</span></div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> aclAxisSplit = CalcAclAxis(numberDimensions, dimension);</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160;</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; <span class="keywordflow">if</span> (maxTime != 1) <span class="comment">// ACL split does not work with only one element to split.</span></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; <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; {</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; statusSplit = arm_compute::NESplit::validate(&amp;aclPermuteOutInfo,</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; splitterOutputsTensorInfosPtr,</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; aclAxisSplit);</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; } <span class="keywordflow">else</span></div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; {</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; statusSplit = arm_compute::NESplit::validate(&amp;aclInputInfo, splitterOutputsTensorInfosPtr, aclAxisSplit);</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; }</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; }</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160;</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; <span class="comment">// LSTM validate</span></div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160;</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; arm_compute::LSTMParams&lt;arm_compute::ITensorInfo&gt; lstm_params_info;</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160;</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <span class="keyword">const</span> TensorInfo&amp; scratchBuffer = TensorInfo(cellStateIn.GetShape(), input.GetDataType());</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160;</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; lstm_params_info.set_cell_clip_params(descriptor.m_ClippingThresCell);</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; lstm_params_info.set_projection_clip_params(descriptor.m_ClippingThresProj);</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <span class="comment">// The inputs and outputs</span></div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateInInfo = BuildArmComputeTensorInfo(outputStateIn);</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateInInfo = BuildArmComputeTensorInfo(cellStateIn);</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclScratchBufferInfo = BuildArmComputeTensorInfo(scratchBuffer);</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputStateOutInfo = BuildArmComputeTensorInfo(outputStateOut);</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellStateOutInfo = BuildArmComputeTensorInfo(cellStateOut);</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160;</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; <span class="comment">// Basic parameters</span></div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToForgetWeightsInfo</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToForgetWeights());</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToCellWeightsInfo</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToCellWeights());</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclInputToOutputWeightsInfo</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetInputToOutputWeights());</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToForgetWeightsInfo</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToForgetWeights());</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToCellWeightsInfo</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToCellWeights());</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclRecurrentToOutputWeightsInfo</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToOutputWeights());</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclForgetGateBiasInfo</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetForgetGateBias());</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclCellBiasInfo</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetCellBias());</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; <span class="keyword">const</span> arm_compute::TensorInfo aclOutputGateBiasInfo</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; = BuildArmComputeTensorInfo(paramsInfo.GetOutputGateBias());</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160;</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; arm_compute::TensorInfo aclInputToInputWeightsInfo;</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; arm_compute::TensorInfo aclRecurrentToInputWeightsInfo;</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; arm_compute::TensorInfo aclCellToInputWeightsInfo;</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; arm_compute::TensorInfo aclInputGateBiasInfo;</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; arm_compute::TensorInfo aclProjectionWeightsInfo;</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; arm_compute::TensorInfo aclProjectionBiasInfo;</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; arm_compute::TensorInfo aclCellToForgetWeightsInfo;</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; arm_compute::TensorInfo aclCellToOutputWeightsInfo;</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160;</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; arm_compute::TensorInfo aclInputLayerNormWeightsInfo;</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; arm_compute::TensorInfo aclForgetLayerNormWeightsInfo;</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; arm_compute::TensorInfo aclCellLayerNormWeightsInfo;</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; arm_compute::TensorInfo aclOutputLayerNormWeightsInfo;</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160;</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</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; <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</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; aclCellToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToInputWeights());</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; }</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; aclInputToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputToInputWeights());</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; aclRecurrentToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToInputWeights());</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; aclInputGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputGateBias());</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160;</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; lstm_params_info.set_cifg_params(&amp;aclInputToInputWeightsInfo,</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; &amp;aclRecurrentToInputWeightsInfo,</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; descriptor.m_PeepholeEnabled ? &amp;aclCellToInputWeightsInfo : <span class="keyword">nullptr</span>,</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; &amp;aclInputGateBiasInfo);</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;</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; <span class="keywordflow">if</span> (descriptor.m_ProjectionEnabled)</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; {</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; <span class="keywordflow">if</span> (paramsInfo.m_ProjectionBias != <span class="keyword">nullptr</span>)</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; aclProjectionBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionBias());</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; }</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; aclProjectionWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionWeights());</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; lstm_params_info.set_projection_params(&amp;aclProjectionWeightsInfo,</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; paramsInfo.m_ProjectionBias ? &amp;aclProjectionBiasInfo : <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; }</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; <span class="keywordflow">if</span> (descriptor.m_PeepholeEnabled)</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; {</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; aclCellToForgetWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToForgetWeights());</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; aclCellToOutputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToOutputWeights());</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160;</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; lstm_params_info.set_peephole_params(&amp;aclCellToForgetWeightsInfo, &amp;aclCellToOutputWeightsInfo);</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; }</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160;</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; <span class="keywordflow">if</span> (descriptor.m_LayerNormEnabled)</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; <span class="keywordflow">if</span> (!descriptor.m_CifgEnabled)</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; {</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; aclInputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputLayerNormWeights());</div><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; aclForgetLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetForgetLayerNormWeights());</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; aclCellLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellLayerNormWeights());</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; aclOutputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetOutputLayerNormWeights());</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160;</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; lstm_params_info.set_layer_normalization_params(descriptor.m_CifgEnabled ? <span class="keyword">nullptr</span> :</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; &amp;aclInputLayerNormWeightsInfo,</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; &amp;aclForgetLayerNormWeightsInfo,</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; &amp;aclCellLayerNormWeightsInfo,</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; &amp;aclOutputLayerNormWeightsInfo);</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; }</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; lstm_params_info.set_matmul_scale_params(descriptor.m_InputIntermediateScale,</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; descriptor.m_ForgetIntermediateScale,</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; descriptor.m_CellIntermediateScale,</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; descriptor.m_OutputIntermediateScale);</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160;</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; lstm_params_info.set_hidden_state_params(descriptor.m_HiddenStateZeroPoint, descriptor.m_HiddenStateScale);</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160;</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i != maxTime; ++i)</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; {</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160;</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; <span class="comment">// Set LSTM input and output ITensors depending on:</span></div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; <span class="comment">// input format (timeMajor) &amp; number of LSTM batches (maxTime).</span></div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; arm_compute::ITensorInfo* outputLSTM;</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; arm_compute::ITensorInfo* inputLSTM;</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160;</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; <span class="comment">// If there is only one LSTM time major batch, we will not concat OR permute.</span></div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; <span class="comment">// Set input of LSTM to be first input ITensor.</span></div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; <span class="comment">// Set output of LSTM to be final output ITensor.</span></div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; <span class="comment">// LSTM input/output cannot be &gt; 2 dimensions so need to resize its TensorInfo.</span></div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; <span class="keywordflow">if</span> (maxTime == 1 &amp;&amp; !descriptor.m_TimeMajor)</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; {</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; TensorShape inputShape = <a class="code" href="namespacearmnn_utils.xhtml#ab53d94ea22b51c6bcdf9584644bd67bb">GetTensorShape</a>(aclInputInfo.tensor_shape(), 1U);</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; TensorShape outputShape = <a class="code" href="namespacearmnn_utils.xhtml#ab53d94ea22b51c6bcdf9584644bd67bb">GetTensorShape</a>(aclOutputInfo.tensor_shape(), 1U);</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; TensorShape inputShapeShrink({inputShape[1], inputShape[2]});</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; TensorShape outputShapeShrink({outputShape[1], outputShape[2]});</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160;</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; <span class="keyword">auto</span> acl_input_shape_shrink = BuildArmComputeTensorShape(inputShapeShrink);</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; <span class="keyword">auto</span> acl_output_shape_shrink = BuildArmComputeTensorShape(outputShapeShrink);</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; <span class="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclInputInfo)-&gt;set_tensor_shape(acl_input_shape_shrink);</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; inputLSTM = <span class="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclInputInfo);</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; <span class="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclOutputInfo)-&gt;set_tensor_shape(acl_output_shape_shrink);</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; outputLSTM = <span class="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclOutputInfo);</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; <span class="comment">// If there is only one LSTM batch major batch, we will not concat, only permute.</span></div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; <span class="comment">// Set input of LSTM to be output of initial permute.</span></div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; <span class="comment">// Set output of LSTM to be first element of m_ConcatInputs &amp; use that value later in permute.</span></div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; <span class="comment">// LSTM output cannot be &gt; 2 dimensions so need to resize its TensorInfo.</span></div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (maxTime == 1 &amp;&amp; !descriptor.m_TimeMajor)</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; TensorShape inputShape = <a class="code" href="namespacearmnn_utils.xhtml#ab53d94ea22b51c6bcdf9584644bd67bb">GetTensorShape</a>(aclPermuteOutInfo.tensor_shape(), 1U);</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; TensorShape inputShapeShrink({inputShape[1], inputShape[2]});</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; <span class="keyword">auto</span> acl_input_shape_shrink = BuildArmComputeTensorShape(inputShapeShrink);</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; aclPermuteOutInfo.set_tensor_shape(acl_input_shape_shrink);</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; inputLSTM = &amp;aclPermuteOutInfo;</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; outputLSTM = <span class="keyword">const_cast&lt;</span>arm_compute::ITensorInfo*<span class="keyword">&gt;</span>(concatInputsTensorInfosPtr[i]);</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">// Batch major AND/OR 2+ LSTM batches so will use concat AND/OR permute later on.</span></div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; {</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; inputLSTM = splitterOutputsTensorInfosPtr[i];</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; outputLSTM = <span class="keyword">const_cast&lt;</span>arm_compute::ITensorInfo*<span class="keyword">&gt;</span>(concatInputsTensorInfosPtr[i]);</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; }</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; statusLSTM = arm_compute::NEQLSTMLayer::validate(inputLSTM,</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; &amp;aclInputToForgetWeightsInfo,</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; &amp;aclInputToCellWeightsInfo,</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; &amp;aclInputToOutputWeightsInfo,</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; &amp;aclRecurrentToForgetWeightsInfo,</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; &amp;aclRecurrentToCellWeightsInfo,</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; &amp;aclRecurrentToOutputWeightsInfo,</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; &amp;aclForgetGateBiasInfo,</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; &amp;aclCellBiasInfo,</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; &amp;aclOutputGateBiasInfo,</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; &amp;aclCellStateInInfo,</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; &amp;aclOutputStateInInfo,</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; &amp;aclCellStateOutInfo,</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; &amp;aclOutputStateOutInfo,</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; outputLSTM,</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; lstm_params_info);</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; }</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160;</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; <span class="comment">// Concat validate</span></div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160;</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; <span class="comment">// Expand dimensions of LSTM outputs adding one empty dimension to fit concatenate inputs.</span></div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; TensorShape shape = <a class="code" href="namespacearmnn_utils.xhtml#ab53d94ea22b51c6bcdf9584644bd67bb">GetTensorShape</a>(concatInputsTensorInfosPtr[0]-&gt;tensor_shape(), 1U);</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; TensorShape shapeExpandTimeMajor({1, shape[0], shape[1]});</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; TensorShape shapeExpandBatchMajor({shape[0], 1, shape[1]});</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; TensorInfo concatOutputTensorInfo = TensorInfo(output);</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; concatOutputTensorInfo.SetShape(timeMajorShapeOutput);</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; arm_compute::TensorInfo aclConcatOutputTensorInfo= BuildArmComputeTensorInfo(concatOutputTensorInfo);</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160;</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; <span class="keywordflow">if</span> (maxTime != 1) <span class="comment">// ACL concat does not work with only one element to concatenate.</span></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; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; maxTime; ++i)</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; {</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; <span class="keyword">auto</span> acl_shape_expand = BuildArmComputeTensorShape(shapeExpandTimeMajor);</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; concatInputsTensorInfos[i].set_tensor_shape(acl_shape_expand);</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;</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> aclAxisConcat = CalcAclAxis(numberDimensions, dimension);</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</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; statusConcat = arm_compute::NEConcatenateLayer::validate(concatInputsTensorInfosPtr,</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; &amp;aclConcatOutputTensorInfo,</div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; aclAxisConcat);</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; <span class="keywordflow">else</span></div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; {</div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; statusConcat = arm_compute::NEConcatenateLayer::validate(concatInputsTensorInfosPtr,</div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; &amp;aclOutputInfo,</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; aclAxisConcat);</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; }</div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; <span class="comment">// If only one LSTM batch, we do not concat and/or permute.</span></div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; <span class="comment">// Must ensure final output info is expanded to correct batch major dimensions.</span></div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; <span class="keywordflow">else</span></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> (!descriptor.m_TimeMajor)</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="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclInputInfo)-&gt;set_tensor_shape(</div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; BuildArmComputeTensorShape(shapeExpandBatchMajor));</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; <span class="keywordflow">else</span></div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; {</div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160; <span class="keyword">const_cast&lt;</span>arm_compute::TensorInfo*<span class="keyword">&gt;</span>(&amp;aclInputInfo)-&gt;set_tensor_shape(</div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; BuildArmComputeTensorShape(shapeExpandTimeMajor));</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160; }</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;</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; <span class="comment">// Permute validate</span></div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; <span class="keywordflow">if</span> (!descriptor.m_TimeMajor)</div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; {</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; <span class="comment">// Output now time major. Permute output back to batch major.</span></div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; <span class="keywordflow">if</span> (maxTime != 1)</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; statusPermute2 = arm_compute::NEPermute::validate(&amp;aclConcatOutputTensorInfo,</div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; &amp;aclOutputInfo,</div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; arm_compute::PermutationVector(0U, 2U, 1U));</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; }</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; <span class="keywordflow">else</span></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; statusPermute2 = arm_compute::NEPermute::validate(concatInputsTensorInfosPtr[0],</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; &amp;aclOutputInfo,</div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; arm_compute::PermutationVector(0U, 2U, 1U));</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;</div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; <span class="keyword">auto</span> okCode = arm_compute::ErrorCode::OK;</div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; <span class="keywordflow">if</span> (statusPermute1.error_code() == okCode &amp;&amp;</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; statusSplit.error_code() == okCode &amp;&amp;</div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; statusLSTM .error_code() == okCode &amp;&amp;</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; statusConcat.error_code() == okCode &amp;&amp;</div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160; statusPermute2.error_code() == okCode)</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="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::OK,</div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; <span class="stringliteral">&quot;All Unidirectional Sequence LSTM layer validate status OK.&quot;</span>);</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="keywordflow">else</span></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; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">arm_compute::Status</a>(arm_compute::ErrorCode::RUNTIME_ERROR,</div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; <span class="stringliteral">&quot;Unidirectional Sequence LSTM layer validate status failed.&quot;</span>);</div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; }</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</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#l00042">Types.hpp:42</a></div></div>
-<div class="ttc" id="namespacearmnn_utils_xhtml_ab53d94ea22b51c6bcdf9584644bd67bb"><div class="ttname"><a href="namespacearmnn_utils.xhtml#ab53d94ea22b51c6bcdf9584644bd67bb">armnnUtils::GetTensorShape</a></div><div class="ttdeci">armnn::TensorShape GetTensorShape(unsigned int numberOfBatches, unsigned int numberOfChannels, unsigned int height, unsigned int width, const armnn::DataLayout dataLayout)</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_utils_8cpp_source.xhtml#l00019">TensorUtils.cpp:19</a></div></div>
-</div><!-- fragment -->
+
</div>
</div>
<a id="a869f740e9c2fcb8642350c6e3d0b3742"></a>
@@ -26068,9 +35171,28 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_reduce_8cpp_source.xhtml#l00019">19</a> of file <a class="el" href="_reduce_8cpp_source.xhtml">Reduce.cpp</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 -->
<p class="reference">Referenced by <a class="el" href="_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>
@@ -26124,15 +35246,57 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_detection_post_process_8cpp_source.xhtml#l00049">49</a> of file <a class="el" href="_detection_post_process_8cpp_source.xhtml">DetectionPostProcess.cpp</a>.</p>
-
-<p class="reference">References <a class="el" href="_detection_post_process_8cpp_source.xhtml#l00017">GenerateRangeK()</a>, <a class="el" href="_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="_detection_post_process_8cpp_source.xhtml#l00024">TopKSort()</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 = armnn::numeric_cast&lt;unsigned int&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><!-- fragment -->
+<p class="reference">References <a class="el" href="_detection_post_process_8cpp_source.xhtml#l00017">GenerateRangeK()</a>, <a class="el" href="_detection_post_process_8cpp_source.xhtml#l00030">IntersectionOverUnion()</a>, and <a class="el" href="_detection_post_process_8cpp_source.xhtml#l00024">TopKSort()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_detection_post_process_8cpp_source.xhtml#l00140">DetectionPostProcess()</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="_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="_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="_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>
@@ -26152,12 +35316,20 @@ Variables</h2></td></tr>
</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>
-
+<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><!-- fragment -->
<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="_detection_post_process_8cpp_source.xhtml#l00102">AllocateOutputData()</a>, <a class="el" href="_arg_min_max_8cpp_source.xhtml#l00016">ArgMinMax()</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#l00352">ComputeReductionTensorShape()</a>, <a class="el" href="_tf_lite_parser_8cpp_source.xhtml#l03957">armnnTfLiteParser::ComputeWrappedIndex()</a>, <a class="el" href="_layer_8cpp_source.xhtml#l00112">OutputSlot::Connect()</a>, <a class="el" href="_converter_8cpp_source.xhtml#l00021">Converter::ConvertOperation()</a>, <a class="el" href="_onnx_parser_8cpp_source.xhtml#l00846">OnnxParserImpl::CreateNetworkFromString()</a>, <a class="el" href="_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#l00140">armnnUtils::ExpandDims()</a>, <a class="el" href="_ref_fake_quantization_float32_workload_8cpp_source.xhtml#l00017">FakeQuantization()</a>, <a class="el" href="_gather_8cpp_source.xhtml#l00014">Gather()</a>, <a class="el" href="_deserializer_8cpp_source.xhtml#l00914">IDeserializer::DeserializerImpl::GetNetworkOutputBindingInfo()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00145">OutputSlot::GetNumConnections()</a>, <a class="el" href="_subgraph_view_8cpp_source.xhtml#l00293">SubgraphView::GetNumInputSlots()</a>, <a class="el" href="_subgraph_view_8cpp_source.xhtml#l00298">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="_tensor_utils_8cpp_source.xhtml#l00196">armnnUtils::GetUnsignedAxis()</a>, <a class="el" href="_prelu_layer_8cpp_source.xhtml#l00038">PreluLayer::InferOutputShapes()</a>, <a class="el" href="_reduce_layer_8cpp_source.xhtml#l00062">ReduceLayer::InferOutputShapes()</a>, <a class="el" href="_mean_layer_8cpp_source.xhtml#l00061">MeanLayer::InferOutputShapes()</a>, <a class="el" href="_ref_layer_support_8cpp_source.xhtml#l01862">RefLayerSupport::IsMeanSupported()</a>, <a class="el" href="_tf_lite_parser_8cpp_source.xhtml#l00938">TfLiteParserImpl::LoadModel()</a>, <a class="el" href="_log_softmax_8cpp_source.xhtml#l00029">LogSoftmax()</a>, <a class="el" href="_loaded_network_8cpp_source.xhtml#l00170">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="_detection_post_process_8cpp_source.xhtml#l00049">NonMaxSuppression()</a>, <a class="el" href="_deserializer_8cpp_source.xhtml#l02522">IDeserializer::DeserializerImpl::OutputShapeOfReshape()</a>, <a class="el" href="_tf_lite_parser_8cpp_source.xhtml#l02882">TfLiteParserImpl::OutputShapeOfReshape()</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="_reduce_8cpp_source.xhtml#l00070">Reduce()</a>, <a class="el" href="_cl_context_serializer_8cpp_source.xhtml#l00049">ClContextSerializer::SaveSerializedToStream()</a>, <a class="el" href="_serializer_8cpp_source.xhtml#l02434">ISerializer::SerializerImpl::SaveSerializedToStream()</a>, <a class="el" href="_strided_slice_8cpp_source.xhtml#l00090">StridedSlice()</a>, <a class="el" href="_graph_8cpp_source.xhtml#l00446">Graph::SubstituteSubgraph()</a>, <a class="el" href="_workload_data_8cpp_source.xhtml#l02373">MeanQueueDescriptor::Validate()</a>, and <a class="el" href="_working_mem_handle_8cpp_source.xhtml#l00018">WorkingMemHandle::WorkingMemHandle()</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>
@@ -26177,10 +35349,26 @@ Variables</h2></td></tr>
</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 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><!-- fragment -->
+<p class="reference">References <a class="el" href="_numeric_cast_8hpp_source.xhtml#l00025">ARMNN_NUMERIC_CAST_CHECK</a>.</p>
+
</div>
</div>
<a id="aec2a3221ba307e3f9f8d6b8cc69774fa"></a>
@@ -26200,10 +35388,26 @@ Variables</h2></td></tr>
</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 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><!-- fragment -->
+<p class="reference">References <a class="el" href="_numeric_cast_8hpp_source.xhtml#l00025">ARMNN_NUMERIC_CAST_CHECK</a>.</p>
+
</div>
</div>
<a id="a320f9416a8c5eda0210f1d0ec71dbe53"></a>
@@ -26223,10 +35427,26 @@ Variables</h2></td></tr>
</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 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; <span class="keyword">static_cast&lt;</span>Source<span class="keyword">&gt;</span>(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; <span class="keyword">static_cast&lt;</span>Source<span class="keyword">&gt;</span>(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><!-- fragment -->
+<p class="reference">References <a class="el" href="_numeric_cast_8hpp_source.xhtml#l00025">ARMNN_NUMERIC_CAST_CHECK</a>.</p>
+
</div>
</div>
<a id="a3afc74a78c7a7590fd1c35b0d5eb69db"></a>
@@ -26246,10 +35466,28 @@ Variables</h2></td></tr>
</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 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><!-- fragment -->
+<p class="reference">References <a class="el" href="_numeric_cast_8hpp_source.xhtml#l00025">ARMNN_NUMERIC_CAST_CHECK</a>.</p>
+
</div>
</div>
<a id="aa4039ab8f10849c09d08485cf6f113de"></a>
@@ -26269,10 +35507,20 @@ Variables</h2></td></tr>
</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 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><!-- fragment -->
+<p class="reference">References <a class="el" href="_numeric_cast_8hpp_source.xhtml#l00025">ARMNN_NUMERIC_CAST_CHECK</a>.</p>
+
</div>
</div>
<a id="aab0d3e691c3a26cc5c4aa5c6f12eaea0"></a>
@@ -26292,10 +35540,20 @@ Variables</h2></td></tr>
</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 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> (<span class="keyword">static_cast&lt;</span>Dest<span class="keyword">&gt;</span>(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><!-- fragment -->
+<p class="reference">References <a class="el" href="_numeric_cast_8hpp_source.xhtml#l00025">ARMNN_NUMERIC_CAST_CHECK</a>.</p>
+
</div>
</div>
<a id="a4348c6348d681f6d0c7cc6d229435396"></a>
@@ -26315,10 +35573,25 @@ Variables</h2></td></tr>
</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 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><!-- fragment -->
+<p class="reference">References <a class="el" href="_numeric_cast_8hpp_source.xhtml#l00025">ARMNN_NUMERIC_CAST_CHECK</a>.</p>
+
</div>
</div>
<a id="a1b5cfb3269fecb1dda8d0aee3c8212e6"></a>
@@ -26338,10 +35611,25 @@ Variables</h2></td></tr>
</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 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; <span class="keyword">static_cast&lt;</span>Source<span class="keyword">&gt;</span>(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><!-- fragment -->
+<p class="reference">References <a class="el" href="_numeric_cast_8hpp_source.xhtml#l00025">ARMNN_NUMERIC_CAST_CHECK</a>.</p>
+
</div>
</div>
<a id="ac70a495c61526a0500b33b23db86ca27"></a>
@@ -26403,19 +35691,28 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_batch_to_space_nd_8cpp_source.xhtml#l00019">19</a> of file <a class="el" href="_batch_to_space_nd_8cpp_source.xhtml">BatchToSpaceNd.cpp</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><!-- fragment -->
<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>, and <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00025">DataLayoutIndexed::GetWidthIndex()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_batch_to_space_nd_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>
+<a id="aa6d7532e14af97577c054f96d0cf23b3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa6d7532e14af97577c054f96d0cf23b3">&#9670;&nbsp;</a></span>operator&lt;&lt;() <span class="overload">[1/9]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -26432,8 +35729,8 @@ Variables</h2></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>
+ <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>
@@ -26448,18 +35745,41 @@ Variables</h2></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="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00308">308</a> of file <a class="el" href="_types_utils_8hpp_source.xhtml">TypesUtils.hpp</a>.</p>
+<div class="fragment"><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; os &lt;&lt; <span class="stringliteral">&quot;[&quot;</span>;</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="keywordflow">if</span> (shape.<a class="code" href="classarmnn_1_1_tensor_shape.xhtml#a5a212540c00931bd2a4b4041beda33ae">GetDimensionality</a>() != Dimensionality::NotSpecified)</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="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="l00314"></a><span class="lineno"> 314</span>&#160; {</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <span class="keywordflow">if</span> (i != 0)</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; os &lt;&lt; <span class="stringliteral">&quot;,&quot;</span>;</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; <span class="keywordflow">if</span> (shape.<a class="code" href="classarmnn_1_1_tensor_shape.xhtml#a3919600d4aa8d5cd801a0e0740f62308">GetDimensionSpecificity</a>(i))</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; os &lt;&lt; shape[i];</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; }</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keywordflow">else</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; os &lt;&lt; <span class="stringliteral">&quot;?&quot;</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; }</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; <span class="keywordflow">else</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; os &lt;&lt; <span class="stringliteral">&quot;Dimensionality Not Specified&quot;</span>;</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; os &lt;&lt; <span class="stringliteral">&quot;]&quot;</span>;</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="keywordflow">return</span> os;</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160;}</div>
+</div><!-- fragment -->
+<p class="reference">References <a class="el" href="_tensor_8hpp_source.xhtml#l00092">TensorShape::GetDimensionality()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00211">TensorShape::GetDimensionSpecificity()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00174">TensorShape::GetNumDimensions()</a>, and <a class="el" href="namespacearmnn.xhtml#a8e1f31031ad31cd8cc22d7c9daa32681a4b7d504abac49ba24b4df86c129d3cbc">NotSpecified</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>
+<a id="afc46634e26857d037ee80bb5a74ef28a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afc46634e26857d037ee80bb5a74ef28a">&#9670;&nbsp;</a></span>operator&lt;&lt;() <span class="overload">[2/9]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -26476,8 +35796,8 @@ Variables</h2></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>
+ <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>
@@ -26492,18 +35812,16 @@ Variables</h2></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>
+<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="a345acf4e0dc087eee3f9688029ee6328"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a345acf4e0dc087eee3f9688029ee6328">&#9670;&nbsp;</a></span>operator<<() <span class="overload">[3/9]</span></h2>
+<a id="a14de37f4c695ac066f999aa75b7cb136"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a14de37f4c695ac066f999aa75b7cb136">&#9670;&nbsp;</a></span>operator&lt;&lt;() <span class="overload">[3/9]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -26520,8 +35838,8 @@ Variables</h2></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>
+ <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>
@@ -26536,17 +35854,19 @@ Variables</h2></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>
+<p class="definition">Definition at line <a class="el" href="_i_backend_internal_8hpp_source.xhtml#l00070">70</a> of file <a class="el" href="_i_backend_internal_8hpp_source.xhtml">IBackendInternal.hpp</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; 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="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> os;</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;}</div>
</div><!-- fragment -->
+<p class="reference">References <a class="el" href="_i_backend_internal_8hpp_source.xhtml#l00036">BackendVersion::m_Major</a>, and <a class="el" href="_i_backend_internal_8hpp_source.xhtml#l00037">BackendVersion::m_Minor</a>.</p>
+
</div>
</div>
-<a id="a14de37f4c695ac066f999aa75b7cb136"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a14de37f4c695ac066f999aa75b7cb136">&#9670;&nbsp;</a></span>operator<<() <span class="overload">[4/9]</span></h2>
+<a id="aa1166f0056ce60553e825ae3cee4d5f7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa1166f0056ce60553e825ae3cee4d5f7">&#9670;&nbsp;</a></span>operator&lt;&lt;() <span class="overload">[4/9]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -26563,8 +35883,8 @@ Variables</h2></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>
+ <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>
@@ -26579,14 +35899,18 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="_i_backend_internal_8hpp_source.xhtml#l00070">70</a> of file <a class="el" href="_i_backend_internal_8hpp_source.xhtml">IBackendInternal.hpp</a>.</p>
+<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>
+<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 -->
+<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>
-<p class="reference">References <a class="el" href="_i_backend_internal_8hpp_source.xhtml#l00036">BackendVersion::m_Major</a>, and <a class="el" href="_i_backend_internal_8hpp_source.xhtml#l00037">BackendVersion::m_Minor</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; 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="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> os;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;}</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>
+<a id="a345acf4e0dc087eee3f9688029ee6328"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a345acf4e0dc087eee3f9688029ee6328">&#9670;&nbsp;</a></span>operator&lt;&lt;() <span class="overload">[5/9]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -26603,8 +35927,8 @@ Variables</h2></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>
+ <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>
@@ -26619,14 +35943,20 @@ Variables</h2></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>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>
+<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><!-- fragment -->
+<p class="reference">References <a class="el" href="_backend_id_8hpp_source.xhtml#l00034">GetComputeDeviceAsCString()</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>
+<a id="a127a59fdf5e6d2fa74f87f9265de958b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a127a59fdf5e6d2fa74f87f9265de958b">&#9670;&nbsp;</a></span>operator&lt;&lt;() <span class="overload">[6/9]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -26643,8 +35973,8 @@ Variables</h2></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>
+ <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>
@@ -26659,15 +35989,29 @@ Variables</h2></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 -->
+<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>
+<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><!-- fragment -->
+<p class="reference">References <a class="el" href="_backend_id_8hpp_source.xhtml#l00034">GetComputeDeviceAsCString()</a>.</p>
+
</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>
+<a id="a5b0313cb554380d6e4dfb24c31f9e605"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5b0313cb554380d6e4dfb24c31f9e605">&#9670;&nbsp;</a></span>operator&lt;&lt;() <span class="overload">[7/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>
@@ -26678,8 +36022,8 @@ Variables</h2></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>
+ <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>
@@ -26687,20 +36031,33 @@ Variables</h2></td></tr>
<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#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 -->
+<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>
+<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><!-- fragment -->
+<p class="reference">References <a class="el" href="_backend_id_8hpp_source.xhtml#l00034">GetComputeDeviceAsCString()</a>.</p>
+
</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>
+<a id="a62a9e8c87b9b9f504726746ba4a000a6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a62a9e8c87b9b9f504726746ba4a000a6">&#9670;&nbsp;</a></span>operator&lt;&lt;() <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>
@@ -26711,8 +36068,8 @@ Variables</h2></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>
+ <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>
@@ -26720,22 +36077,20 @@ Variables</h2></td></tr>
<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#l00301">301</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#l00021">GetStatusAsCString()</a>.</p>
-<div class="fragment"><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; os &lt;&lt; <a class="code" href="namespacearmnn.xhtml#a19a90c41ca2f46ab29918fef1a6ad72e">GetStatusAsCString</a>(stat);</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keywordflow">return</span> os;</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</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#l00021">TypesUtils.hpp:21</a></div></div>
+<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="aa6d7532e14af97577c054f96d0cf23b3"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aa6d7532e14af97577c054f96d0cf23b3">&#9670;&nbsp;</a></span>operator<<() <span class="overload">[9/9]</span></h2>
+<a id="aaa5b68f3f5bb73b1d3c85d895547a372"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aaa5b68f3f5bb73b1d3c85d895547a372">&#9670;&nbsp;</a></span>operator&lt;&lt;() <span class="overload">[9/9]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -26752,8 +36107,8 @@ Variables</h2></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>
+ <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>
@@ -26768,17 +36123,18 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00308">308</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_8hpp_source.xhtml#l00092">TensorShape::GetDimensionality()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00211">TensorShape::GetDimensionSpecificity()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00174">TensorShape::GetNumDimensions()</a>, <a class="el" href="namespacearmnn.xhtml#a8e1f31031ad31cd8cc22d7c9daa32681a4b7d504abac49ba24b4df86c129d3cbc">NotSpecified</a>, and <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4aca39930e22f40d10155a57dba32240bb">Quantize</a>.</p>
-<div class="fragment"><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; os &lt;&lt; <span class="stringliteral">&quot;[&quot;</span>;</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="keywordflow">if</span> (shape.<a class="code" href="classarmnn_1_1_tensor_shape.xhtml#a5a212540c00931bd2a4b4041beda33ae">GetDimensionality</a>() != Dimensionality::NotSpecified)</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="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="l00314"></a><span class="lineno"> 314</span>&#160; {</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <span class="keywordflow">if</span> (i != 0)</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; os &lt;&lt; <span class="stringliteral">&quot;,&quot;</span>;</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; <span class="keywordflow">if</span> (shape.<a class="code" href="classarmnn_1_1_tensor_shape.xhtml#a3919600d4aa8d5cd801a0e0740f62308">GetDimensionSpecificity</a>(i))</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; os &lt;&lt; shape[i];</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; }</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keywordflow">else</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; os &lt;&lt; <span class="stringliteral">&quot;?&quot;</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; }</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; <span class="keywordflow">else</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; os &lt;&lt; <span class="stringliteral">&quot;Dimensionality Not Specified&quot;</span>;</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; os &lt;&lt; <span class="stringliteral">&quot;]&quot;</span>;</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="keywordflow">return</span> os;</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_tensor_shape_xhtml_a5a212540c00931bd2a4b4041beda33ae"><div class="ttname"><a href="classarmnn_1_1_tensor_shape.xhtml#a5a212540c00931bd2a4b4041beda33ae">armnn::TensorShape::GetDimensionality</a></div><div class="ttdeci">Dimensionality GetDimensionality() const</div><div class="ttdoc">Function that returns the tensor type. </div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00092">Tensor.hpp:92</a></div></div>
-<div class="ttc" id="classarmnn_1_1_tensor_shape_xhtml_a3919600d4aa8d5cd801a0e0740f62308"><div class="ttname"><a href="classarmnn_1_1_tensor_shape.xhtml#a3919600d4aa8d5cd801a0e0740f62308">armnn::TensorShape::GetDimensionSpecificity</a></div><div class="ttdeci">bool GetDimensionSpecificity(unsigned int i) const</div><div class="ttdoc">Gets information about if the dimension size has been specified or not. </div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8cpp_source.xhtml#l00211">Tensor.cpp:211</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>
+<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00301">301</a> of file <a class="el" href="_types_utils_8hpp_source.xhtml">TypesUtils.hpp</a>.</p>
+<div class="fragment"><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; os &lt;&lt; <a class="code" href="namespacearmnn.xhtml#a19a90c41ca2f46ab29918fef1a6ad72e">GetStatusAsCString</a>(stat);</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keywordflow">return</span> os;</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160;}</div>
</div><!-- fragment -->
+<p class="reference">References <a class="el" href="_types_utils_8hpp_source.xhtml#l00021">GetStatusAsCString()</a>.</p>
+
</div>
</div>
-<a id="a82e98ef05fd67036d1195ba17174d685"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a82e98ef05fd67036d1195ba17174d685">&#9670;&nbsp;</a></span>Optimize() <span class="overload">[1/2]</span></h2>
+<a id="a4c79e02d43c1fac7d2f073663ef9ca5d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4c79e02d43c1fac7d2f073663ef9ca5d">&#9670;&nbsp;</a></span>Optimize() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -26786,8 +36142,8 @@ Variables</h2></td></tr>
<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>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_graph.xhtml">Graph</a> &amp;&#160;</td>
+ <td class="paramname"><em>inGraph</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
@@ -26805,12 +36161,12 @@ Variables</h2></td></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>
+ <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_optional.xhtml">Optional</a>&lt; std::vector&lt; std::string &gt; &amp;&gt;&#160;</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>
@@ -26824,28 +36180,219 @@ Variables</h2></td></tr>
<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">inGraph</td><td><a class="el" href="classarmnn_1_1_graph.xhtml">Graph</a> 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>
+ <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#a23">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#l01773">1773</a> of file <a class="el" href="_network_8cpp_source.xhtml">Network.cpp</a>.</p>
+<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>
-<p class="reference">References <a class="el" href="_backend_options_8hpp_source.xhtml#l00119">BackendOptions::Var::AsBool()</a>, <a class="el" href="_network_8cpp_source.xhtml#l01773">IOptimizedNetwork::Optimize</a>, <a class="el" href="_backend_options_8hpp_source.xhtml#l00297">ParseOptions()</a>, and <a class="el" href="_i_network_8hpp_source.xhtml#l00756">INetwork::pNetworkImpl</a>.</p>
-
-<p class="reference">Referenced by <a class="el" href="_armnn_driver_impl_8cpp_source.xhtml#l00099">ArmnnDriverImpl::PrepareArmnnModel()</a>, <a class="el" href="_armnn_driver_impl_8cpp_source.xhtml#l00338">ArmnnDriverImpl::PrepareArmnnModelFromCache()</a>, <a class="el" href="_parser_prototxt_fixture_8hpp_source.xhtml#l00122">ParserPrototxtFixture&lt; TParser &gt;::Setup()</a>, <a class="el" href="_parser_prototxt_fixture_8hpp_source.xhtml#l00174">ParserPrototxtFixture&lt; TParser &gt;::SetupOptimizedNetwork()</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="l01778"></a><span class="lineno"> 1778</span>&#160;{</div><div class="line"><a name="l01779"></a><span class="lineno"> 1779</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a82e98ef05fd67036d1195ba17174d685">Optimize</a>(inNetwork.pNetworkImpl-&gt;GetGraph(),</div><div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>&#160; backendPreferences,</div><div class="line"><a name="l01781"></a><span class="lineno"> 1781</span>&#160; deviceSpec,</div><div class="line"><a name="l01782"></a><span class="lineno"> 1782</span>&#160; options,</div><div class="line"><a name="l01783"></a><span class="lineno"> 1783</span>&#160; messages);</div><div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a82e98ef05fd67036d1195ba17174d685"><div class="ttname"><a href="namespacearmnn.xhtml#a82e98ef05fd67036d1195ba17174d685">armnn::Optimize</a></div><div class="ttdeci">IOptimizedNetworkPtr Optimize(const INetwork &amp;network, const std::vector&lt; BackendId &gt; &amp;backendPreferences, const IDeviceSpec &amp;deviceSpec, const OptimizerOptions &amp;options=OptimizerOptions(), Optional&lt; std::vector&lt; std::string &gt; &amp;&gt; messages=EmptyOptional())</div><div class="ttdoc">Create an optimized version of the network. </div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.xhtml#l01773">Network.cpp:1773</a></div></div>
-</div><!-- fragment -->
-</div>
-</div>
-<a id="a25ff4c2830094e33a67f0963a3e4b24c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a25ff4c2830094e33a67f0963a3e4b24c">&#9670;&nbsp;</a></span>Optimize() <span class="overload">[2/2]</span></h2>
+<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.xhtml#l01572">1572</a> of file <a class="el" href="_network_8cpp_source.xhtml">Network.cpp</a>.</p>
+<div class="fragment"><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; <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(debug) &lt;&lt; options.ToString();</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; <span class="comment">// Enable profiling</span></div>
+<div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>&#160; <span class="keyword">auto</span> profiler = inGraph.GetProfiler();</div>
+<div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>&#160; ProfilerManager::GetInstance().RegisterProfiler(profiler.get());</div>
+<div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>&#160; profiler-&gt;EnableProfiling(options.m_ProfilingEnabled);</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; <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="l01586"></a><span class="lineno"> 1586</span>&#160; <span class="keywordflow">if</span> (backendPreferences.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">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Invoked Optimize with no backends specified&quot;</span>);</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; <span class="keywordflow">if</span> (options.m_ReduceFp32ToBf16)</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="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;BFloat16 optimization is currently ignored. In order to use Bf16 optimization &quot;</span></div>
+<div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>&#160; <span class="stringliteral">&quot;Please use the FastMathEnabled backend option for CpuAcc or GpuAcc.&quot;</span>);</div>
+<div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>&#160; }</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">if</span> (options.m_ReduceFp32ToFp16 &amp;&amp; options.m_ReduceFp32ToBf16)</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; <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="l01600"></a><span class="lineno"> 1600</span>&#160; }</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="comment">// Ensure TensorInfo is set on all output slots of ConstantLayers in the graph</span></div>
+<div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>&#160; inGraph.VerifyConstantLayerSetTensorInfo();</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; std::unique_ptr&lt;Graph&gt; graph = std::make_unique&lt;Graph&gt;(inGraph);</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="comment">// We need to pass on the information about whether import and export is enabled to the LoadNetwork phase.</span></div>
+<div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>&#160; <span class="comment">// The mechanism to do that is to add model options to the optimized network.</span></div>
+<div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>&#160; <a class="code" href="structarmnn_1_1_backend_options.xhtml">armnn::BackendOptions</a> importExport(<span class="stringliteral">&quot;Global&quot;</span>,</div>
+<div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>&#160; {{<span class="stringliteral">&quot;ImportEnabled&quot;</span>, options.m_ImportEnabled},</div>
+<div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>&#160; {<span class="stringliteral">&quot;ExportEnabled&quot;</span>, options.m_ExportEnabled}});</div>
+<div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>&#160; <a class="code" href="namespacearmnn.xhtml#a5b6893cda5b69359a4244c06054da18f">ModelOptions</a> optimizedOptions(options.m_ModelOptions);</div>
+<div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>&#160; optimizedOptions.push_back(importExport);</div>
+<div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>&#160; </div>
+<div class="line"><a name="l01615"></a><span class="lineno"> 1615</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), optimizedOptions),</div>
+<div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>&#160; &amp;IOptimizedNetwork::Destroy);</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; IOptimizedNetwork* optNetObjPtr = optNet.get();</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; <span class="comment">// Get the optimized graph</span></div>
+<div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>&#160; Graph&amp; optGraph = optNetObjPtr-&gt;pOptimizedNetworkImpl-&gt;GetGraph();</div>
+<div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>&#160; </div>
+<div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>&#160; <span class="keywordflow">if</span>(options.m_shapeInferenceMethod == ShapeInferenceMethod::InferAndValidate)</div>
+<div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>&#160; {</div>
+<div class="line"><a name="l01625"></a><span class="lineno"> 1625</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="l01626"></a><span class="lineno"> 1626</span>&#160; optGraph.InferTensorInfos();</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; </div>
+<div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>&#160; <span class="comment">// Perform AddBroadcastReshapeLayer optimisation</span></div>
+<div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>&#160; <span class="keyword">using namespace </span>optimizations;</div>
+<div class="line"><a name="l01631"></a><span class="lineno"> 1631</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="l01632"></a><span class="lineno"> 1632</span>&#160; </div>
+<div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>&#160; <span class="keywordflow">if</span>(options.m_shapeInferenceMethod == ShapeInferenceMethod::ValidateOnly)</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">// Validate the tensor infos for all output slots. Throws an exception on failure</span></div>
+<div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>&#160; optGraph.InferTensorInfos();</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; </div>
+<div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>&#160; </div>
+<div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>&#160; <span class="comment">// Group Constant Layer optimizations together where possible.</span></div>
+<div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>&#160; <span class="comment">// This is important as:</span></div>
+<div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>&#160; <span class="comment">// FusePermuteIntoConstantLayer must happen before FoldPadIntoDepthwiseConvolution2d and</span></div>
+<div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>&#160; <span class="comment">// FuseBatchNormIntoDepthwiseConvolution2D.</span></div>
+<div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>&#160; <span class="comment">// ConvertConstDequantisationLayersToConstLayers must happen before FoldPadIntoConvolution2d</span></div>
+<div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>&#160; Optimizer::Pass(optGraph, <a class="code" href="namespacearmnn.xhtml#aa7427025a851113a492de0b68b23d22a">MakeOptimizations</a>(<a class="code" href="namespacearmnn_1_1optimizations.xhtml#ad668074369437a111649f51296ff8959">FusePermuteIntoConstLayer</a>(),</div>
+<div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a4dfbdc8cc90b67e74eccd146d977ff66">ConvertConstDequantisationLayersToConstLayers</a>()));</div>
+<div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>&#160; <span class="comment">// Perform optimisation passes</span></div>
+<div class="line"><a name="l01648"></a><span class="lineno"> 1648</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="l01649"></a><span class="lineno"> 1649</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#aba7b0ca6192b8b58ecd517a82b4f378e">SquashEqualTransposeSiblings</a>(),</div>
+<div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a29f8d97b2d74f99c88298881cd1d825b">SquashEqualReshapeSiblings</a>(),</div>
+<div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#aa31127c77d2117f78d43ca2958dcae19">OptimizeInversePermutes</a>(),</div>
+<div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a2f9d1a13be2ac1c4213729a0ef181fc0">OptimizeInverseTransposes</a>(),</div>
+<div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#aafc70d5af99400ff5ea7991825658b2f">MovePermuteUp</a>(),</div>
+<div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a5918588fa316cf4c23f1cf02c81ee706">MoveTransposeUp</a>(),</div>
+<div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#ae0b1382e3af141896a46531c50e8863f">PermuteAsReshape</a>(),</div>
+<div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#ad1aaeee71293f34d9f65d2dd2792830d">TransposeAsReshape</a>(),</div>
+<div class="line"><a name="l01657"></a><span class="lineno"> 1657</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a8341ca3512ebafb19d60eba44d40d9e4">OptimizeConsecutiveReshapes</a>(),</div>
+<div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a8b394ff60ed829a91f07deac476f3db2">FoldPadIntoConvolution2d</a>(),</div>
+<div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a227e9ab5e488aa90ba462790ba0e5aec">FoldPadIntoDepthwiseConvolution2d</a>(),</div>
+<div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a279d0a7c56966cea334303d48a874964">FoldPadIntoPooling2d</a>(),</div>
+<div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a17d1279f5f8e3b92c328b1ed3b6fd549">PermuteAndBatchToSpaceAsDepthToSpace</a>(),</div>
+<div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a98f54d4391347d517c7a7869e7707203">TransposeAndBatchToSpaceAsDepthToSpace</a>(),</div>
+<div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#aa52c06792e18dc13030e82476f706f9e">FuseBatchNormIntoConvolution2DFloat32</a>(),</div>
+<div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a8a81178ddcebb93ec0c35b6e6284273c">FuseBatchNormIntoConvolution2DFloat16</a>(),</div>
+<div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a56e54a818166a2f4b2c1a7f76a3629ff">FuseBatchNormIntoDepthwiseConvolution2DFloat32</a>(),</div>
+<div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#ab40bb51feca46649eb9d00522bfe51f6">FuseBatchNormIntoDepthwiseConvolution2DFloat16</a>()));</div>
+<div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>&#160; </div>
+<div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>&#160; <span class="comment">// If Fp32 to Fp16 optimization is set convert Fp32 network to Fp16</span></div>
+<div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>&#160; <span class="keywordflow">if</span> (options.m_ReduceFp32ToFp16)</div>
+<div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>&#160; {</div>
+<div class="line"><a name="l01671"></a><span class="lineno"> 1671</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="l01672"></a><span class="lineno"> 1672</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="l01673"></a><span class="lineno"> 1673</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="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; <span class="comment">// Initialize backend settings</span></div>
+<div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>&#160; BackendSettings backendSettings(backendPreferences, deviceSpec);</div>
+<div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>&#160; <span class="keywordflow">if</span> (backendSettings.GetAvailablePreferredBackends().empty())</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; std::stringstream failureMsg;</div>
+<div class="line"><a name="l01681"></a><span class="lineno"> 1681</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="l01682"></a><span class="lineno"> 1682</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="l01683"></a><span class="lineno"> 1683</span>&#160; <a class="code" href="namespacearmnn.xhtml#a3cf1cee98e0ed8b54263ec7279f6ec69">ReportError</a>(failureMsg.str(), messages);</div>
+<div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(failureMsg.str());</div>
+<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; </div>
+<div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>&#160; <span class="comment">// Create a map to temporarily hold initialized backend objects</span></div>
+<div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>&#160; TensorHandleFactoryRegistry tensorHandleFactoryRegistry;</div>
+<div class="line"><a name="l01689"></a><span class="lineno"> 1689</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="l01690"></a><span class="lineno"> 1690</span>&#160; </div>
+<div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>&#160; <span class="comment">// Assign an available backend to each layer</span></div>
+<div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>&#160; Graph::Iterator firstLayer = optGraph.begin();</div>
+<div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>&#160; Graph::Iterator lastLayer = optGraph.end();</div>
+<div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>&#160; OptimizationResult assignBackendsResult = <a class="code" href="namespacearmnn.xhtml#a0ea4ff80d0075ff847e96dc12e734368">AssignBackends</a>(optNetObjPtr-&gt;pOptimizedNetworkImpl.get(),</div>
+<div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>&#160; backendSettings,</div>
+<div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>&#160; firstLayer,</div>
+<div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>&#160; lastLayer,</div>
+<div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>&#160; messages);</div>
+<div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>&#160; <span class="keywordflow">if</span> (assignBackendsResult.m_Error)</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">// Failed to assign a backend to each layer</span></div>
+<div class="line"><a name="l01702"></a><span class="lineno"> 1702</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="l01703"></a><span class="lineno"> 1703</span>&#160; }</div>
+<div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>&#160; </div>
+<div class="line"><a name="l01705"></a><span class="lineno"> 1705</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="l01706"></a><span class="lineno"> 1706</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#ae1509d340bc981b11101c3316ee8afd6">OptimizeInverseConversionsFp32</a>()));</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; <span class="comment">// Apply the backend-specific optimizations</span></div>
+<div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>&#160; OptimizationResult backendOptimizationResult = <a class="code" href="namespacearmnn.xhtml#ac39f2b15d34d3e2fc74d586fc3e26231">ApplyBackendOptimizations</a>(optNetObjPtr-&gt;pOptimizedNetworkImpl.get(),</div>
+<div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>&#160; backendSettings,</div>
+<div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>&#160; backends,</div>
+<div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>&#160; options.m_ModelOptions,</div>
+<div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>&#160; messages);</div>
+<div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>&#160; <span class="keywordflow">if</span> (backendOptimizationResult.m_Error)</div>
+<div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>&#160; {</div>
+<div class="line"><a name="l01716"></a><span class="lineno"> 1716</span>&#160; <span class="comment">// Failed to apply the backend-specific optimizations</span></div>
+<div class="line"><a name="l01717"></a><span class="lineno"> 1717</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="l01718"></a><span class="lineno"> 1718</span>&#160; }</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; <span class="comment">// Convert constants</span></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; <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="l01723"></a><span class="lineno"> 1723</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="l01724"></a><span class="lineno"> 1724</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="l01725"></a><span class="lineno"> 1725</span>&#160; }</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="comment">// This must occur after all topological changes to the graph and any redirection of variables</span></div>
+<div class="line"><a name="l01728"></a><span class="lineno"> 1728</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="l01729"></a><span class="lineno"> 1729</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="l01730"></a><span class="lineno"> 1730</span>&#160; <span class="keywordflow">if</span> (options.m_Debug &amp;&amp; !options.m_DebugToFile)</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; 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="l01733"></a><span class="lineno"> 1733</span>&#160; }</div>
+<div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (options.m_DebugToFile)</div>
+<div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>&#160; {</div>
+<div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>&#160; <span class="comment">// Setup the output file path</span></div>
+<div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>&#160; <span class="keywordflow">try</span></div>
+<div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>&#160; {</div>
+<div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>&#160; <span class="keyword">auto</span> result = <a class="code" href="namespacearmnn_utils_1_1_filesystem.xhtml#a0477efb2c6f5b41fbfe937fef6db312d">armnnUtils::Filesystem::CreateDirectory</a>(<span class="stringliteral">&quot;/ArmNNIntermediateLayerOutputs&quot;</span>);</div>
+<div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>&#160; <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(info) &lt;&lt; <span class="stringliteral">&quot;Intermediate tensors will be written to: &quot;</span> &lt;&lt; result;</div>
+<div class="line"><a name="l01741"></a><span class="lineno"> 1741</span>&#160; Optimizer::Pass(optGraph, <a class="code" href="namespacearmnn.xhtml#aa7427025a851113a492de0b68b23d22a">MakeOptimizations</a>(<a class="code" href="namespacearmnn_1_1optimizations.xhtml#a9c0a3a9a388a01bc21e20a16e70055f0">InsertDebugToFileLayer</a>()));</div>
+<div class="line"><a name="l01742"></a><span class="lineno"> 1742</span>&#160; }</div>
+<div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>&#160; <span class="keywordflow">catch</span> (<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_runtime_exception.xhtml">armnn::RuntimeException</a>&amp; e)</div>
+<div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>&#160; {</div>
+<div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>&#160; <span class="comment">// If we cannot create the output directory then we&#39;ll issue a warning and continue.</span></div>
+<div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>&#160; <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(warning) &lt;&lt; <span class="stringliteral">&quot;Unable to print intermediate layer outputs : &quot;</span> &lt;&lt; e.<a class="code" href="classarmnn_1_1_exception.xhtml#abf843cbb29dec939d0731e491bab6f70">what</a>();</div>
+<div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>&#160; }</div>
+<div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>&#160; }</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; <span class="comment">// Calculate the compatibility strategies for tensor handles</span></div>
+<div class="line"><a name="l01751"></a><span class="lineno"> 1751</span>&#160; OptimizationResult strategyResult = <a class="code" href="namespacearmnn.xhtml#acbf7c9a630f03ece800f807d946239ab">SelectTensorHandleStrategy</a>(optGraph,</div>
+<div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>&#160; backends,</div>
+<div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>&#160; tensorHandleFactoryRegistry,</div>
+<div class="line"><a name="l01754"></a><span class="lineno"> 1754</span>&#160; options.m_ImportEnabled,</div>
+<div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>&#160; options.m_ExportEnabled,</div>
+<div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>&#160; messages);</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; <span class="keywordflow">if</span> (strategyResult.m_Error)</div>
+<div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>&#160; {</div>
+<div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>&#160; <span class="comment">// Failed to apply the backend-specific optimizations</span></div>
+<div class="line"><a name="l01761"></a><span class="lineno"> 1761</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="l01762"></a><span class="lineno"> 1762</span>&#160; }</div>
+<div class="line"><a name="l01763"></a><span class="lineno"> 1763</span>&#160; </div>
+<div class="line"><a name="l01764"></a><span class="lineno"> 1764</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="l01765"></a><span class="lineno"> 1765</span>&#160; {</div>
+<div class="line"><a name="l01766"></a><span class="lineno"> 1766</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="l01767"></a><span class="lineno"> 1767</span>&#160; optGraph.AddCompatibilityLayers(backends, tensorHandleFactoryRegistry);</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; </div>
+<div class="line"><a name="l01770"></a><span class="lineno"> 1770</span>&#160; <span class="keywordflow">return</span> optNet;</div>
+<div class="line"><a name="l01771"></a><span class="lineno"> 1771</span>&#160;}</div>
+</div><!-- fragment -->
+<p class="reference">References <a class="el" href="_graph_8cpp_source.xhtml#l00303">Graph::AddCompatibilityLayers()</a>, <a class="el" href="_network_8cpp_source.xhtml#l01040">ApplyBackendOptimizations()</a>, <a class="el" href="_logging_8hpp_source.xhtml#l00212">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#l00898">AssignBackends()</a>, <a class="el" href="_graph_8hpp_source.xhtml#l00169">Graph::begin()</a>, <a class="el" href="_filesystem_8cpp_source.xhtml#l00047">armnnUtils::Filesystem::CreateDirectory()</a>, <a class="el" href="_network_8cpp_source.xhtml#l01021">CreateSupportedBackends()</a>, <a class="el" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407aad42f6697b035b7580e4fef93be20b4d">debug</a>, <a class="el" href="_network_8cpp_source.xhtml#l00476">IOptimizedNetwork::Destroy()</a>, <a class="el" href="_graph_8hpp_source.xhtml#l00171">Graph::end()</a>, <a class="el" href="_backend_settings_8hpp_source.xhtml#l00067">BackendSettings::GetAvailablePreferredBackends()</a>, <a class="el" href="_profiling_8cpp_source.xhtml#l00593">ProfilerManager::GetInstance()</a>, <a class="el" href="_graph_8cpp_source.xhtml#l00656">Graph::GetProfiler()</a>, <a class="el" href="namespacearmnn.xhtml#adf57837d00e8352d9b5cc5ab1fb5fee9a5dd7c525cb1500a2181fd4cc079d7acb">InferAndValidate</a>, <a class="el" href="_graph_8cpp_source.xhtml#l00568">Graph::InferTensorInfos()</a>, <a class="el" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>, <a class="el" href="_i_network_8hpp_source.xhtml#l00222">OptimizerOptions::m_Debug</a>, <a class="el" href="_i_network_8hpp_source.xhtml#l00225">OptimizerOptions::m_DebugToFile</a>, <a class="el" href="_network_8hpp_source.xhtml#l00243">OptimizationResult::m_Error</a>, <a class="el" href="_i_network_8hpp_source.xhtml#l00244">OptimizerOptions::m_ExportEnabled</a>, <a class="el" href="_i_network_8hpp_source.xhtml#l00235">OptimizerOptions::m_ImportEnabled</a>, <a class="el" href="_i_network_8hpp_source.xhtml#l00238">OptimizerOptions::m_ModelOptions</a>, <a class="el" href="_i_network_8hpp_source.xhtml#l00241">OptimizerOptions::m_ProfilingEnabled</a>, <a class="el" href="_i_network_8hpp_source.xhtml#l00229">OptimizerOptions::m_ReduceFp32ToBf16</a>, <a class="el" href="_i_network_8hpp_source.xhtml#l00219">OptimizerOptions::m_ReduceFp32ToFp16</a>, <a class="el" href="_i_network_8hpp_source.xhtml#l00232">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#l00814">IOptimizedNetwork::pOptimizedNetworkImpl</a>, <a class="el" href="_profiling_8cpp_source.xhtml#l00600">ProfilerManager::RegisterProfiler()</a>, <a class="el" href="_network_8cpp_source.xhtml#l00532">ReportError()</a>, <a class="el" href="_network_8cpp_source.xhtml#l01502">SelectTensorHandleStrategy()</a>, <a class="el" href="_i_network_8hpp_source.xhtml#l00184">OptimizerOptions::ToString()</a>, <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a>, <a class="el" href="namespacearmnn.xhtml#adf57837d00e8352d9b5cc5ab1fb5fee9af6486a22a9bb11959bfae60a3e5174b1">ValidateOnly</a>, <a class="el" href="_graph_8cpp_source.xhtml#l00545">Graph::VerifyConstantLayerSetTensorInfo()</a>, <a class="el" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407a7b83d3f08fa392b79e3f553b585971cd">warning</a>, and <a class="el" href="_exceptions_8cpp_source.xhtml#l00032">Exception::what()</a>.</p>
+
+</div>
+</div>
+<a id="a2783360b253135639f4c63cfcaed6d48"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2783360b253135639f4c63cfcaed6d48">&#9670;&nbsp;</a></span>Optimize() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -26853,8 +36400,8 @@ Variables</h2></td></tr>
<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_graph.xhtml">Graph</a> &amp;&#160;</td>
- <td class="paramname"><em>inGraph</em>, </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>
@@ -26872,12 +36419,12 @@ Variables</h2></td></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>, </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="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>
@@ -26891,64 +36438,31 @@ Variables</h2></td></tr>
<p>Create an optimized version of the network. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
- <tr><td class="paramname">inGraph</td><td><a class="el" href="classarmnn_1_1_graph.xhtml">Graph</a> to be optimized. </td></tr>
+ <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>
+ <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>
-
-<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.xhtml#l01572">1572</a> of file <a class="el" href="_network_8cpp_source.xhtml">Network.cpp</a>.</p>
+<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 class="section examples"><dt>Examples</dt><dd><a class="el" href="_async_execution_sample_8cpp-example.xhtml#a23">AsyncExecutionSample.cpp</a>, <a class="el" href="_custom_memory_allocator_sample_8cpp-example.xhtml#a25">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#a23">SimpleSample.cpp</a>.</dd>
+</dl>
-<p class="reference">References <a class="el" href="_graph_8cpp_source.xhtml#l00303">Graph::AddCompatibilityLayers()</a>, <a class="el" href="_network_8cpp_source.xhtml#l01040">ApplyBackendOptimizations()</a>, <a class="el" href="_logging_8hpp_source.xhtml#l00212">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#l00898">AssignBackends()</a>, <a class="el" href="_graph_8hpp_source.xhtml#l00169">Graph::begin()</a>, <a class="el" href="_filesystem_8cpp_source.xhtml#l00047">armnnUtils::Filesystem::CreateDirectory()</a>, <a class="el" href="_network_8cpp_source.xhtml#l01021">CreateSupportedBackends()</a>, <a class="el" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407aad42f6697b035b7580e4fef93be20b4d">debug</a>, <a class="el" href="_network_8cpp_source.xhtml#l00476">IOptimizedNetwork::Destroy()</a>, <a class="el" href="_graph_8hpp_source.xhtml#l00171">Graph::end()</a>, <a class="el" href="_backend_settings_8hpp_source.xhtml#l00067">BackendSettings::GetAvailablePreferredBackends()</a>, <a class="el" href="_profiling_8cpp_source.xhtml#l00593">ProfilerManager::GetInstance()</a>, <a class="el" href="_graph_8cpp_source.xhtml#l00656">Graph::GetProfiler()</a>, <a class="el" href="namespacearmnn.xhtml#adf57837d00e8352d9b5cc5ab1fb5fee9a5dd7c525cb1500a2181fd4cc079d7acb">InferAndValidate</a>, <a class="el" href="_graph_8cpp_source.xhtml#l00568">Graph::InferTensorInfos()</a>, <a class="el" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>, <a class="el" href="_network_8cpp_source.xhtml#l00462">IOptimizedNetwork::IOptimizedNetwork()</a>, <a class="el" href="_i_network_8hpp_source.xhtml#l00222">OptimizerOptions::m_Debug</a>, <a class="el" href="_i_network_8hpp_source.xhtml#l00225">OptimizerOptions::m_DebugToFile</a>, <a class="el" href="_network_8hpp_source.xhtml#l00243">OptimizationResult::m_Error</a>, <a class="el" href="_i_network_8hpp_source.xhtml#l00244">OptimizerOptions::m_ExportEnabled</a>, <a class="el" href="_i_network_8hpp_source.xhtml#l00235">OptimizerOptions::m_ImportEnabled</a>, <a class="el" href="_i_network_8hpp_source.xhtml#l00238">OptimizerOptions::m_ModelOptions</a>, <a class="el" href="_i_network_8hpp_source.xhtml#l00241">OptimizerOptions::m_ProfilingEnabled</a>, <a class="el" href="_i_network_8hpp_source.xhtml#l00229">OptimizerOptions::m_ReduceFp32ToBf16</a>, <a class="el" href="_i_network_8hpp_source.xhtml#l00219">OptimizerOptions::m_ReduceFp32ToFp16</a>, <a class="el" href="_i_network_8hpp_source.xhtml#l00232">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#l00814">IOptimizedNetwork::pOptimizedNetworkImpl</a>, <a class="el" href="_profiling_8cpp_source.xhtml#l00600">ProfilerManager::RegisterProfiler()</a>, <a class="el" href="_network_8cpp_source.xhtml#l00532">ReportError()</a>, <a class="el" href="_network_8cpp_source.xhtml#l01502">SelectTensorHandleStrategy()</a>, <a class="el" href="_i_network_8hpp_source.xhtml#l00184">OptimizerOptions::ToString()</a>, <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a>, <a class="el" href="namespacearmnn.xhtml#adf57837d00e8352d9b5cc5ab1fb5fee9af6486a22a9bb11959bfae60a3e5174b1">ValidateOnly</a>, <a class="el" href="_graph_8cpp_source.xhtml#l00545">Graph::VerifyConstantLayerSetTensorInfo()</a>, <a class="el" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407a7b83d3f08fa392b79e3f553b585971cd">warning</a>, and <a class="el" href="_exceptions_8cpp_source.xhtml#l00032">Exception::what()</a>.</p>
-<div class="fragment"><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; <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(debug) &lt;&lt; options.ToString();</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; <span class="comment">// Enable profiling</span></div><div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>&#160; <span class="keyword">auto</span> profiler = inGraph.GetProfiler();</div><div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>&#160; ProfilerManager::GetInstance().RegisterProfiler(profiler.get());</div><div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>&#160; profiler-&gt;EnableProfiling(options.m_ProfilingEnabled);</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; <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="l01586"></a><span class="lineno"> 1586</span>&#160; <span class="keywordflow">if</span> (backendPreferences.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">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Invoked Optimize with no backends specified&quot;</span>);</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; <span class="keywordflow">if</span> (options.m_ReduceFp32ToBf16)</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="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;BFloat16 optimization is currently ignored. In order to use Bf16 optimization &quot;</span></div><div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>&#160; <span class="stringliteral">&quot;Please use the FastMathEnabled backend option for CpuAcc or GpuAcc.&quot;</span>);</div><div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>&#160; }</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">if</span> (options.m_ReduceFp32ToFp16 &amp;&amp; options.m_ReduceFp32ToBf16)</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; <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="l01600"></a><span class="lineno"> 1600</span>&#160; }</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="comment">// Ensure TensorInfo is set on all output slots of ConstantLayers in the graph</span></div><div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>&#160; inGraph.VerifyConstantLayerSetTensorInfo();</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; std::unique_ptr&lt;Graph&gt; graph = std::make_unique&lt;Graph&gt;(inGraph);</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="comment">// We need to pass on the information about whether import and export is enabled to the LoadNetwork phase.</span></div><div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>&#160; <span class="comment">// The mechanism to do that is to add model options to the optimized network.</span></div><div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>&#160; <a class="code" href="structarmnn_1_1_backend_options.xhtml">armnn::BackendOptions</a> importExport(<span class="stringliteral">&quot;Global&quot;</span>,</div><div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>&#160; {{<span class="stringliteral">&quot;ImportEnabled&quot;</span>, options.m_ImportEnabled},</div><div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>&#160; {<span class="stringliteral">&quot;ExportEnabled&quot;</span>, options.m_ExportEnabled}});</div><div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>&#160; <a class="code" href="namespacearmnn.xhtml#a5b6893cda5b69359a4244c06054da18f">ModelOptions</a> optimizedOptions(options.m_ModelOptions);</div><div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>&#160; optimizedOptions.push_back(importExport);</div><div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>&#160;</div><div class="line"><a name="l01615"></a><span class="lineno"> 1615</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), optimizedOptions),</div><div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>&#160; &amp;IOptimizedNetwork::Destroy);</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; IOptimizedNetwork* optNetObjPtr = optNet.get();</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; <span class="comment">// Get the optimized graph</span></div><div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>&#160; Graph&amp; optGraph = optNetObjPtr-&gt;pOptimizedNetworkImpl-&gt;GetGraph();</div><div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>&#160;</div><div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>&#160; <span class="keywordflow">if</span>(options.m_shapeInferenceMethod == ShapeInferenceMethod::InferAndValidate)</div><div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>&#160; {</div><div class="line"><a name="l01625"></a><span class="lineno"> 1625</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="l01626"></a><span class="lineno"> 1626</span>&#160; optGraph.InferTensorInfos();</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;</div><div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>&#160; <span class="comment">// Perform AddBroadcastReshapeLayer optimisation</span></div><div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>&#160; <span class="keyword">using namespace </span>optimizations;</div><div class="line"><a name="l01631"></a><span class="lineno"> 1631</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="l01632"></a><span class="lineno"> 1632</span>&#160;</div><div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>&#160; <span class="keywordflow">if</span>(options.m_shapeInferenceMethod == ShapeInferenceMethod::ValidateOnly)</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">// Validate the tensor infos for all output slots. Throws an exception on failure</span></div><div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>&#160; optGraph.InferTensorInfos();</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;</div><div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>&#160;</div><div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>&#160; <span class="comment">// Group Constant Layer optimizations together where possible.</span></div><div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>&#160; <span class="comment">// This is important as:</span></div><div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>&#160; <span class="comment">// FusePermuteIntoConstantLayer must happen before FoldPadIntoDepthwiseConvolution2d and</span></div><div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>&#160; <span class="comment">// FuseBatchNormIntoDepthwiseConvolution2D.</span></div><div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>&#160; <span class="comment">// ConvertConstDequantisationLayersToConstLayers must happen before FoldPadIntoConvolution2d</span></div><div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>&#160; Optimizer::Pass(optGraph, <a class="code" href="namespacearmnn.xhtml#aa7427025a851113a492de0b68b23d22a">MakeOptimizations</a>(<a class="code" href="namespacearmnn_1_1optimizations.xhtml#ad668074369437a111649f51296ff8959">FusePermuteIntoConstLayer</a>(),</div><div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a4dfbdc8cc90b67e74eccd146d977ff66">ConvertConstDequantisationLayersToConstLayers</a>()));</div><div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>&#160; <span class="comment">// Perform optimisation passes</span></div><div class="line"><a name="l01648"></a><span class="lineno"> 1648</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="l01649"></a><span class="lineno"> 1649</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#aba7b0ca6192b8b58ecd517a82b4f378e">SquashEqualTransposeSiblings</a>(),</div><div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a29f8d97b2d74f99c88298881cd1d825b">SquashEqualReshapeSiblings</a>(),</div><div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#aa31127c77d2117f78d43ca2958dcae19">OptimizeInversePermutes</a>(),</div><div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a2f9d1a13be2ac1c4213729a0ef181fc0">OptimizeInverseTransposes</a>(),</div><div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#aafc70d5af99400ff5ea7991825658b2f">MovePermuteUp</a>(),</div><div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a5918588fa316cf4c23f1cf02c81ee706">MoveTransposeUp</a>(),</div><div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#ae0b1382e3af141896a46531c50e8863f">PermuteAsReshape</a>(),</div><div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#ad1aaeee71293f34d9f65d2dd2792830d">TransposeAsReshape</a>(),</div><div class="line"><a name="l01657"></a><span class="lineno"> 1657</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a8341ca3512ebafb19d60eba44d40d9e4">OptimizeConsecutiveReshapes</a>(),</div><div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a8b394ff60ed829a91f07deac476f3db2">FoldPadIntoConvolution2d</a>(),</div><div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a227e9ab5e488aa90ba462790ba0e5aec">FoldPadIntoDepthwiseConvolution2d</a>(),</div><div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a279d0a7c56966cea334303d48a874964">FoldPadIntoPooling2d</a>(),</div><div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a17d1279f5f8e3b92c328b1ed3b6fd549">PermuteAndBatchToSpaceAsDepthToSpace</a>(),</div><div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a98f54d4391347d517c7a7869e7707203">TransposeAndBatchToSpaceAsDepthToSpace</a>(),</div><div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#aa52c06792e18dc13030e82476f706f9e">FuseBatchNormIntoConvolution2DFloat32</a>(),</div><div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a8a81178ddcebb93ec0c35b6e6284273c">FuseBatchNormIntoConvolution2DFloat16</a>(),</div><div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a56e54a818166a2f4b2c1a7f76a3629ff">FuseBatchNormIntoDepthwiseConvolution2DFloat32</a>(),</div><div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#ab40bb51feca46649eb9d00522bfe51f6">FuseBatchNormIntoDepthwiseConvolution2DFloat16</a>()));</div><div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>&#160;</div><div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>&#160; <span class="comment">// If Fp32 to Fp16 optimization is set convert Fp32 network to Fp16</span></div><div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>&#160; <span class="keywordflow">if</span> (options.m_ReduceFp32ToFp16)</div><div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>&#160; {</div><div class="line"><a name="l01671"></a><span class="lineno"> 1671</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="l01672"></a><span class="lineno"> 1672</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="l01673"></a><span class="lineno"> 1673</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="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; <span class="comment">// Initialize backend settings</span></div><div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>&#160; BackendSettings backendSettings(backendPreferences, deviceSpec);</div><div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>&#160; <span class="keywordflow">if</span> (backendSettings.GetAvailablePreferredBackends().empty())</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; std::stringstream failureMsg;</div><div class="line"><a name="l01681"></a><span class="lineno"> 1681</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="l01682"></a><span class="lineno"> 1682</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="l01683"></a><span class="lineno"> 1683</span>&#160; <a class="code" href="namespacearmnn.xhtml#a7658f93d899c8646515a29370e6aa994">ReportError</a>(failureMsg.str(), messages);</div><div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(failureMsg.str());</div><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;</div><div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>&#160; <span class="comment">// Create a map to temporarily hold initialized backend objects</span></div><div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>&#160; TensorHandleFactoryRegistry tensorHandleFactoryRegistry;</div><div class="line"><a name="l01689"></a><span class="lineno"> 1689</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="l01690"></a><span class="lineno"> 1690</span>&#160;</div><div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>&#160; <span class="comment">// Assign an available backend to each layer</span></div><div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>&#160; Graph::Iterator firstLayer = optGraph.begin();</div><div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>&#160; Graph::Iterator lastLayer = optGraph.end();</div><div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>&#160; OptimizationResult assignBackendsResult = <a class="code" href="namespacearmnn.xhtml#a48e4d70ae8893f6f1a8ebfced5b03a07">AssignBackends</a>(optNetObjPtr-&gt;pOptimizedNetworkImpl.get(),</div><div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>&#160; backendSettings,</div><div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>&#160; firstLayer,</div><div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>&#160; lastLayer,</div><div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>&#160; messages);</div><div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>&#160; <span class="keywordflow">if</span> (assignBackendsResult.m_Error)</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">// Failed to assign a backend to each layer</span></div><div class="line"><a name="l01702"></a><span class="lineno"> 1702</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="l01703"></a><span class="lineno"> 1703</span>&#160; }</div><div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>&#160;</div><div class="line"><a name="l01705"></a><span class="lineno"> 1705</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="l01706"></a><span class="lineno"> 1706</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.xhtml#ae1509d340bc981b11101c3316ee8afd6">OptimizeInverseConversionsFp32</a>()));</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; <span class="comment">// Apply the backend-specific optimizations</span></div><div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>&#160; OptimizationResult backendOptimizationResult = <a class="code" href="namespacearmnn.xhtml#a9f31d956861d8277fa5f8fb877dbbb6c">ApplyBackendOptimizations</a>(optNetObjPtr-&gt;pOptimizedNetworkImpl.get(),</div><div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>&#160; backendSettings,</div><div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>&#160; backends,</div><div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>&#160; options.m_ModelOptions,</div><div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>&#160; messages);</div><div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>&#160; <span class="keywordflow">if</span> (backendOptimizationResult.m_Error)</div><div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>&#160; {</div><div class="line"><a name="l01716"></a><span class="lineno"> 1716</span>&#160; <span class="comment">// Failed to apply the backend-specific optimizations</span></div><div class="line"><a name="l01717"></a><span class="lineno"> 1717</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="l01718"></a><span class="lineno"> 1718</span>&#160; }</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; <span class="comment">// Convert constants</span></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; <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="l01723"></a><span class="lineno"> 1723</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="l01724"></a><span class="lineno"> 1724</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="l01725"></a><span class="lineno"> 1725</span>&#160; }</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="comment">// This must occur after all topological changes to the graph and any redirection of variables</span></div><div class="line"><a name="l01728"></a><span class="lineno"> 1728</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="l01729"></a><span class="lineno"> 1729</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="l01730"></a><span class="lineno"> 1730</span>&#160; <span class="keywordflow">if</span> (options.m_Debug &amp;&amp; !options.m_DebugToFile)</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; 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="l01733"></a><span class="lineno"> 1733</span>&#160; }</div><div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (options.m_DebugToFile)</div><div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>&#160; {</div><div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>&#160; <span class="comment">// Setup the output file path</span></div><div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>&#160; <span class="keywordflow">try</span></div><div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>&#160; {</div><div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>&#160; <span class="keyword">auto</span> result = <a class="code" href="namespacearmnn_utils_1_1_filesystem.xhtml#a0477efb2c6f5b41fbfe937fef6db312d">armnnUtils::Filesystem::CreateDirectory</a>(<span class="stringliteral">&quot;/ArmNNIntermediateLayerOutputs&quot;</span>);</div><div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>&#160; <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(info) &lt;&lt; <span class="stringliteral">&quot;Intermediate tensors will be written to: &quot;</span> &lt;&lt; result;</div><div class="line"><a name="l01741"></a><span class="lineno"> 1741</span>&#160; Optimizer::Pass(optGraph, <a class="code" href="namespacearmnn.xhtml#aa7427025a851113a492de0b68b23d22a">MakeOptimizations</a>(<a class="code" href="namespacearmnn_1_1optimizations.xhtml#a9c0a3a9a388a01bc21e20a16e70055f0">InsertDebugToFileLayer</a>()));</div><div class="line"><a name="l01742"></a><span class="lineno"> 1742</span>&#160; }</div><div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>&#160; <span class="keywordflow">catch</span> (<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_runtime_exception.xhtml">armnn::RuntimeException</a>&amp; e)</div><div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>&#160; {</div><div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>&#160; <span class="comment">// If we cannot create the output directory then we&#39;ll issue a warning and continue.</span></div><div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>&#160; <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(warning) &lt;&lt; <span class="stringliteral">&quot;Unable to print intermediate layer outputs : &quot;</span> &lt;&lt; e.<a class="code" href="classarmnn_1_1_exception.xhtml#abf843cbb29dec939d0731e491bab6f70">what</a>();</div><div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>&#160; }</div><div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>&#160; }</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; <span class="comment">// Calculate the compatibility strategies for tensor handles</span></div><div class="line"><a name="l01751"></a><span class="lineno"> 1751</span>&#160; OptimizationResult strategyResult = <a class="code" href="namespacearmnn.xhtml#abdde0870cf702c8284c9693c68093fd3">SelectTensorHandleStrategy</a>(optGraph,</div><div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>&#160; backends,</div><div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>&#160; tensorHandleFactoryRegistry,</div><div class="line"><a name="l01754"></a><span class="lineno"> 1754</span>&#160; options.m_ImportEnabled,</div><div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>&#160; options.m_ExportEnabled,</div><div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>&#160; messages);</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; <span class="keywordflow">if</span> (strategyResult.m_Error)</div><div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>&#160; {</div><div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>&#160; <span class="comment">// Failed to apply the backend-specific optimizations</span></div><div class="line"><a name="l01761"></a><span class="lineno"> 1761</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="l01762"></a><span class="lineno"> 1762</span>&#160; }</div><div class="line"><a name="l01763"></a><span class="lineno"> 1763</span>&#160;</div><div class="line"><a name="l01764"></a><span class="lineno"> 1764</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="l01765"></a><span class="lineno"> 1765</span>&#160; {</div><div class="line"><a name="l01766"></a><span class="lineno"> 1766</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="l01767"></a><span class="lineno"> 1767</span>&#160; optGraph.AddCompatibilityLayers(backends, tensorHandleFactoryRegistry);</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;</div><div class="line"><a name="l01770"></a><span class="lineno"> 1770</span>&#160; <span class="keywordflow">return</span> optNet;</div><div class="line"><a name="l01771"></a><span class="lineno"> 1771</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#l00532">Network.cpp:532</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#l00254">FoldPadIntoLayer2d.hpp:254</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#l00258">FoldPadIntoLayer2d.hpp:258</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#l00232">FuseBatchNorm.hpp:232</a></div></div>
-<div class="ttc" id="namespacearmnn_xhtml_a5b6893cda5b69359a4244c06054da18f"><div class="ttname"><a href="namespacearmnn.xhtml#a5b6893cda5b69359a4244c06054da18f">armnn::ModelOptions</a></div><div class="ttdeci">std::vector&lt; BackendOptions &gt; ModelOptions</div><div class="ttdef"><b>Definition:</b> <a href="_backend_options_8hpp_source.xhtml#l00018">BackendOptions.hpp:18</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#l00237">FuseBatchNorm.hpp:237</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#l00227">FuseBatchNorm.hpp:227</a></div></div>
-<div class="ttc" id="classarmnn_1_1_exception_xhtml_abf843cbb29dec939d0731e491bab6f70"><div class="ttname"><a href="classarmnn_1_1_exception.xhtml#abf843cbb29dec939d0731e491bab6f70">armnn::Exception::what</a></div><div class="ttdeci">virtual const char * what() const noexcept override</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8cpp_source.xhtml#l00032">Exceptions.cpp:32</a></div></div>
-<div class="ttc" id="namespacearmnn_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#l00222">FuseBatchNorm.hpp:222</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#l00212">Logging.hpp:212</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#l00053">AddDebug.hpp:53</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_ad668074369437a111649f51296ff8959"><div class="ttname"><a href="namespacearmnn_1_1optimizations.xhtml#ad668074369437a111649f51296ff8959">armnn::optimizations::FusePermuteIntoConstLayer</a></div><div class="ttdeci">OptimizeForConnection&lt; ConstantLayer, PermuteLayer, ConvertConstPermuteLayersToConstLayers &gt; FusePermuteIntoConstLayer</div><div class="ttdef"><b>Definition:</b> <a href="_convert_const_permute_layers_to_const_layers_8hpp_source.xhtml#l00124">ConvertConstPermuteLayersToConstLayers.hpp:124</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#l00099">ConvertConstants.hpp:99</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#l01040">Network.cpp:1040</a></div></div>
-<div class="ttc" id="namespacearmnn_utils_1_1_filesystem_xhtml_a0477efb2c6f5b41fbfe937fef6db312d"><div class="ttname"><a href="namespacearmnn_utils_1_1_filesystem.xhtml#a0477efb2c6f5b41fbfe937fef6db312d">armnnUtils::Filesystem::CreateDirectory</a></div><div class="ttdeci">std::string CreateDirectory(std::string sPath)</div><div class="ttdoc">Returns full path to temporary folder. </div><div class="ttdef"><b>Definition:</b> <a href="_filesystem_8cpp_source.xhtml#l00047">Filesystem.cpp:47</a></div></div>
-<div class="ttc" id="namespacearmnn_xhtml_abdde0870cf702c8284c9693c68093fd3"><div class="ttname"><a href="namespacearmnn.xhtml#abdde0870cf702c8284c9693c68093fd3">armnn::SelectTensorHandleStrategy</a></div><div class="ttdeci">OptimizationResult SelectTensorHandleStrategy(Graph &amp;optGraph, BackendsMap &amp;backends, TensorHandleFactoryRegistry &amp;registry, bool importEnabled, bool exportEnabled, Optional&lt; std::vector&lt; std::string &gt; &amp;&gt; errMessages)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.xhtml#l01502">Network.cpp:1502</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#l00253">INetwork.hpp:253</a></div></div>
-<div class="ttc" id="classarmnn_1_1_runtime_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_runtime_exception.xhtml">armnn::RuntimeException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00120">Exceptions.hpp:120</a></div></div>
-<div class="ttc" id="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="structarmnn_1_1_backend_options_xhtml"><div class="ttname"><a href="structarmnn_1_1_backend_options.xhtml">armnn::BackendOptions</a></div><div class="ttdoc">Struct for the users to pass backend specific options. </div><div class="ttdef"><b>Definition:</b> <a href="_backend_options_8hpp_source.xhtml#l00022">BackendOptions.hpp:22</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#l00098">ConvertConstants.hpp:98</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#l01021">Network.cpp:1021</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#l00260">FoldPadIntoLayer2d.hpp:260</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_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_a4dfbdc8cc90b67e74eccd146d977ff66"><div class="ttname"><a href="namespacearmnn_1_1optimizations.xhtml#a4dfbdc8cc90b67e74eccd146d977ff66">armnn::optimizations::ConvertConstDequantisationLayersToConstLayers</a></div><div class="ttdeci">OptimizeForConnection&lt; ConstantLayer, DequantizeLayer, ConvertConstDequantisationLayersToConstLayersImpl &gt; ConvertConstDequantisationLayersToConstLayers</div><div class="ttdef"><b>Definition:</b> <a href="_convert_const_dequantisation_layers_to_const_layers_8hpp_source.xhtml#l00173">ConvertConstDequantisationLayersToConstLayers.hpp:173</a></div></div>
-<div class="ttc" id="namespacearmnn_1_1optimizations_xhtml_a9c0a3a9a388a01bc21e20a16e70055f0"><div class="ttname"><a href="namespacearmnn_1_1optimizations.xhtml#a9c0a3a9a388a01bc21e20a16e70055f0">armnn::optimizations::InsertDebugToFileLayer</a></div><div class="ttdeci">OptimizeForType&lt; Layer, AddDebugToFileImpl &gt; InsertDebugToFileLayer</div><div class="ttdef"><b>Definition:</b> <a href="_add_debug_8hpp_source.xhtml#l00054">AddDebug.hpp:54</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#l01007">Network.cpp:1007</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#l00262">Network.hpp:262</a></div></div>
+<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.xhtml#l01773">1773</a> of file <a class="el" href="_network_8cpp_source.xhtml">Network.cpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l01778"></a><span class="lineno"> 1778</span>&#160;{</div>
+<div class="line"><a name="l01779"></a><span class="lineno"> 1779</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a2783360b253135639f4c63cfcaed6d48">Optimize</a>(inNetwork.pNetworkImpl-&gt;GetGraph(),</div>
+<div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>&#160; backendPreferences,</div>
+<div class="line"><a name="l01781"></a><span class="lineno"> 1781</span>&#160; deviceSpec,</div>
+<div class="line"><a name="l01782"></a><span class="lineno"> 1782</span>&#160; options,</div>
+<div class="line"><a name="l01783"></a><span class="lineno"> 1783</span>&#160; messages);</div>
+<div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>&#160;}</div>
</div><!-- fragment -->
+<p class="reference">References <a class="el" href="_i_network_8hpp_source.xhtml#l00756">INetwork::pNetworkImpl</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_armnn_driver_impl_8cpp_source.xhtml#l00099">ArmnnDriverImpl::PrepareArmnnModel()</a>, <a class="el" href="_armnn_driver_impl_8cpp_source.xhtml#l00338">ArmnnDriverImpl::PrepareArmnnModelFromCache()</a>, <a class="el" href="_parser_prototxt_fixture_8hpp_source.xhtml#l00122">ParserPrototxtFixture&lt; TParser &gt;::Setup()</a>, and <a class="el" href="_parser_prototxt_fixture_8hpp_source.xhtml#l00174">ParserPrototxtFixture&lt; TParser &gt;::SetupOptimizedNetwork()</a>.</p>
+
</div>
</div>
<a id="a3c62b52d21e28088f040a4b6c2a06022"></a>
@@ -26996,9 +36510,151 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_pad_8cpp_source.xhtml#l00039">39</a> of file <a class="el" href="_pad_8cpp_source.xhtml">Pad.cpp</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 -->
+<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#l00198">TensorInfo::GetDataType()</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="_tensor_8cpp_source.xhtml#l00504">TensorInfo::IsQuantized()</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01165">PadDescriptor::m_PadList</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01168">PadDescriptor::m_PadValue</a>, <a class="el" href="_workload_data_8hpp_source.xhtml#l00066">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">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#l01165">PadDescriptor::m_PadList</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01168">PadDescriptor::m_PadValue</a>, <a class="el" href="_workload_data_8hpp_source.xhtml#l00066">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>
-<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="abe4073b0af144421b53828ef752e4ee3"></a>
@@ -27036,11 +36692,16 @@ Variables</h2></td></tr>
</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 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><!-- fragment -->
+<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>
</div>
<a id="a65645fa03bf8cddfb9d8a9f83beeb6e8"></a>
@@ -27048,6 +36709,9 @@ Variables</h2></td></tr>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456ae">armnn::Compute</a> armnn::ParseComputeDevice </td>
@@ -27057,19 +36721,37 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</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="_types_utils_8hpp_source.xhtml#l00186">186</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#l00174">StrEqual()</a>, and <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a>.</p>
-<div class="fragment"><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">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="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#ae2f04a162585c0a5222a537efd5456aea39f8662ca778258e9c6a14f26fec5ec1">armnn::Compute::CpuAcc</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;CpuRef&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#ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64">armnn::Compute::CpuRef</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> <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="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#ae2f04a162585c0a5222a537efd5456aeafaa4524e3df19ada32643ce9a222362b">armnn::Compute::GpuAcc</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; <span class="keywordflow">else</span></div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; {</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">armnn::Compute::Undefined</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;}</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#l00174">TypesUtils.hpp:174</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 class="fragment"><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">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="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#ae2f04a162585c0a5222a537efd5456aea39f8662ca778258e9c6a14f26fec5ec1">armnn::Compute::CpuAcc</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;CpuRef&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#ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64">armnn::Compute::CpuRef</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> <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="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#ae2f04a162585c0a5222a537efd5456aeafaa4524e3df19ada32643ce9a222362b">armnn::Compute::GpuAcc</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; <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; {</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">armnn::Compute::Undefined</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;}</div>
</div><!-- fragment -->
+<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#l00174">StrEqual()</a>, and <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a>.</p>
+
</div>
</div>
<a id="a884361aad1fe11d630c8588cba16c6f1"></a>
@@ -27107,13 +36789,18 @@ Variables</h2></td></tr>
</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>
-
+<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><!-- fragment -->
<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>
@@ -27149,11 +36836,24 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<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#l00062">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>, <a class="el" href="_network_8cpp_source.xhtml#l01773">Optimize()</a>, and <a class="el" href="_runtime_8cpp_source.xhtml#l00323">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 -->
+<p class="reference">Referenced by <a class="el" href="_cl_backend_context_8cpp_source.xhtml#l00062">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#l00323">RuntimeImpl::RuntimeImpl()</a>.</p>
+
</div>
</div>
<a id="a79a7e943477406c7211f8800e24e5074"></a>
@@ -27191,13 +36891,18 @@ Variables</h2></td></tr>
</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>
-
+<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><!-- fragment -->
<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#l00062">ClBackendContext::ClBackendContext()</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>
@@ -27235,13 +36940,27 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_tuning_utils_8hpp_source.xhtml#l00026">26</a> of file <a class="el" href="_arm_compute_tuning_utils_8hpp_source.xhtml">ArmComputeTuningUtils.hpp</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="keywordflow">if</span> (value.IsInt())</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">int</span> v = value.AsInt();</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keywordflow">if</span> (v &gt; <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(TuningLevel::Exhaustive) ||</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; v &lt; <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(TuningLevel::None))</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="_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="l00035"></a><span class="lineno"> 35</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="l00036"></a><span class="lineno"> 36</span>&#160; } <span class="keywordflow">else</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">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="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> defaultValue;</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;}</div>
+</div><!-- fragment -->
<p class="reference">References <a class="el" href="_logging_8hpp_source.xhtml#l00212">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#l00062">ClBackendContext::ClBackendContext()</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="keywordflow">if</span> (value.IsInt())</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">int</span> v = value.AsInt();</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keywordflow">if</span> (v &gt; static_cast&lt;int&gt;(TuningLevel::Exhaustive) ||</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; v &lt; static_cast&lt;int&gt;(TuningLevel::None))</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="_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="l00035"></a><span class="lineno"> 35</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="l00036"></a><span class="lineno"> 36</span>&#160; } <span class="keywordflow">else</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">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="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> defaultValue;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</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#l00212">Logging.hpp:212</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="_arm_compute_tuning_utils_8hpp_source.xhtml#l00018">ArmComputeTuningUtils.hpp:18</a></div></div>
-</div><!-- fragment -->
+
</div>
</div>
<a id="aafe6180ef80d9f334f3a3ba9cc0db35d"></a>
@@ -27277,15 +36996,31 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_workload_utils_8cpp_source.xhtml#l00018">18</a> of file <a class="el" href="_workload_utils_8cpp_source.xhtml">WorkloadUtils.cpp</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; <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="l00022"></a><span class="lineno"> 22</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="l00023"></a><span class="lineno"> 23</span>&#160; </div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; TensorInfo tensorInfo = tensor-&gt;GetTensorInfo();</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">if</span> (permutationVector.GetSize() &gt; 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; tensorInfo = <a class="code" href="namespacearmnn_utils.xhtml#abeaf4f6785039866fd075f4569ba8e84">armnnUtils::Permuted</a>(tensorInfo, permutationVector);</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <a class="code" href="namespacearmnn_utils.xhtml#af3c74017185773dd61d8ca6662d65d43">armnnUtils::Permute</a>(tensorInfo.GetShape(), permutationVector,</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; tensor-&gt;GetConstTensor&lt;<span class="keywordtype">void</span>&gt;(), permuteBuffer,</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <a class="code" href="namespacearmnn.xhtml#aa02b9e06fb20fa3c13da0427e6ee5ab2">GetDataTypeSize</a>(tensorInfo.GetDataType()));</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">else</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; {</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; ::memcpy(permuteBuffer, tensor-&gt;GetConstTensor&lt;<span class="keywordtype">void</span>&gt;(), tensorInfo.GetNumBytes());</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; tensorInfo.SetConstant(<span class="keyword">true</span>);</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">return</span> ConstTensor(tensorInfo, permuteBuffer);</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;}</div>
+</div><!-- fragment -->
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00015">ARMNN_ASSERT_MSG</a>, <a class="el" href="_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#l00155">GetDataTypeSize()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00427">TensorInfo::GetNumBytes()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</a>, <a class="el" href="_types_8hpp_source.xhtml#l00338">PermutationVector::GetSize()</a>, <a class="el" href="_tensor_handle_8hpp_source.xhtml#l00040">ConstTensorHandle::GetTensorInfo()</a>, <a class="el" href="_permute_8cpp_source.xhtml#l00131">armnnUtils::Permute()</a>, <a class="el" href="_permute_8cpp_source.xhtml#l00098">armnnUtils::Permuted()</a>, and <a class="el" href="_tensor_8cpp_source.xhtml#l00514">TensorInfo::SetConstant()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_workload_utils_8cpp_source.xhtml#l00139">Convert1HWOTensorToAcl()</a>, <a class="el" href="_workload_utils_8cpp_source.xhtml#l00201">Convert1HWOtoMIHW()</a>, and <a class="el" href="_workload_utils_8cpp_source.xhtml#l00230">ConvertWeightTensorFromArmnnToAcl()</a>.</p>
-<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00015">ARMNN_ASSERT_MSG</a>, <a class="el" href="_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#l00155">GetDataTypeSize()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00427">TensorInfo::GetNumBytes()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</a>, <a class="el" href="_types_8hpp_source.xhtml#l00338">PermutationVector::GetSize()</a>, <a class="el" href="_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#l00514">TensorInfo::SetConstant()</a>.</p>
-
-<p class="reference">Referenced by <a class="el" href="_workload_utils_8cpp_source.xhtml#l00139">Convert1HWOTensorToAcl()</a>, <a class="el" href="_workload_utils_8cpp_source.xhtml#l00201">Convert1HWOtoMIHW()</a>, <a class="el" href="_workload_utils_8cpp_source.xhtml#l00230">ConvertWeightTensorFromArmnnToAcl()</a>, and <a class="el" href="_workload_utils_8hpp_source.xhtml#l00189">GatherTensorHandlePairs()</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; <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="l00022"></a><span class="lineno"> 22</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="l00023"></a><span class="lineno"> 23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; TensorInfo tensorInfo = tensor-&gt;GetTensorInfo();</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">if</span> (permutationVector.GetSize() &gt; 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; tensorInfo = <a class="code" href="namespacearmnn_utils.xhtml#abeaf4f6785039866fd075f4569ba8e84">armnnUtils::Permuted</a>(tensorInfo, permutationVector);</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <a class="code" href="namespacearmnn_utils.xhtml#af3c74017185773dd61d8ca6662d65d43">armnnUtils::Permute</a>(tensorInfo.GetShape(), permutationVector,</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; tensor-&gt;GetConstTensor&lt;<span class="keywordtype">void</span>&gt;(), permuteBuffer,</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <a class="code" href="namespacearmnn.xhtml#aa02b9e06fb20fa3c13da0427e6ee5ab2">GetDataTypeSize</a>(tensorInfo.GetDataType()));</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">else</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; {</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; ::memcpy(permuteBuffer, tensor-&gt;GetConstTensor&lt;<span class="keywordtype">void</span>&gt;(), tensorInfo.GetNumBytes());</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; tensorInfo.SetConstant(<span class="keyword">true</span>);</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">return</span> ConstTensor(tensorInfo, permuteBuffer);</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</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#l00155">TypesUtils.hpp:155</a></div></div>
-</div><!-- fragment -->
</div>
</div>
<a id="aa4e89c644c511e255f6a7ecbd5d14686"></a>
@@ -27322,12 +37057,18 @@ Variables</h2></td></tr>
<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>
-
+<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>(<span class="keyword">dynamic_cast&lt;</span>DestType<span class="keyword">&gt;</span>(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><!-- fragment -->
<p class="reference">References <a class="el" href="_polymorphic_downcast_8hpp_source.xhtml#l00027">ARMNN_POLYMORPHIC_CAST_CHECK</a>.</p>
<p class="reference">Referenced by <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l00184">ClLayerSupport::IsLayerSupported()</a>, and <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00167">IsLayerTypeSupported()</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>
@@ -27364,10 +37105,14 @@ Variables</h2></td></tr>
<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 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><!-- fragment -->
+<p class="reference">References <a class="el" href="_polymorphic_downcast_8hpp_source.xhtml#l00027">ARMNN_POLYMORPHIC_CAST_CHECK</a>.</p>
+
</div>
</div>
<a id="ae2e93e304cf516841c521e3eaee025cd"></a>
@@ -27417,28 +37162,168 @@ Variables</h2></td></tr>
<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#l00395">Pooling2dDescriptor::m_DataLayout</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00381">Pooling2dDescriptor::m_PadBottom</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00393">Pooling2dDescriptor::m_PaddingMethod</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00375">Pooling2dDescriptor::m_PadLeft</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00377">Pooling2dDescriptor::m_PadRight</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00379">Pooling2dDescriptor::m_PadTop</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00385">Pooling2dDescriptor::m_PoolHeight</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00373">Pooling2dDescriptor::m_PoolType</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00383">Pooling2dDescriptor::m_PoolWidth</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00387">Pooling2dDescriptor::m_StrideX</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00389">Pooling2dDescriptor::m_StrideY</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>
+<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 = armnn::numeric_cast&lt;int&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 = armnn::numeric_cast&lt;int&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 = armnn::numeric_cast&lt;int&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 = armnn::numeric_cast&lt;int&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 = armnn::numeric_cast&lt;int&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 = armnn::numeric_cast&lt;int&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 = armnn::numeric_cast&lt;int&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 = armnn::numeric_cast&lt;int&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 = armnn::numeric_cast&lt;int&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 = armnn::numeric_cast&lt;int&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 = armnn::numeric_cast&lt;int&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 = armnn::numeric_cast&lt;int&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 = armnn::numeric_cast&lt;int&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 = armnn::numeric_cast&lt;int&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 = armnn::numeric_cast&lt;float&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 = armnn::numeric_cast&lt;float&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[<span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(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><!-- fragment -->
+<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#l00395">Pooling2dDescriptor::m_DataLayout</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00381">Pooling2dDescriptor::m_PadBottom</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00393">Pooling2dDescriptor::m_PaddingMethod</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00375">Pooling2dDescriptor::m_PadLeft</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00377">Pooling2dDescriptor::m_PadRight</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00379">Pooling2dDescriptor::m_PadTop</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00385">Pooling2dDescriptor::m_PoolHeight</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00373">Pooling2dDescriptor::m_PoolType</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00383">Pooling2dDescriptor::m_PoolWidth</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00387">Pooling2dDescriptor::m_StrideX</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00389">Pooling2dDescriptor::m_StrideY</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>, and <a class="el" href="_pooling2d_layer_8cpp_source.xhtml#l00022">Pooling2dLayer::Pooling2dLayer()</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#l00381">Descriptors.hpp:381</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#l00375">Descriptors.hpp:375</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#l00383">Descriptors.hpp:383</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#l00393">Descriptors.hpp:393</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#l00379">Descriptors.hpp:379</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#l00387">Descriptors.hpp:387</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#l00385">Descriptors.hpp:385</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#l00377">Descriptors.hpp:377</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#l00395">Descriptors.hpp:395</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#l00373">Descriptors.hpp:373</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#l00389">Descriptors.hpp:389</a></div></div>
-</div><!-- fragment -->
+
</div>
</div>
<a id="a69acbef24cd1cc572b93fc3e1e6ac030"></a>
@@ -27488,32 +37373,161 @@ Variables</h2></td></tr>
<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#l00471">Pooling3dDescriptor::m_DataLayout</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00453">Pooling3dDescriptor::m_PadBack</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00449">Pooling3dDescriptor::m_PadBottom</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00469">Pooling3dDescriptor::m_PaddingMethod</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00451">Pooling3dDescriptor::m_PadFront</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00443">Pooling3dDescriptor::m_PadLeft</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00445">Pooling3dDescriptor::m_PadRight</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00447">Pooling3dDescriptor::m_PadTop</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00459">Pooling3dDescriptor::m_PoolDepth</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00457">Pooling3dDescriptor::m_PoolHeight</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00441">Pooling3dDescriptor::m_PoolType</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00455">Pooling3dDescriptor::m_PoolWidth</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00461">Pooling3dDescriptor::m_StrideX</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00463">Pooling3dDescriptor::m_StrideY</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00465">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>
+<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 = armnn::numeric_cast&lt;int&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 = armnn::numeric_cast&lt;int&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 = armnn::numeric_cast&lt;int&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 = armnn::numeric_cast&lt;int&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 = armnn::numeric_cast&lt;int&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 = armnn::numeric_cast&lt;int&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 = armnn::numeric_cast&lt;int&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 = armnn::numeric_cast&lt;int&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 = armnn::numeric_cast&lt;int&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 = armnn::numeric_cast&lt;int&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 = armnn::numeric_cast&lt;int&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 = armnn::numeric_cast&lt;int&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 = armnn::numeric_cast&lt;int&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 = armnn::numeric_cast&lt;int&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 = armnn::numeric_cast&lt;int&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 = armnn::numeric_cast&lt;int&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 = armnn::numeric_cast&lt;int&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 = armnn::numeric_cast&lt;int&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 = armnn::numeric_cast&lt;int&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 = armnn::numeric_cast&lt;int&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 = armnn::numeric_cast&lt;float&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 = armnn::numeric_cast&lt;float&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[<span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(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><!-- fragment -->
+<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#l00471">Pooling3dDescriptor::m_DataLayout</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00453">Pooling3dDescriptor::m_PadBack</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00449">Pooling3dDescriptor::m_PadBottom</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00469">Pooling3dDescriptor::m_PaddingMethod</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00451">Pooling3dDescriptor::m_PadFront</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00443">Pooling3dDescriptor::m_PadLeft</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00445">Pooling3dDescriptor::m_PadRight</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00447">Pooling3dDescriptor::m_PadTop</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00459">Pooling3dDescriptor::m_PoolDepth</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00457">Pooling3dDescriptor::m_PoolHeight</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00441">Pooling3dDescriptor::m_PoolType</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00455">Pooling3dDescriptor::m_PoolWidth</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00461">Pooling3dDescriptor::m_StrideX</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00463">Pooling3dDescriptor::m_StrideY</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00465">Pooling3dDescriptor::m_StrideZ</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#l00441">Descriptors.hpp:441</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#l00463">Descriptors.hpp:463</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#l00455">Descriptors.hpp:455</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#l00459">Descriptors.hpp:459</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#l00445">Descriptors.hpp:445</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#l00471">Descriptors.hpp:471</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#l00451">Descriptors.hpp:451</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#l00457">Descriptors.hpp:457</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#l00453">Descriptors.hpp:453</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#l00449">Descriptors.hpp:449</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#l00465">Descriptors.hpp:465</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#l00443">Descriptors.hpp:443</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#l00447">Descriptors.hpp:447</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#l00461">Descriptors.hpp:461</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#l00469">Descriptors.hpp:469</a></div></div>
-</div><!-- fragment -->
+
</div>
</div>
<a id="a3be2f69aaf56e58a64ce62054c497fbc"></a>
@@ -27567,11 +37581,22 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<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="a2b942b6b36b2f6df709b544e01bbdbb0"></a>
@@ -27625,9 +37650,75 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_debug_8cpp_source.xhtml#l00023">23</a> of file <a class="el" href="_debug_8cpp_source.xhtml">Debug.cpp</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="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numDims = inputInfo.GetNumDimensions();</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> numElements = inputInfo.GetNumElements();</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">const</span> TensorShape&amp; inputShape = inputInfo.GetShape();</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; std::vector&lt;unsigned int&gt; strides(numDims, 0);</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; strides[numDims - 1] = inputShape[numDims - 1];</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> i = 2; i &lt;= numDims; 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; strides[numDims - i] = strides[numDims - i + 1] * inputShape[numDims - 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; </div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; os &lt;&lt; <span class="stringliteral">&quot;{ &quot;</span>;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; os &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="l00044"></a><span class="lineno"> 44</span>&#160; os &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="l00045"></a><span class="lineno"> 45</span>&#160; os &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="l00046"></a><span class="lineno"> 46</span>&#160; os &lt;&lt; <span class="stringliteral">&quot;\&quot;shape\&quot;: &quot;</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; os &lt;&lt; <span class="stringliteral">&quot;[&quot;</span>;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</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="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; inputShape[i];</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordflow">if</span> (i != numDims - 1)</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; os &lt;&lt; <span class="stringliteral">&quot;, &quot;</span>;</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; os &lt;&lt; <span class="stringliteral">&quot;], &quot;</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; os &lt;&lt; <span class="stringliteral">&quot;\&quot;min\&quot;: &quot;</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</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="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; <span class="stringliteral">&quot;\&quot;max\&quot;: &quot;</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</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="l00064"></a><span class="lineno"> 64</span>&#160; </div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; os &lt;&lt; <span class="stringliteral">&quot;\&quot;data\&quot;: &quot;</span>;</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 = 0; i &lt; numElements; 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; <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="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> (i % strides[j] == 0)</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; os &lt;&lt; <span class="stringliteral">&quot;[&quot;</span>;</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; </div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; os &lt;&lt; static_cast&lt;float&gt;(inputData[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="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="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> ((i + 1) % strides[j] == 0)</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; os &lt;&lt; <span class="stringliteral">&quot;]&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 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">if</span> (i != numElements - 1)</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; os &lt;&lt; <span class="stringliteral">&quot;, &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; </div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; os &lt;&lt; <span class="stringliteral">&quot; }&quot;</span> &lt;&lt; std::endl;</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;}</div>
+</div><!-- fragment -->
<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>, and <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</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="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numDims = inputInfo.GetNumDimensions();</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> numElements = inputInfo.GetNumElements();</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">const</span> TensorShape&amp; inputShape = inputInfo.GetShape();</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; std::vector&lt;unsigned int&gt; strides(numDims, 0);</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; strides[numDims - 1] = inputShape[numDims - 1];</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> i = 2; i &lt;= numDims; 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; strides[numDims - i] = strides[numDims - i + 1] * inputShape[numDims - 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;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; os &lt;&lt; <span class="stringliteral">&quot;{ &quot;</span>;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; os &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="l00044"></a><span class="lineno"> 44</span>&#160; os &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="l00045"></a><span class="lineno"> 45</span>&#160; os &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="l00046"></a><span class="lineno"> 46</span>&#160; os &lt;&lt; <span class="stringliteral">&quot;\&quot;shape\&quot;: &quot;</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; os &lt;&lt; <span class="stringliteral">&quot;[&quot;</span>;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</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="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; inputShape[i];</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordflow">if</span> (i != numDims - 1)</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; os &lt;&lt; <span class="stringliteral">&quot;, &quot;</span>;</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; os &lt;&lt; <span class="stringliteral">&quot;], &quot;</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; os &lt;&lt; <span class="stringliteral">&quot;\&quot;min\&quot;: &quot;</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</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="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; <span class="stringliteral">&quot;\&quot;max\&quot;: &quot;</span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</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="l00064"></a><span class="lineno"> 64</span>&#160;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; os &lt;&lt; <span class="stringliteral">&quot;\&quot;data\&quot;: &quot;</span>;</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 = 0; i &lt; numElements; 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; <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="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> (i % strides[j] == 0)</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; os &lt;&lt; <span class="stringliteral">&quot;[&quot;</span>;</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;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; os &lt;&lt; static_cast&lt;float&gt;(inputData[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="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="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> ((i + 1) % strides[j] == 0)</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; os &lt;&lt; <span class="stringliteral">&quot;]&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 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">if</span> (i != numElements - 1)</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; os &lt;&lt; <span class="stringliteral">&quot;, &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;</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; os &lt;&lt; <span class="stringliteral">&quot; }&quot;</span> &lt;&lt; std::endl;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;}</div></div><!-- fragment -->
+
</div>
</div>
<a id="a2386397752b62040e3b0647e8bc4dc70"></a>
@@ -27675,40 +37766,44 @@ Variables</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
-<p>&lt; Profiler used </p>
+<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>
-
+<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 -->
<p class="reference">References <a class="el" href="_profiling_8cpp_source.xhtml#l00593">ProfilerManager::GetInstance()</a>, and <a class="el" href="_profiling_8cpp_source.xhtml#l00620">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>
+<a id="ad773a034fb9983e15f3094b4c5c7c30c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad773a034fb9983e15f3094b4c5c7c30c">&#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 class="memname">template int32_t Quantize&lt; int32_t &gt; </td>
<td>(</td>
- <td class="paramtype">uint8_t *&#160;</td>
- <td class="paramname"><em>quant</em>, </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">const float *&#160;</td>
- <td class="paramname"><em>dequant</em>, </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">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &amp;&#160;</td>
- <td class="paramname"><em>info</em>&#160;</td>
+ <td class="paramtype">int32_t&#160;</td>
+ <td class="paramname"><em>offset</em>&#160;</td>
</tr>
<tr>
<td></td>
@@ -27716,43 +37811,68 @@ Variables</h2></td></tr>
<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#l00115">115</a> of file <a class="el" href="_ref_workload_utils_8hpp_source.xhtml">RefWorkloadUtils.hpp</a>.</p>
+<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="reference">References <a class="el" href="_tensor_8hpp_source.xhtml#l00196">TensorInfo::GetNumElements()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00478">TensorInfo::GetQuantizationOffset()</a>, and <a class="el" href="_tensor_8cpp_source.xhtml#l00461">TensorInfo::GetQuantizationScale()</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">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="l00118"></a><span class="lineno"> 118</span>&#160; {</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</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="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="ttc" id="namespacearmnn_xhtml_a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c"><div class="ttname"><a href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">armnn::BoostLogSeverityMapping::info</a></div></div>
+<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>
+<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((<span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span>(offset) + <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span>(round(value/scale))),</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span>(min)), <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span>(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><!-- fragment -->
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>.</p>
+
</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>
+<a id="abbbe4a59b72fba606f21e7c24dcbd8c0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abbbe4a59b72fba606f21e7c24dcbd8c0">&#9670;&nbsp;</a></span>Quantize() <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">template int32_t Quantize&lt; int32_t &gt; </td>
+ <td class="memname">void armnn::Quantize </td>
<td>(</td>
- <td class="paramtype">float&#160;</td>
- <td class="paramname"><em>value</em>, </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">float&#160;</td>
- <td class="paramname"><em>scale</em>, </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">int32_t&#160;</td>
- <td class="paramname"><em>offset</em>&#160;</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>
@@ -27760,28 +37880,23 @@ Variables</h2></td></tr>
<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>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>
-<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;(offset) + static_cast&lt;float&gt;(round(value/scale))),</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; static_cast&lt;float&gt;(min)), 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>
+<p class="definition">Definition at line <a class="el" href="_ref_workload_utils_8hpp_source.xhtml#l00115">115</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="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">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="l00118"></a><span class="lineno"> 118</span>&#160; {</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</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="l00120"></a><span class="lineno"> 120</span>&#160; }</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;}</div>
</div><!-- fragment -->
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.</p>
+
</div>
</div>
<a id="ad64b7a275169ba1b1ba2d15679f7e8b1"></a>
@@ -27835,18 +37950,110 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_reduce_8cpp_source.xhtml#l00070">70</a> of file <a class="el" href="_reduce_8cpp_source.xhtml">Reduce.cpp</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(<span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(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 = armnn::numeric_cast&lt;unsigned int&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(<span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(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><!-- fragment -->
+<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#abc05539fc6e7907f32ef0fb242e3b3b0a78d811e98514cd165dda532286610fd2">Min</a>, <a class="el" href="_reduce_8cpp_source.xhtml#l00019">NextIndex()</a>, <a class="el" href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0a362a33c23b08e4a32a4ec53fbb82cccd">Prod</a>, <a class="el" href="_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>
-<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="_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="_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="_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="_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>
@@ -27894,9 +38101,32 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_reduce_8cpp_source.xhtml#l00040">40</a> of file <a class="el" href="_reduce_8cpp_source.xhtml">Reduce.cpp</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 -->
<p class="reference">Referenced by <a class="el" href="_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>
@@ -27904,6 +38134,9 @@ Variables</h2></td></tr>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr const char* armnn::RefBackendId </td>
@@ -27912,12 +38145,18 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
-
+<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 -->
<p class="reference">Referenced by <a class="el" href="_ref_backend_8cpp_source.xhtml#l00024">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>
@@ -27925,6 +38164,9 @@ Variables</h2></td></tr>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr const char* armnn::RefTensorHandleFactoryId </td>
@@ -27933,12 +38175,18 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
-
+<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 -->
<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>
@@ -27974,14 +38222,58 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_workload_utils_8cpp_source.xhtml#l00067">67</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#l00427">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="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="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="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keyword">const</span> TensorShape&amp; weightShape = weightHandle.GetShape();</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> multiplier;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> height;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> width;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputChannels;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">switch</span> (dataLayout)</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> DataLayout::NHWC: <span class="comment">//It actually is [ H, W, I, M ]</span></div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; height = weightShape[0];</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; width = weightShape[1];</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; inputChannels = weightShape[2];</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; multiplier = weightShape[3];</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> DataLayout::NCHW: <span class="comment">//It actually is [ M, I, H, W ]</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; height = weightShape[2];</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; width = weightShape[3];</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; inputChannels = weightShape[1];</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; multiplier = weightShape[0];</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; std::vector&lt;DataType&gt; weightAclOrder(height*width*inputChannels*multiplier);</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> destinationWeightsChannel;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> totalChannels = inputChannels * multiplier;</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channelSize = height * width;</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputChannel = 0;</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">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> originWeightsChannel = 0; originWeightsChannel &lt; totalChannels; originWeightsChannel++)</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; inputChannel = originWeightsChannel % inputChannels;</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; destinationWeightsChannel = (originWeightsChannel - inputChannel) / inputChannels + multiplier * inputChannel;</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">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; channelSize; i++)</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; weightAclOrder[i + destinationWeightsChannel * channelSize] =</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; weight[i + originWeightsChannel * channelSize];</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; }</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; }</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; ::memcpy(permuteBuffer, weightAclOrder.data(), weightHandle.GetInfo().GetNumBytes());</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordflow">return</span> ConstTensor(weightHandle.GetInfo(), permuteBuffer);</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</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#l00048">Types.hpp:48</a></div></div>
+<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; <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="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keyword">const</span> TensorShape&amp; weightShape = weightHandle.GetShape();</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> multiplier;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> height;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> width;</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputChannels;</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">switch</span> (dataLayout)</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> DataLayout::NHWC: <span class="comment">//It actually is [ H, W, I, M ]</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; height = weightShape[0];</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; width = weightShape[1];</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; inputChannels = weightShape[2];</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; multiplier = weightShape[3];</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> DataLayout::NCHW: <span class="comment">//It actually is [ M, I, H, W ]</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; height = weightShape[2];</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; width = weightShape[3];</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; inputChannels = weightShape[1];</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; multiplier = weightShape[0];</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; std::vector&lt;DataType&gt; weightAclOrder(height*width*inputChannels*multiplier);</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> destinationWeightsChannel;</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> totalChannels = inputChannels * multiplier;</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channelSize = height * width;</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputChannel = 0;</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">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> originWeightsChannel = 0; originWeightsChannel &lt; totalChannels; originWeightsChannel++)</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; inputChannel = originWeightsChannel % inputChannels;</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; destinationWeightsChannel = (originWeightsChannel - inputChannel) / inputChannels + multiplier * inputChannel;</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">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; channelSize; i++)</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; weightAclOrder[i + destinationWeightsChannel * channelSize] =</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; weight[i + originWeightsChannel * channelSize];</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; }</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; }</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; </div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; ::memcpy(permuteBuffer, weightAclOrder.data(), weightHandle.GetInfo().GetNumBytes());</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordflow">return</span> ConstTensor(weightHandle.GetInfo(), permuteBuffer);</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;}</div>
</div><!-- fragment -->
+<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#l00427">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>
</div>
-<a id="a8134b220b50f01163c5fcd8d2d4524a2"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a8134b220b50f01163c5fcd8d2d4524a2">&#9670;&nbsp;</a></span>ReplaceLayers()</h2>
+<a id="abecdb9c231b9ced02bec27a1ca54184f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abecdb9c231b9ced02bec27a1ca54184f">&#9670;&nbsp;</a></span>ReplaceLayers()</h2>
<div class="memitem">
<div class="memproto">
@@ -28001,7 +38293,7 @@ Variables</h2></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="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>
@@ -28013,13 +38305,23 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml#l00316">316</a> of file <a class="el" href="_arm_compute_subgraph_utils_8hpp_source.xhtml">ArmComputeSubgraphUtils.hpp</a>.</p>
-
+<div class="fragment"><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; std::list&lt;IConnectableLayer*&gt; replacementLayers(layers.begin(), layers.end());</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; SubgraphView substitutionSubgraph(baseLayer);</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; SubgraphView replacementSubgraph(std::move(replacementLayers),</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; CreateIInputsFrom({replacementLayers.front()}),</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; CreateIOutputsFrom({replacementLayers.back()}));</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; optimizationViews.AddSubstitution({substitutionSubgraph, replacementSubgraph});</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160;}</div>
+</div><!-- fragment -->
<p class="reference">References <a class="el" href="include_2armnn_2backends_2_optimization_views_8hpp_source.xhtml#l00039">OptimizationViews::AddSubstitution()</a>.</p>
-<div class="fragment"><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; std::list&lt;IConnectableLayer*&gt; replacementLayers(layers.begin(), layers.end());</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; SubgraphView substitutionSubgraph(baseLayer);</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; SubgraphView replacementSubgraph(std::move(replacementLayers),</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; CreateIInputsFrom({replacementLayers.front()}),</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; CreateIOutputsFrom({replacementLayers.back()}));</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; optimizationViews.AddSubstitution({substitutionSubgraph, replacementSubgraph});</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</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>
+<a id="a3cf1cee98e0ed8b54263ec7279f6ec69"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3cf1cee98e0ed8b54263ec7279f6ec69">&#9670;&nbsp;</a></span>ReportError()</h2>
<div class="memitem">
<div class="memproto">
@@ -28033,7 +38335,7 @@ Variables</h2></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="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>
@@ -28045,16 +38347,24 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.xhtml#l00532">532</a> of file <a class="el" href="_network_8cpp_source.xhtml">Network.cpp</a>.</p>
-
+<div class="fragment"><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160;{</div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; std::stringstream fullErrorMessage;</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; fullErrorMessage &lt;&lt; <span class="stringliteral">&quot;ERROR: &quot;</span> &lt;&lt; errorMessage;</div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(warning) &lt;&lt; fullErrorMessage.str();</div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; <span class="keywordflow">if</span> (errorMessages)</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; errorMessages.value().push_back(fullErrorMessage.str());</div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; }</div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160;}</div>
+</div><!-- fragment -->
<p class="reference">References <a class="el" href="_logging_8hpp_source.xhtml#l00212">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#l00898">AssignBackends()</a>, <a class="el" href="_network_8cpp_source.xhtml#l00571">CheckScaleSetOnQuantizedType()</a>, <a class="el" href="_network_8cpp_source.xhtml#l01572">Optimize()</a>, and <a class="el" href="_network_8cpp_source.xhtml#l00556">ReturnWithError()</a>.</p>
-<div class="fragment"><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160;{</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; std::stringstream fullErrorMessage;</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; fullErrorMessage &lt;&lt; <span class="stringliteral">&quot;ERROR: &quot;</span> &lt;&lt; errorMessage;</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(warning) &lt;&lt; fullErrorMessage.str();</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; <span class="keywordflow">if</span> (errorMessages)</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; errorMessages.value().push_back(fullErrorMessage.str());</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; }</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</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#l00212">Logging.hpp:212</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>
+<a id="a5afd10e5e84ebf5cb8cfc8707492eda7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5afd10e5e84ebf5cb8cfc8707492eda7">&#9670;&nbsp;</a></span>ReportUntouchedLayers()</h2>
<div class="memitem">
<div class="memproto">
@@ -28071,7 +38381,7 @@ Variables</h2></td></tr>
<tr>
<td class="paramkey"></td>
<td></td>
- <td class="paramtype">std::map&lt; <a class="el" href="_types_8hpp.xhtml#af22094b802160f09f7c89ad9eee10084">LayerGuid</a>, <a class="el" href="classarmnn_1_1_layer.xhtml">Layer</a> *&gt;&#160;</td>
+ <td class="paramtype">std::map&lt; <a class="el" href="_types_8hpp.xhtml#af22094b802160f09f7c89ad9eee10084">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>
@@ -28088,15 +38398,26 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_subgraph_utils_8hpp_source.xhtml#l00052">52</a> of file <a class="el" href="_subgraph_utils_8hpp_source.xhtml">SubgraphUtils.hpp</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; std::vector&lt;Layer*&gt; untouchedVector;</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</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="l00056"></a><span class="lineno"> 56</span>&#160; {</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; Layer* layer = pair.second;</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; SubgraphView subgraphView({layer},</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; CreateIInputsFrom({layer}),</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; CreateIOutputsFrom({layer}));</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; optimizationViews.AddUntouchedSubgraph(std::move(subgraphView));</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 -->
<p class="reference">References <a class="el" href="include_2armnn_2backends_2_optimization_views_8hpp_source.xhtml#l00049">OptimizationViews::AddUntouchedSubgraph()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_ref_backend_8cpp_source.xhtml#l00074">RefBackend::OptimizeSubgraphView()</a>, <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="l00053"></a><span class="lineno"> 53</span>&#160;{</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; std::vector&lt;Layer*&gt; untouchedVector;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</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="l00056"></a><span class="lineno"> 56</span>&#160; {</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; Layer* layer = pair.second;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; SubgraphView subgraphView({layer},</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; CreateIInputsFrom({layer}),</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; CreateIOutputsFrom({layer}));</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; optimizationViews.AddUntouchedSubgraph(std::move(subgraphView));</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="a38e626422579decc13e3ee37da1a84c9"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a38e626422579decc13e3ee37da1a84c9">&#9670;&nbsp;</a></span>ReportWarning()</h2>
+<a id="a070307e9ee0f7969f7d4320145d1dddb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a070307e9ee0f7969f7d4320145d1dddb">&#9670;&nbsp;</a></span>ReportWarning()</h2>
<div class="memitem">
<div class="memproto">
@@ -28110,7 +38431,7 @@ Variables</h2></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="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>
@@ -28122,12 +38443,20 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.xhtml#l00544">544</a> of file <a class="el" href="_network_8cpp_source.xhtml">Network.cpp</a>.</p>
-
+<div class="fragment"><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160;{</div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; std::stringstream fullWarningMessage;</div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; fullWarningMessage &lt;&lt; <span class="stringliteral">&quot;WARNING: &quot;</span> &lt;&lt; warningMessage;</div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(warning) &lt;&lt; fullWarningMessage.str();</div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; <span class="keywordflow">if</span> (warningMessages)</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; warningMessages.value().push_back(fullWarningMessage.str());</div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; }</div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160;}</div>
+</div><!-- fragment -->
<p class="reference">References <a class="el" href="_logging_8hpp_source.xhtml#l00212">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#l01040">ApplyBackendOptimizations()</a>, and <a class="el" href="_network_8cpp_source.xhtml#l00608">AttemptBackendAssignment()</a>.</p>
-<div class="fragment"><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160;{</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; std::stringstream fullWarningMessage;</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; fullWarningMessage &lt;&lt; <span class="stringliteral">&quot;WARNING: &quot;</span> &lt;&lt; warningMessage;</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(warning) &lt;&lt; fullWarningMessage.str();</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; <span class="keywordflow">if</span> (warningMessages)</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; warningMessages.value().push_back(fullWarningMessage.str());</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; }</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160;}</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#l00212">Logging.hpp:212</a></div></div>
-</div><!-- fragment -->
+
</div>
</div>
<a id="a5ee4a1cca55f69b31e625c786655ed1a"></a>
@@ -28163,11 +38492,26 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.xhtml#l01148">1148</a> of file <a class="el" href="_network_8cpp_source.xhtml">Network.cpp</a>.</p>
-
+<div class="fragment"><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">if</span> (src != dst)</div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160; {</div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160; ITensorHandleFactory* srcFactory = registry.GetFactory(src);</div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160; ITensorHandleFactory* dstFactory = registry.GetFactory(dst);</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; <span class="keywordflow">if</span> (srcFactory &amp;&amp; dstFactory &amp;&amp;</div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160; (srcFactory-&gt;GetExportFlags() &amp; dstFactory-&gt;GetImportFlags()) != 0)</div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160; {</div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160; }</div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160; }</div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160;}</div>
+</div><!-- fragment -->
<p class="reference">References <a class="el" href="include_2armnn_2backends_2_i_tensor_handle_factory_8hpp_source.xhtml#l00090">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#l00091">ITensorHandleFactory::GetImportFlags()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.xhtml#l01263">CalculateSlotOption()</a>.</p>
-<div class="fragment"><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">if</span> (src != dst)</div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160; {</div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160; ITensorHandleFactory* srcFactory = registry.GetFactory(src);</div><div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160; ITensorHandleFactory* dstFactory = registry.GetFactory(dst);</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; <span class="keywordflow">if</span> (srcFactory &amp;&amp; dstFactory &amp;&amp;</div><div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160; (srcFactory-&gt;GetExportFlags() &amp; dstFactory-&gt;GetImportFlags()) != 0)</div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160; {</div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160; }</div><div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160; }</div><div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160;}</div></div><!-- fragment -->
+
</div>
</div>
<a id="a3170fdd696155a247ecd81d445c0e2e1"></a>
@@ -28197,11 +38541,34 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_workload_utils_8cpp_source.xhtml#l00041">41</a> of file <a class="el" href="_workload_utils_8cpp_source.xhtml">WorkloadUtils.cpp</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="comment">// Reshape the weights in-place</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keyword">const</span> TensorShape&amp; weightShape = weightInfo.GetShape();</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">switch</span> (dataLayout)</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">case</span> DataLayout::NHWC:</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</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="l00049"></a><span class="lineno"> 49</span>&#160; weightInfo.SetShape({ 1,</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; weightShape[0],</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; weightShape[1],</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; weightShape[2] * weightShape[3] });</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; weightInfo.SetShape({ 1,</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; weightShape[0] * weightShape[1],</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; weightShape[2],</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; weightShape[3] });</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; <span class="keywordflow">case</span> DataLayout::NCHW:</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</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="l00061"></a><span class="lineno"> 61</span>&#160; weightInfo.SetShape({ 1, weightShape[0] * weightShape[1], weightShape[2], weightShape[3] });</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">break</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;}</div>
+</div><!-- fragment -->
<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#l00230">ConvertWeightTensorFromArmnnToAcl()</a>, <a class="el" href="_workload_utils_8cpp_source.xhtml#l00115">ConvertWeightTensorInfoFromArmnnToAcl()</a>, and <a class="el" href="_workload_utils_8hpp_source.xhtml#l00189">GatherTensorHandlePairs()</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="comment">// Reshape the weights in-place</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keyword">const</span> TensorShape&amp; weightShape = weightInfo.GetShape();</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">switch</span> (dataLayout)</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">case</span> DataLayout::NHWC:</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</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="l00049"></a><span class="lineno"> 49</span>&#160; weightInfo.SetShape({ 1,</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; weightShape[0],</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; weightShape[1],</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; weightShape[2] * weightShape[3] });</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; weightInfo.SetShape({ 1,</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; weightShape[0] * weightShape[1],</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; weightShape[2],</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; weightShape[3] });</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; <span class="keywordflow">case</span> DataLayout::NCHW:</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</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="l00061"></a><span class="lineno"> 61</span>&#160; weightInfo.SetShape({ 1, weightShape[0] * weightShape[1], weightShape[2], weightShape[3] });</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">break</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;}</div></div><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_workload_utils_8cpp_source.xhtml#l00230">ConvertWeightTensorFromArmnnToAcl()</a>, and <a class="el" href="_workload_utils_8cpp_source.xhtml#l00115">ConvertWeightTensorInfoFromArmnnToAcl()</a>.</p>
+
</div>
</div>
<a id="a6894316aa645fd5e837739135bef04bb"></a>
@@ -28267,28 +38634,158 @@ Variables</h2></td></tr>
</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>
-
+<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(<span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(std::ceil(ix)), inputWidth - 1u);</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; y1 = std::min(<span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(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(<span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(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><!-- fragment -->
<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="_resize_8cpp_source.xhtml#l00065">Resize()</a>, and <a class="el" href="_resize_layer_8cpp_source.xhtml#l00021">ResizeLayer::ResizeLayer()</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>
+<a id="aeee4e55e6ad4fe12b2168f9fd1e88141"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aeee4e55e6ad4fe12b2168f9fd1e88141">&#9670;&nbsp;</a></span>ReturnWithError()</h2>
<div class="memitem">
<div class="memproto">
@@ -28314,7 +38811,7 @@ Variables</h2></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="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>
@@ -28326,13 +38823,20 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.xhtml#l00556">556</a> of file <a class="el" href="_network_8cpp_source.xhtml">Network.cpp</a>.</p>
-
+<div class="fragment"><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160;{</div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; std::stringstream failureMsg;</div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</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="l00563"></a><span class="lineno"> 563</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="l00564"></a><span class="lineno"> 564</span>&#160; <a class="code" href="namespacearmnn.xhtml#a3cf1cee98e0ed8b54263ec7279f6ec69">ReportError</a>(failureMsg.str(), errMessages);</div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; </div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; res.m_Error = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160;}</div>
+</div><!-- fragment -->
<p class="reference">References <a class="el" href="_internal_types_8cpp_source.xhtml#l00013">GetLayerTypeAsCString()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00273">Layer::GetType()</a>, <a class="el" href="_network_8hpp_source.xhtml#l00243">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#l00532">ReportError()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.xhtml#l00788">AssignBackendsIConnectable()</a>, and <a class="el" href="_network_8cpp_source.xhtml#l00608">AttemptBackendAssignment()</a>.</p>
-<div class="fragment"><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160;{</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; std::stringstream failureMsg;</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</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="l00563"></a><span class="lineno"> 563</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="l00564"></a><span class="lineno"> 564</span>&#160; <a class="code" href="namespacearmnn.xhtml#a7658f93d899c8646515a29370e6aa994">ReportError</a>(failureMsg.str(), errMessages);</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160;</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; res.m_Error = <span class="keyword">true</span>;</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; <span class="keywordflow">return</span> res;</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</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#l00532">Network.cpp:532</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="ac616eba4fa6ed1911f4b64a189b194fc"></a>
@@ -28388,16 +38892,25 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_workload_utils_8hpp_source.xhtml#l00160">160</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#l00152">WrapClError()</a>.</p>
+<div class="fragment"><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">try</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; <span class="keyword">function</span>.run();</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">catch</span> (cl::Error&amp; error)</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">throw</span> <a class="code" href="namespacearmnn.xhtml#a2192b5ff59aacdb27f8b0238323915dc">WrapClError</a>(error, location);</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><!-- fragment -->
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acb5e100e5a9a3e7f6d1fd97512215282">error</a>, and <a class="el" href="_cl_workload_utils_8hpp_source.xhtml#l00152">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_exp_workload_8cpp_source.xhtml#l00048">ClExpWorkload::Execute()</a>, <a class="el" href="_cl_prelu_workload_8cpp_source.xhtml#l00046">ClPreluWorkload::Execute()</a>, <a class="el" href="_cl_quantize_workload_8cpp_source.xhtml#l00048">ClQuantizeWorkload::Execute()</a>, <a class="el" href="_cl_convert_fp16_to_fp32_workload_8cpp_source.xhtml#l00038">ClConvertFp16ToFp32Workload::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_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_sqrt_workload_8cpp_source.xhtml#l00061">ClSqrtWorkload::Execute()</a>, <a class="el" href="_cl_lstm_float_workload_8cpp_source.xhtml#l00238">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_space_to_depth_workload_8cpp_source.xhtml#l00048">ClSpaceToDepthWorkload::Execute()</a>, <a class="el" href="_cl_normalization_float_workload_8cpp_source.xhtml#l00059">ClNormalizationFloatWorkload::Execute()</a>, <a class="el" href="_cl_floor_float_workload_8cpp_source.xhtml#l00038">ClFloorFloatWorkload::Execute()</a>, <a class="el" href="_cl_resize_workload_8cpp_source.xhtml#l00091">ClResizeWorkload::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_arg_min_max_workload_8cpp_source.xhtml#l00094">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_l2_normalization_float_workload_8cpp_source.xhtml#l00057">ClL2NormalizationFloatWorkload::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_pooling2d_workload_8cpp_source.xhtml#l00065">ClPooling2dWorkload::Execute()</a>, <a class="el" href="_cl_strided_slice_workload_8cpp_source.xhtml#l00102">ClStridedSliceWorkload::Execute()</a>, <a class="el" href="_cl_gather_nd_workload_8cpp_source.xhtml#l00198">ClGatherNdWorkload::Execute()</a>, <a class="el" href="_cl_space_to_batch_nd_workload_8cpp_source.xhtml#l00091">ClSpaceToBatchNdWorkload::Execute()</a>, <a class="el" href="_cl_pooling3d_workload_8cpp_source.xhtml#l00065">ClPooling3dWorkload::Execute()</a>, <a class="el" href="_cl_multiplication_workload_8cpp_source.xhtml#l00079">ClMultiplicationWorkload::Execute()</a>, <a class="el" href="_cl_log_softmax_workload_8cpp_source.xhtml#l00054">ClLogSoftmaxWorkload::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_batch_normalization_float_workload_8cpp_source.xhtml#l00113">ClBatchNormalizationFloatWorkload::Execute()</a>, <a class="el" href="_cl_depthwise_convolution_workload_8cpp_source.xhtml#l00163">ClDepthwiseConvolutionWorkload::Execute()</a>, <a class="el" href="_cl_fully_connected_workload_8cpp_source.xhtml#l00110">ClFullyConnectedWorkload::Execute()</a>, <a class="el" href="_cl_convolution3d_workload_8cpp_source.xhtml#l00112">ClConvolution3dWorkload::Execute()</a>, <a class="el" href="_cl_transpose_workload_8cpp_source.xhtml#l00055">ClTransposeWorkload::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>, and <a class="el" href="_cl_convolution2d_workload_8cpp_source.xhtml#l00155">ClConvolution2dWorkload::Execute()</a>.</p>
-<div class="fragment"><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">try</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; <span class="keyword">function</span>.run();</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">catch</span> (cl::Error&amp; error)</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">throw</span> <a class="code" href="namespacearmnn.xhtml#a2192b5ff59aacdb27f8b0238323915dc">WrapClError</a>(error, location);</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="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#l00152">ClWorkloadUtils.hpp:152</a></div></div>
-</div><!-- fragment -->
+
</div>
</div>
-<a id="abdde0870cf702c8284c9693c68093fd3"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#abdde0870cf702c8284c9693c68093fd3">&#9670;&nbsp;</a></span>SelectTensorHandleStrategy()</h2>
+<a id="acbf7c9a630f03ece800f807d946239ab"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acbf7c9a630f03ece800f807d946239ab">&#9670;&nbsp;</a></span>SelectTensorHandleStrategy()</h2>
<div class="memitem">
<div class="memproto">
@@ -28435,7 +38948,7 @@ Variables</h2></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="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>
@@ -28447,19 +38960,74 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.xhtml#l01502">1502</a> of file <a class="el" href="_network_8cpp_source.xhtml">Network.cpp</a>.</p>
-
+<div class="fragment"><div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>&#160;{</div>
+<div class="line"><a name="l01509"></a><span class="lineno"> 1509</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="l01510"></a><span class="lineno"> 1510</span>&#160; OptimizationResult result;</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; optGraph.ForEachLayer([&amp;backends, &amp;registry, &amp;result, &amp;errMessages, importEnabled, exportEnabled](Layer* layer)</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; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer);</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; <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="l01517"></a><span class="lineno"> 1517</span>&#160; <span class="comment">// assignment if this check fails</span></div>
+<div class="line"><a name="l01518"></a><span class="lineno"> 1518</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="l01519"></a><span class="lineno"> 1519</span>&#160; </div>
+<div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>&#160; <span class="comment">// Check each output separately</span></div>
+<div class="line"><a name="l01521"></a><span class="lineno"> 1521</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="l01522"></a><span class="lineno"> 1522</span>&#160; {</div>
+<div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>&#160; OutputSlot&amp; outputSlot = layer-&gt;GetOutputSlot(slotIdx);</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; <a class="code" href="namespacearmnn.xhtml#a947e07902b1b5d98b57eeae34053146b">ITensorHandleFactory::FactoryId</a> slotOption = ITensorHandleFactory::LegacyFactoryId;</div>
+<div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>&#160; </div>
+<div class="line"><a name="l01527"></a><span class="lineno"> 1527</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="l01528"></a><span class="lineno"> 1528</span>&#160; <span class="keywordflow">switch</span>(layer-&gt;GetType())</div>
+<div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>&#160; {</div>
+<div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>&#160; <span class="keywordflow">case</span> LayerType::Input:</div>
+<div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>&#160; slotOption = <a class="code" href="namespacearmnn.xhtml#a5f34318a121e010053655204df94720c">CalculateSlotOptionForInput</a>(backends, outputSlot, registry, importEnabled);</div>
+<div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>&#160; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>&#160; <span class="keywordflow">case</span> LayerType::Output:</div>
+<div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>&#160; slotOption = <a class="code" href="namespacearmnn.xhtml#ab46c7f5f4736d550ab0e5e05a0fff4a9">CalculateSlotOptionForOutput</a>(backends, outputSlot, registry);</div>
+<div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>&#160; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>&#160; <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>&#160; slotOption = <a class="code" href="namespacearmnn.xhtml#ad52508167694d6d259525b3eec1a4267">CalculateSlotOption</a>(backends, outputSlot, registry, exportEnabled);</div>
+<div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>&#160; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>&#160; }</div>
+<div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>&#160; outputSlot.SetTensorHandleFactory(slotOption);</div>
+<div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>&#160; </div>
+<div class="line"><a name="l01542"></a><span class="lineno"> 1542</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="l01543"></a><span class="lineno"> 1543</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> connectionIdx = 0;</div>
+<div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; connection : outputSlot.GetConnections())</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; <span class="keyword">const</span> Layer&amp; connectedLayer = connection-&gt;GetOwningLayer();</div>
+<div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>&#160; </div>
+<div class="line"><a name="l01548"></a><span class="lineno"> 1548</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="l01549"></a><span class="lineno"> 1549</span>&#160; registry, importEnabled);</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">if</span> (strategy == EdgeStrategy::Undefined)</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; result.m_Error = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>&#160; <span class="keywordflow">if</span> (errMessages)</div>
+<div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>&#160; {</div>
+<div class="line"><a name="l01556"></a><span class="lineno"> 1556</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="l01557"></a><span class="lineno"> 1557</span>&#160; <span class="stringliteral">&quot; between backends.&quot;</span>);</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>;</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; outputSlot.SetEdgeStrategy(connectionIdx, strategy);</div>
+<div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>&#160; </div>
+<div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>&#160; connectionIdx++;</div>
+<div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>&#160; }</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; });</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; <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>&#160;}</div>
+</div><!-- fragment -->
<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#l01413">CalculateEdgeStrategy()</a>, <a class="el" href="_network_8cpp_source.xhtml#l01263">CalculateSlotOption()</a>, <a class="el" href="_network_8cpp_source.xhtml#l01168">CalculateSlotOptionForInput()</a>, <a class="el" href="_network_8cpp_source.xhtml#l01253">CalculateSlotOptionForOutput()</a>, <a class="el" href="_graph_8hpp_source.xhtml#l00040">Graph::ForEachLayer()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00277">Layer::GetBackendId()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00132">OutputSlot::GetConnections()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00322">Layer::GetNumOutputSlots()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00326">Layer::GetOutputSlot()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00273">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#l00050">ITensorHandleFactory::LegacyFactoryId</a>, <a class="el" href="_network_8hpp_source.xhtml#l00243">OptimizationResult::m_Error</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a29c2c02a361c9d7028472e5d92cd4a54">Output</a>, <a class="el" href="_layer_8cpp_source.xhtml#l00210">OutputSlot::SetEdgeStrategy()</a>, <a class="el" href="_layer_8cpp_source.xhtml#l00200">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#l01572">Optimize()</a>.</p>
-<div class="fragment"><div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>&#160;{</div><div class="line"><a name="l01509"></a><span class="lineno"> 1509</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="l01510"></a><span class="lineno"> 1510</span>&#160; OptimizationResult result;</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; optGraph.ForEachLayer([&amp;backends, &amp;registry, &amp;result, &amp;errMessages, importEnabled, exportEnabled](Layer* layer)</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; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer);</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; <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="l01517"></a><span class="lineno"> 1517</span>&#160; <span class="comment">// assignment if this check fails</span></div><div class="line"><a name="l01518"></a><span class="lineno"> 1518</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="l01519"></a><span class="lineno"> 1519</span>&#160;</div><div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>&#160; <span class="comment">// Check each output separately</span></div><div class="line"><a name="l01521"></a><span class="lineno"> 1521</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="l01522"></a><span class="lineno"> 1522</span>&#160; {</div><div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>&#160; OutputSlot&amp; outputSlot = layer-&gt;GetOutputSlot(slotIdx);</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; <a class="code" href="namespacearmnn.xhtml#a947e07902b1b5d98b57eeae34053146b">ITensorHandleFactory::FactoryId</a> slotOption = ITensorHandleFactory::LegacyFactoryId;</div><div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>&#160;</div><div class="line"><a name="l01527"></a><span class="lineno"> 1527</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="l01528"></a><span class="lineno"> 1528</span>&#160; <span class="keywordflow">switch</span>(layer-&gt;GetType())</div><div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>&#160; {</div><div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>&#160; <span class="keywordflow">case</span> LayerType::Input:</div><div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>&#160; slotOption = <a class="code" href="namespacearmnn.xhtml#a5f34318a121e010053655204df94720c">CalculateSlotOptionForInput</a>(backends, outputSlot, registry, importEnabled);</div><div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>&#160; <span class="keywordflow">case</span> LayerType::Output:</div><div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>&#160; slotOption = <a class="code" href="namespacearmnn.xhtml#ab46c7f5f4736d550ab0e5e05a0fff4a9">CalculateSlotOptionForOutput</a>(backends, outputSlot, registry);</div><div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>&#160; slotOption = <a class="code" href="namespacearmnn.xhtml#ad52508167694d6d259525b3eec1a4267">CalculateSlotOption</a>(backends, outputSlot, registry, exportEnabled);</div><div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>&#160; }</div><div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>&#160; outputSlot.SetTensorHandleFactory(slotOption);</div><div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>&#160;</div><div class="line"><a name="l01542"></a><span class="lineno"> 1542</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="l01543"></a><span class="lineno"> 1543</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> connectionIdx = 0;</div><div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; connection : outputSlot.GetConnections())</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; <span class="keyword">const</span> Layer&amp; connectedLayer = connection-&gt;GetOwningLayer();</div><div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>&#160;</div><div class="line"><a name="l01548"></a><span class="lineno"> 1548</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="l01549"></a><span class="lineno"> 1549</span>&#160; registry, importEnabled);</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">if</span> (strategy == EdgeStrategy::Undefined)</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; result.m_Error = <span class="keyword">true</span>;</div><div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>&#160; <span class="keywordflow">if</span> (errMessages)</div><div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>&#160; {</div><div class="line"><a name="l01556"></a><span class="lineno"> 1556</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="l01557"></a><span class="lineno"> 1557</span>&#160; <span class="stringliteral">&quot; between backends.&quot;</span>);</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>;</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; outputSlot.SetEdgeStrategy(connectionIdx, strategy);</div><div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>&#160;</div><div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>&#160; connectionIdx++;</div><div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>&#160; }</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; });</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; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l01570"></a><span class="lineno"> 1570</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#l01253">Network.cpp:1253</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#l00104">ITensorHandleFactory.hpp:104</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#l01413">Network.cpp:1413</a></div></div>
-<div class="ttc" id="namespacearmnn_xhtml_ad52508167694d6d259525b3eec1a4267"><div class="ttname"><a href="namespacearmnn.xhtml#ad52508167694d6d259525b3eec1a4267">armnn::CalculateSlotOption</a></div><div class="ttdeci">ITensorHandleFactory::FactoryId CalculateSlotOption(BackendsMap &amp;backends, OutputSlot &amp;outputSlot, TensorHandleFactoryRegistry &amp;registry, bool exportEnabled)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.xhtml#l01263">Network.cpp:1263</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#l01168">Network.cpp:1168</a></div></div>
-</div><!-- fragment -->
+
</div>
</div>
<a id="a7f8325a4bc02f2f687ba1968b595ec0a"></a>
@@ -28495,9 +39063,17 @@ Variables</h2></td></tr>
</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>
+<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 -->
+<p class="reference">Referenced by <a class="el" href="_utils_8cpp_source.xhtml#l00018">ConfigureLogging()</a>, and <a class="el" href="_unit_tests_8cpp_source.xhtml#l00023">TEST_SUITE()</a>.</p>
-<p class="reference">Referenced by <a class="el" href="_logging_8hpp_source.xhtml#l00183">SimpleLogger&lt; Level &gt;::AddSink()</a>, <a class="el" href="_utils_8cpp_source.xhtml#l00018">ConfigureLogging()</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>
@@ -28535,10 +39111,30 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_workload_utils_8hpp_source.xhtml#l00092">92</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="l00094"></a><span class="lineno"> 94</span>&#160;{</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="comment">// This function must translate the size vector given to an end vector</span></div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="comment">// expected by the ACL NESlice workload</span></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> starts;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <a class="code" href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> ends;</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">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="l00101"></a><span class="lineno"> 101</span>&#160;</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="comment">// For strided slices, we have the relationship size = (end - begin) / stride</span></div><div class="line"><a name="l00103"></a><span class="lineno"> 103</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="l00104"></a><span class="lineno"> 104</span>&#160; <span class="comment">// size = (end - begin) therefore we know end = size + begin</span></div><div class="line"><a name="l00105"></a><span class="lineno"> 105</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="l00106"></a><span class="lineno"> 106</span>&#160; {</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> revertedIndex = num_dims - i - 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; starts.set(i, static_cast&lt;int&gt;(m_begin[revertedIndex]));</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; ends.set(i, static_cast&lt;int&gt;(m_begin[revertedIndex] + m_size[revertedIndex]));</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="keywordflow">return</span> std::make_tuple(starts, ends);</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</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="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; <span class="comment">// This function must translate the size vector given to an end vector</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="comment">// expected by the ACL NESlice workload</span></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> starts;</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <a class="code" href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> ends;</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">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="l00101"></a><span class="lineno"> 101</span>&#160; </div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="comment">// For strided slices, we have the relationship size = (end - begin) / stride</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</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="l00104"></a><span class="lineno"> 104</span>&#160; <span class="comment">// size = (end - begin) therefore we know end = size + begin</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</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="l00106"></a><span class="lineno"> 106</span>&#160; {</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> revertedIndex = num_dims - i - 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; starts.set(i, <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(m_begin[revertedIndex]));</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; ends.set(i, <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(m_begin[revertedIndex] + m_size[revertedIndex]));</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="keywordflow">return</span> std::make_tuple(starts, ends);</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;}</div>
</div><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_cl_slice_workload_8cpp_source.xhtml#l00033">ClSliceWorkload::ClSliceWorkload()</a>.</p>
+
</div>
</div>
<a id="a6d4bdf4368a1422943f8f2b1740ec491"></a>
@@ -28582,10 +39178,26 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_workload_utils_8hpp_source.xhtml#l00071">71</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="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#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> starts;</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> ends;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <a class="code" href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> strides;</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> 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="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> i = 0; i &lt; num_dims; i++) {</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> revertedIndex = num_dims - i - 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; starts.set(i, static_cast&lt;int&gt;(m_begin[revertedIndex]));</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; ends.set(i, static_cast&lt;int&gt;(m_end[revertedIndex]));</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; strides.set(i, static_cast&lt;int&gt;(m_stride[revertedIndex]));</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">return</span> std::make_tuple(starts, ends, strides);</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</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="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#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> starts;</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> ends;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <a class="code" href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> strides;</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> 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="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> i = 0; i &lt; num_dims; i++) {</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> revertedIndex = num_dims - i - 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; starts.set(i, <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(m_begin[revertedIndex]));</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; ends.set(i, <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(m_end[revertedIndex]));</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; strides.set(i, <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(m_stride[revertedIndex]));</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">return</span> std::make_tuple(starts, ends, strides);</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;}</div>
</div><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_cl_strided_slice_workload_8cpp_source.xhtml#l00055">ClStridedSliceWorkload::ClStridedSliceWorkload()</a>.</p>
+
</div>
</div>
<a id="ac9aad76a34137b6359a867b282ea7cfb"></a>
@@ -28605,14 +39217,42 @@ Variables</h2></td></tr>
</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>
+<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#a181ecb133401da6ff2916c192ca04d48">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><!-- fragment -->
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>, <a class="el" href="_utils_8hpp_source.xhtml#l00035">ARMNN_FALLTHROUGH</a>, <a class="el" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3daa603905470e2a5b8c13e96b579ef0dba">Debug</a>, <a class="el" href="_logging_8hpp_source.xhtml#l00168">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="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="_utils_8cpp_source.xhtml#l00018">ConfigureLogging()</a>, and <a class="el" href="_unit_tests_8cpp_source.xhtml#l00023">TEST_SUITE()</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#l00035">ARMNN_FALLTHROUGH</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4aa603905470e2a5b8c13e96b579ef0dba">Debug</a>, <a class="el" href="_logging_8hpp_source.xhtml#l00168">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#l00183">SimpleLogger&lt; Level &gt;::AddSink()</a>, <a class="el" href="_utils_8cpp_source.xhtml#l00018">ConfigureLogging()</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#a181ecb133401da6ff2916c192ca04d48">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_a181ecb133401da6ff2916c192ca04d48"><div class="ttname"><a href="namespacearmnn.xhtml#a181ecb133401da6ff2916c192ca04d48">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, bool outputsToFile)</div><div class="ttdef"><b>Definition:</b> <a href="_debug_8cpp_source.xhtml#l00097">Debug.cpp:97</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#l00035">Utils.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><!-- fragment -->
</div>
</div>
<a id="a5f523aee1752323aeaf899085649320b"></a>
@@ -28656,9 +39296,31 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<p class="reference">References <a class="el" href="_logging_8hpp_source.xhtml#l00183">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#l00178">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>
@@ -28696,12 +39358,30 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_workload_utils_8hpp_source.xhtml#l00153">153</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#l00173">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="l00155"></a><span class="lineno"> 155</span>&#160;{</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="comment">// This function must translate the size vector given to an end vector</span></div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="comment">// expected by the ACL NESlice workload</span></div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <a class="code" href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> starts;</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <a class="code" href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> ends;</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="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="l00162"></a><span class="lineno"> 162</span>&#160;</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="comment">// For strided slices, we have the relationship size = (end - begin) / stride</span></div><div class="line"><a name="l00164"></a><span class="lineno"> 164</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="l00165"></a><span class="lineno"> 165</span>&#160; <span class="comment">// size = (end - begin) therefore we know end = size + begin</span></div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; num_dims; i++)</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; {</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> revertedIndex = num_dims - i - 1;</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; starts.set(i, static_cast&lt;int&gt;(m_begin[revertedIndex]));</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; ends.set(i, static_cast&lt;int&gt;(m_begin[revertedIndex] + m_size[revertedIndex]));</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; <span class="keywordflow">return</span> std::make_tuple(starts, ends);</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</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="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="comment">// This function must translate the size vector given to an end vector</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="comment">// expected by the ACL NESlice workload</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <a class="code" href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> starts;</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <a class="code" href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> ends;</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="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="l00162"></a><span class="lineno"> 162</span>&#160; </div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="comment">// For strided slices, we have the relationship size = (end - begin) / stride</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</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="l00165"></a><span class="lineno"> 165</span>&#160; <span class="comment">// size = (end - begin) therefore we know end = size + begin</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; num_dims; i++)</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; {</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> revertedIndex = num_dims - i - 1;</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; starts.set(i, <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(m_begin[revertedIndex]));</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; ends.set(i, <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(m_begin[revertedIndex] + m_size[revertedIndex]));</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; <span class="keywordflow">return</span> std::make_tuple(starts, ends);</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;}</div>
</div><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_neon_slice_workload_8cpp_source.xhtml#l00036">NeonSliceWorkload::NeonSliceWorkload()</a>.</p>
+
</div>
</div>
<a id="a01d1e745f360ccd0b655214645bcef32"></a>
@@ -28745,14 +39425,31 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_neon_workload_utils_8hpp_source.xhtml#l00131">131</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="l00134"></a><span class="lineno"> 134</span>&#160;{</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <a class="code" href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> starts;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <a class="code" href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> ends;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <a class="code" href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> strides;</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">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="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">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="l00142"></a><span class="lineno"> 142</span>&#160; {</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> revertedIndex = num_dims - i - 1;</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; starts.set(i, static_cast&lt;int&gt;(m_begin[revertedIndex]));</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; ends.set(i, static_cast&lt;int&gt;(m_end[revertedIndex]));</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; strides.set(i, static_cast&lt;int&gt;(m_stride[revertedIndex]));</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> std::make_tuple(starts, ends, strides);</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</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="fragment"><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; <a class="code" href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> starts;</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <a class="code" href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> ends;</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <a class="code" href="namespacearmnn.xhtml#ac6e86c1def7f674d3c4cb7f577874aa6">arm_compute::Coordinates</a> strides;</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">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="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">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="l00142"></a><span class="lineno"> 142</span>&#160; {</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> revertedIndex = num_dims - i - 1;</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; starts.set(i, <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(m_begin[revertedIndex]));</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; ends.set(i, <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(m_end[revertedIndex]));</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; strides.set(i, <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(m_stride[revertedIndex]));</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> std::make_tuple(starts, ends, strides);</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;}</div>
</div><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_neon_strided_slice_workload_8cpp_source.xhtml#l00049">NeonStridedSliceWorkload::NeonStridedSliceWorkload()</a>.</p>
+
</div>
</div>
-<a id="a13c7d751e4d37f65a6d40c3c6e50d2b8"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a13c7d751e4d37f65a6d40c3c6e50d2b8">&#9670;&nbsp;</a></span>SetValueChecked()</h2>
+<a id="a8c88a8a91827e9ccc3cf3ce6b14fcd17"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8c88a8a91827e9ccc3cf3ce6b14fcd17">&#9670;&nbsp;</a></span>SetValueChecked()</h2>
<div class="memitem">
<div class="memproto">
@@ -28760,7 +39457,7 @@ Variables</h2></td></tr>
<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="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>
@@ -28778,11 +39475,17 @@ Variables</h2></td></tr>
</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>
-
+<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 -->
<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#l00733">ClLayerSupport::IsConcatSupported()</a>, <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l00789">NeonLayerSupport::IsConcatSupported()</a>, <a class="el" href="_cl_layer_support_8cpp_source.xhtml#l01387">ClLayerSupport::IsSplitterSupported()</a>, and <a class="el" href="_neon_layer_support_8cpp_source.xhtml#l01450">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>
@@ -28830,11 +39533,83 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_slice_8cpp_source.xhtml#l00014">14</a> of file <a class="el" href="_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#l01191">SliceDescriptor::m_Begin</a>, and <a class="el" href="_descriptors_8hpp_source.xhtml#l01194">SliceDescriptor::m_Size</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 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><!-- fragment -->
+<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#l01191">SliceDescriptor::m_Begin</a>, and <a class="el" href="_descriptors_8hpp_source.xhtml#l01194">SliceDescriptor::m_Size</a>.</p>
+
</div>
</div>
<a id="aa999ff2585ad75b95954a9323f63c32b"></a>
@@ -28884,13 +39659,62 @@ Variables</h2></td></tr>
<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="_softmax_8cpp_source.xhtml#l00017">17</a> of file <a class="el" href="_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#l00182">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>
-<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#l00182">TensorUtils.cpp:182</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 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; <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(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;= -<span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(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; : <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(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><!-- fragment -->
+<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#l00182">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>
+
</div>
</div>
<a id="a4a180e425d4c19b2cdea4ce5760180e1"></a>
@@ -28938,23 +39762,91 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_space_to_batch_nd_8cpp_source.xhtml#l00034">34</a> of file <a class="el" href="_space_to_batch_nd_8cpp_source.xhtml">SpaceToBatchNd.cpp</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><!-- fragment -->
<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="_space_to_batch_nd_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#l01013">SpaceToBatchNdDescriptor::m_BlockShape</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01018">SpaceToBatchNdDescriptor::m_DataLayout</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01016">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="_space_to_batch_nd_8cpp_source.xhtml#l00034">SpaceToBatchNd()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_space_to_batch_nd_8cpp_source.xhtml#l00034">SpaceToBatchNd()</a>, and <a class="el" href="_space_to_batch_nd_layer_8cpp_source.xhtml#l00023">SpaceToBatchNdLayer::SpaceToBatchNdLayer()</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#l01016">Descriptors.hpp:1016</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#l01018">Descriptors.hpp:1018</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="_space_to_batch_nd_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#l01013">Descriptors.hpp:1013</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>
@@ -29002,27 +39894,74 @@ Variables</h2></td></tr>
</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>
-
+<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><!-- fragment -->
<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="_space_to_batch_nd_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#l01039">SpaceToDepthDescriptor::m_BlockSize</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01042">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>, and <a class="el" href="_space_to_depth_layer_8cpp_source.xhtml#l00023">SpaceToDepthLayer::SpaceToDepthLayer()</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="_space_to_batch_nd_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#l01039">Descriptors.hpp:1039</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#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="a7cc1fc0ee4d88d16e9684a9c964718ce"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a7cc1fc0ee4d88d16e9684a9c964718ce">&#9670;&nbsp;</a></span>Split()</h2>
+<a id="a3e6cbdbfb81dbcea27d219a6553838dc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3e6cbdbfb81dbcea27d219a6553838dc">&#9670;&nbsp;</a></span>Split()</h2>
<div class="memitem">
<div class="memproto">
@@ -29036,13 +39975,13 @@ Variables</h2></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="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="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>
@@ -29054,18 +39993,83 @@ Variables</h2></td></tr>
</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#l00027">GetTensorInfo()</a>, <a class="el" href="_workload_data_8hpp_source.xhtml#l00119">SplitterQueueDescriptor::ViewOrigin::m_Origin</a>, <a class="el" href="_workload_data_8hpp_source.xhtml#l00124">SplitterQueueDescriptor::m_ViewOrigins</a>, and <a class="el" href="_types_8hpp_source.xhtml#l00031">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#l00031">Types.hpp:31</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="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;<a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a46f3ea056caa3126b91f3f70beea068c">Map</a>());</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;<a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a46f3ea056caa3126b91f3f70beea068c">Map</a>());</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><!-- fragment -->
+<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="_ref_workload_utils_8hpp_source.xhtml#l00027">GetTensorInfo()</a>, <a class="el" href="_workload_data_8hpp_source.xhtml#l00119">SplitterQueueDescriptor::ViewOrigin::m_Origin</a>, <a class="el" href="_workload_data_8hpp_source.xhtml#l00124">SplitterQueueDescriptor::m_ViewOrigins</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a46f3ea056caa3126b91f3f70beea068c">Map</a>, <a class="el" href="_types_8hpp_source.xhtml#l00031">MaxNumOfTensorDimensions</a>, and <a class="el" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Encoder&lt; IType &gt;::Set()</a>.</p>
+
+</div>
+</div>
+<a id="a0fdab6fc39d90c5beea97f4ca0a584c4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0fdab6fc39d90c5beea97f4ca0a584c4">&#9670;&nbsp;</a></span>Splitter()</h2>
<div class="memitem">
<div class="memproto">
@@ -29079,13 +40083,13 @@ Variables</h2></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="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="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>
@@ -29097,13 +40101,71 @@ Variables</h2></td></tr>
</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>
+<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><!-- fragment -->
+<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#l00027">GetTensorInfo()</a>, <a class="el" href="_workload_data_8hpp_source.xhtml#l00119">SplitterQueueDescriptor::ViewOrigin::m_Origin</a>, <a class="el" href="_workload_data_8hpp_source.xhtml#l00124">SplitterQueueDescriptor::m_ViewOrigins</a>, and <a class="el" href="_types_8hpp_source.xhtml#l00031">MaxNumOfTensorDimensions</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#l00027">GetTensorInfo()</a>, <a class="el" href="_workload_data_8hpp_source.xhtml#l00119">SplitterQueueDescriptor::ViewOrigin::m_Origin</a>, <a class="el" href="_workload_data_8hpp_source.xhtml#l00124">SplitterQueueDescriptor::m_ViewOrigins</a>, <a class="el" href="_types_8hpp_source.xhtml#l00031">MaxNumOfTensorDimensions</a>, and <a class="el" href="_splitter_8cpp_source.xhtml#l00021">Split()</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#l00048">Types.hpp:48</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#l00031">Types.hpp:31</a></div></div>
-</div><!-- fragment -->
</div>
</div>
<a id="ac245fda400649db10eed0dc96c1b5c37"></a>
@@ -29151,12 +40213,116 @@ Variables</h2></td></tr>
</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#l01220">StackDescriptor::m_Axis</a>, <a class="el" href="_workload_data_8hpp_source.xhtml#l00026">QueueDescriptor::m_Inputs</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01222">StackDescriptor::m_NumInputs</a>, <a class="el" href="_workload_data_8hpp_source.xhtml#l00066">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>
-<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="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="l00045"></a><span class="lineno"> 45</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="l00046"></a><span class="lineno"> 46</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="l00047"></a><span class="lineno"> 47</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="l00048"></a><span class="lineno"> 48</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="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> oBatchSize = outputDims[1];</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> oChannels = (outputNumDims &gt; 2) ? outputDims[2] : 1;</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> oHeight = (outputNumDims &gt; 3) ? outputDims[3] : 1;</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> oWidth = (outputNumDims &gt; 4) ? outputDims[4] : 1;</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="comment">// Array to store the input coordinates</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="comment">// iCoordinates[0] = i, iCoordinates[1] = bi, iCoordinates[2] = ci</span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="comment">// iCoordinates[3] = hi, iCoordinates[4] = wi, iCoordinates[5] = 0</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="comment">// iCoordinates[5] will be always zero and used for not incrementing</span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="comment">// the output when the input has less than 4 dimensions</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; std::array&lt;unsigned int, 6&gt; iCoordinates{ 0 };</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 of pointers used to map the output coordinates to the input ones, in accordance with the axis</span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</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="l00064"></a><span class="lineno"> 64</span>&#160; std::array&lt;unsigned int *, 5&gt; oCoordinates = { &amp;iCoordinates[5],</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; &amp;iCoordinates[5],</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; &amp;iCoordinates[5],</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; &amp;iCoordinates[5],</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; &amp;iCoordinates[5] };</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">// Set the axis coordinate</span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; oCoordinates[axis] = &amp;iCoordinates[0];</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">// Map the output coordinates, accounting for the axis</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> dim_shift = 0;</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> dim = 0; dim &lt; inputNumDims; ++dim)</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">if</span>(dim == axis)</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; dim_shift++;</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; oCoordinates[dim + dim_shift] = &amp;iCoordinates[dim + 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;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="comment">// Alias for the input coordinates</span></div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;i = iCoordinates[0];</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;bi = iCoordinates[1];</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;ci = iCoordinates[2];</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;hi = iCoordinates[3];</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;wi = iCoordinates[4];</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 output 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;o = *(oCoordinates[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;bo = *(oCoordinates[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;co = *(oCoordinates[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;ho = *(oCoordinates[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;wo = *(oCoordinates[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">// Stack tensors</span></div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordflow">for</span>(; i &lt; iNumTensors; ++(i))</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>(bi = 0; bi &lt; iBatchSize; ++(bi))</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">for</span>(ci = 0; ci &lt; iChannels; ++(ci))</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">for</span>(hi = 0; hi &lt; iHeight; ++(hi))</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">for</span>(wi = 0; wi &lt; iWidth; ++(wi))</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; output[o * oWidth * oHeight * oChannels * oBatchSize +</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; bo * oWidth * oHeight * oChannels +</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; co * oWidth * oHeight +</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; ho * oWidth +</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; wo];</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; output.<a class="code" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Set</a>(inputs[i]-&gt;Get());</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; ++(*(inputs[i]));</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; }</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="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 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="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="l00045"></a><span class="lineno"> 45</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="l00046"></a><span class="lineno"> 46</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="l00047"></a><span class="lineno"> 47</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="l00048"></a><span class="lineno"> 48</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="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> oBatchSize = outputDims[1];</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> oChannels = (outputNumDims &gt; 2) ? outputDims[2] : 1;</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> oHeight = (outputNumDims &gt; 3) ? outputDims[3] : 1;</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> oWidth = (outputNumDims &gt; 4) ? outputDims[4] : 1;</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="comment">// Array to store the input coordinates</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="comment">// iCoordinates[0] = i, iCoordinates[1] = bi, iCoordinates[2] = ci</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="comment">// iCoordinates[3] = hi, iCoordinates[4] = wi, iCoordinates[5] = 0</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="comment">// iCoordinates[5] will be always zero and used for not incrementing</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="comment">// the output when the input has less than 4 dimensions</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; std::array&lt;unsigned int, 6&gt; iCoordinates{ 0 };</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 of pointers used to map the output coordinates to the input ones, in accordance with the axis</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</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="l00064"></a><span class="lineno"> 64</span>&#160; std::array&lt;unsigned int *, 5&gt; oCoordinates = { &amp;iCoordinates[5],</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; &amp;iCoordinates[5],</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; &amp;iCoordinates[5],</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; &amp;iCoordinates[5],</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; &amp;iCoordinates[5] };</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">// Set the axis coordinate</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; oCoordinates[axis] = &amp;iCoordinates[0];</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">// Map the output coordinates, accounting for the axis</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> dim_shift = 0;</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> dim = 0; dim &lt; inputNumDims; ++dim)</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">if</span>(dim == axis)</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; dim_shift++;</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; oCoordinates[dim + dim_shift] = &amp;iCoordinates[dim + 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; </div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="comment">// Alias for the input coordinates</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;i = iCoordinates[0];</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;bi = iCoordinates[1];</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;ci = iCoordinates[2];</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;hi = iCoordinates[3];</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;wi = iCoordinates[4];</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 output 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;o = *(oCoordinates[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;bo = *(oCoordinates[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;co = *(oCoordinates[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;ho = *(oCoordinates[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;wo = *(oCoordinates[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">// Stack tensors</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordflow">for</span>(; i &lt; iNumTensors; ++(i))</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>(bi = 0; bi &lt; iBatchSize; ++(bi))</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">for</span>(ci = 0; ci &lt; iChannels; ++(ci))</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">for</span>(hi = 0; hi &lt; iHeight; ++(hi))</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">for</span>(wi = 0; wi &lt; iWidth; ++(wi))</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; output[o * oWidth * oHeight * oChannels * oBatchSize +</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; bo * oWidth * oHeight * oChannels +</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; co * oWidth * oHeight +</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; ho * oWidth +</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; wo];</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; output.<a class="code" href="classarmnn_1_1_encoder.xhtml#ae3b62b846a9c239f332830b9e36030eb">Set</a>(inputs[i]-&gt;Get());</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; ++(*(inputs[i]));</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; }</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><!-- fragment -->
+<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#l01220">StackDescriptor::m_Axis</a>, <a class="el" href="_workload_data_8hpp_source.xhtml#l00026">QueueDescriptor::m_Inputs</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01222">StackDescriptor::m_NumInputs</a>, <a class="el" href="_workload_data_8hpp_source.xhtml#l00066">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>
+
</div>
</div>
<a id="a637fea04314a9870c1dc4355c1bed429"></a>
@@ -29164,6 +40330,9 @@ Variables</h2></td></tr>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr bool armnn::StrEqual </td>
@@ -29183,12 +40352,25 @@ Variables</h2></td></tr>
<td></td><td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
+ </tr>
+</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00174">174</a> of file <a class="el" href="_types_utils_8hpp_source.xhtml">TypesUtils.hpp</a>.</p>
-
+<div class="fragment"><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="keywordtype">bool</span> isEqual = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</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="l00178"></a><span class="lineno"> 178</span>&#160; {</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; isEqual = (strA[i] == strB[i]);</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">return</span> isEqual;</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160;}</div>
+</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_types_utils_8hpp_source.xhtml#l00186">ParseComputeDevice()</a>.</p>
-<div class="fragment"><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="keywordtype">bool</span> isEqual = <span class="keyword">true</span>;</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</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="l00178"></a><span class="lineno"> 178</span>&#160; {</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; isEqual = (strA[i] == strB[i]);</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">return</span> isEqual;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160;}</div></div><!-- fragment -->
+
</div>
</div>
<a id="a86d7a7168ac00b75b4971f9aad623698"></a>
@@ -29236,10 +40418,62 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_strided_slice_8cpp_source.xhtml#l00090">90</a> of file <a class="el" href="_strided_slice_8cpp_source.xhtml">StridedSlice.cpp</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 = armnn::numeric_cast&lt;int&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 = armnn::numeric_cast&lt;int&gt;(inputShape[1]);</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordtype">int</span> dim2 = armnn::numeric_cast&lt;int&gt;(inputShape[2]);</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordtype">int</span> dim3 = armnn::numeric_cast&lt;int&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><!-- fragment -->
+<p class="reference">References <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</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>, and <a class="el" href="_descriptors_8hpp_source.xhtml#l01293">StridedSliceDescriptor::m_Stride</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>
-<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>
@@ -29267,13 +40501,47 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_logging_8hpp_source.xhtml#l00043">43</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>
+<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="comment">// Transfer to lower case</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; std::transform(level.begin(), level.end(), level.begin(),</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; [](<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> c){ return std::tolower(c); }</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; <span class="keywordflow">if</span> (level == <span class="stringliteral">&quot;trace&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; <span class="keywordflow">return</span> LogSeverity::Trace;</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">else</span> <span class="keywordflow">if</span> (level == <span class="stringliteral">&quot;debug&quot;</span>)</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">return</span> <a class="code" href="namespacearmnn.xhtml#a181ecb133401da6ff2916c192ca04d48">LogSeverity::Debug</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (level == <span class="stringliteral">&quot;info&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="keywordflow">return</span> LogSeverity::Info;</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">else</span> <span class="keywordflow">if</span> (level == <span class="stringliteral">&quot;warning&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> LogSeverity::Warning;</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">else</span> <span class="keywordflow">if</span> (level == <span class="stringliteral">&quot;error&quot;</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">return</span> LogSeverity::Error;</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">else</span> <span class="keywordflow">if</span> (level == <span class="stringliteral">&quot;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; <span class="keywordflow">return</span> LogSeverity::Fatal;</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">else</span></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">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="l00077"></a><span class="lineno"> 77</span>&#160; <span class="stringliteral">&quot;&#39;. Valid options: trace, debug, info, warning, error, fatal&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;}</div>
+</div><!-- fragment -->
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3daa603905470e2a5b8c13e96b579ef0dba">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#l00229">DelegateOptions::SetLoggingSeverity()</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="comment">// Transfer to lower case</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; std::transform(level.begin(), level.end(), level.begin(),</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</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="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; <span class="keywordflow">if</span> (level == <span class="stringliteral">&quot;trace&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; <span class="keywordflow">return</span> LogSeverity::Trace;</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">else</span> <span class="keywordflow">if</span> (level == <span class="stringliteral">&quot;debug&quot;</span>)</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">return</span> <a class="code" href="namespacearmnn.xhtml#a181ecb133401da6ff2916c192ca04d48">LogSeverity::Debug</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (level == <span class="stringliteral">&quot;info&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="keywordflow">return</span> LogSeverity::Info;</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">else</span> <span class="keywordflow">if</span> (level == <span class="stringliteral">&quot;warning&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> LogSeverity::Warning;</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">else</span> <span class="keywordflow">if</span> (level == <span class="stringliteral">&quot;error&quot;</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">return</span> LogSeverity::Error;</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">else</span> <span class="keywordflow">if</span> (level == <span class="stringliteral">&quot;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; <span class="keywordflow">return</span> LogSeverity::Fatal;</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">else</span></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">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="l00077"></a><span class="lineno"> 77</span>&#160; <span class="stringliteral">&quot;&#39;. Valid options: trace, debug, info, warning, error, fatal&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;}</div><div class="ttc" id="namespacearmnn_xhtml_a181ecb133401da6ff2916c192ca04d48"><div class="ttname"><a href="namespacearmnn.xhtml#a181ecb133401da6ff2916c192ca04d48">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, bool outputsToFile)</div><div class="ttdef"><b>Definition:</b> <a href="_debug_8cpp_source.xhtml#l00097">Debug.cpp:97</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>
@@ -29303,12 +40571,18 @@ Variables</h2></td></tr>
</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>
+<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><!-- fragment -->
+<p class="reference">References <a class="el" href="_descriptors_8cpp_source.xhtml#l00359">swap()</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="_backend_id_8hpp_source.xhtml#l00102">BackendId::operator=()</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#l00102">BackendRegistry::Swap()</a>, and <a class="el" href="_descriptors_8cpp_source.xhtml#l00359">swap()</a>.</p>
-<p class="reference">Referenced by <a class="el" href="_backend_id_8hpp_source.xhtml#l00102">BackendId::operator=()</a>, <a class="el" href="_squash_equal_siblings_8hpp_source.xhtml#l00025">SquashEqualSiblingsImpl&lt; Comparable &gt;::Run()</a>, and <a class="el" href="_backend_registry_8cpp_source.xhtml#l00102">BackendRegistry::Swap()</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>
@@ -29338,12 +40612,16 @@ Variables</h2></td></tr>
</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>
+<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><!-- fragment -->
+<p class="reference">References <a class="el" href="_descriptors_8cpp_source.xhtml#l00350">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="a2748f45e58b1c612d473043f711d1434"></a>
@@ -29385,9 +40663,13 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_detection_post_process_8cpp_source.xhtml#l00024">24</a> of file <a class="el" href="_detection_post_process_8cpp_source.xhtml">DetectionPostProcess.cpp</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 -->
<p class="reference">Referenced by <a class="el" href="_detection_post_process_8cpp_source.xhtml#l00140">DetectionPostProcess()</a>, and <a class="el" href="_detection_post_process_8cpp_source.xhtml#l00049">NonMaxSuppression()</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="a40fd83a6a69162220440c353f27e8c78"></a>
@@ -29395,6 +40677,9 @@ Variables</h2></td></tr>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr const char* armnn::TosaRefBackendId </td>
@@ -29403,12 +40688,18 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
+ </tr>
+</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_tosa_ref_backend_id_8hpp_source.xhtml#l00010">10</a> of file <a class="el" href="_tosa_ref_backend_id_8hpp_source.xhtml">TosaRefBackendId.hpp</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;TosaRef&quot;</span>; }</div>
+</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_tosa_ref_backend_8cpp_source.xhtml#l00032">TosaRefBackend::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;TosaRef&quot;</span>; }</div></div><!-- fragment -->
+
</div>
</div>
<a id="a9cc3716d6ece2068215d72aae0ad7918"></a>
@@ -29428,7 +40719,10 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_tosa_ref_pre_compiled_workload_8cpp_source.xhtml#l00130">130</a> of file <a class="el" href="_tosa_ref_pre_compiled_workload_8cpp_source.xhtml">TosaRefPreCompiledWorkload.cpp</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="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;}</div></div><!-- fragment -->
+<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="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;}</div>
+</div><!-- fragment -->
</div>
</div>
<a id="ab6c9f1100acdf0b61ae55acd3447e734"></a>
@@ -29436,6 +40730,9 @@ Variables</h2></td></tr>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr const char* armnn::TosaRefTensorHandleFactoryId </td>
@@ -29444,12 +40741,18 @@ Variables</h2></td></tr>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
+ </tr>
+</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_tosa_ref_tensor_handle_factory_8hpp_source.xhtml#l00015">15</a> of file <a class="el" href="_tosa_ref_tensor_handle_factory_8hpp_source.xhtml">TosaRefTensorHandleFactory.hpp</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/TosaRef/TensorHandleFactory&quot;</span>; }</div>
+</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_tosa_ref_tensor_handle_factory_8cpp_source.xhtml#l00016">TosaRefTensorHandleFactory::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/TosaRef/TensorHandleFactory&quot;</span>; }</div></div><!-- fragment -->
+
</div>
</div>
<a id="affec174d91f234497dfbceba5e251dee"></a>
@@ -29515,20 +40818,150 @@ Variables</h2></td></tr>
</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>
-
+<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><!-- fragment -->
<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#l01428">TransposeConvolution2dDescriptor::m_BiasEnabled</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01430">TransposeConvolution2dDescriptor::m_DataLayout</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01416">TransposeConvolution2dDescriptor::m_PadLeft</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01420">TransposeConvolution2dDescriptor::m_PadTop</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01424">TransposeConvolution2dDescriptor::m_StrideX</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01426">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>
+<a id="a1c60a2624c7cabd60237bbeec07c70a0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1c60a2624c7cabd60237bbeec07c70a0">&#9670;&nbsp;</a></span>TrueFunc()</h2>
<div class="memitem">
<div class="memproto">
@@ -29536,7 +40969,7 @@ Variables</h2></td></tr>
<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="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>
@@ -29554,10 +40987,14 @@ Variables</h2></td></tr>
</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 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><!-- fragment -->
+<p class="reference">References <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused()</a>.</p>
+
</div>
</div>
<a id="a52928589effc0b9cbb170a93ea792d47"></a>
@@ -29597,11 +41034,76 @@ Variables</h2></td></tr>
</dl>
<p class="definition">Definition at line <a class="el" href="_loaded_network_8cpp_source.xhtml#l00098">98</a> of file <a class="el" href="_loaded_network_8cpp_source.xhtml">LoadedNetwork.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#l00251">BackendOptions::BackendOption::GetName()</a>, <a class="el" href="_backend_options_8hpp_source.xhtml#l00252">BackendOptions::BackendOption::GetValue()</a>, <a class="el" href="_i_runtime_8hpp_source.xhtml#l00072">INetworkProperties::m_InputSource</a>, <a class="el" href="_i_runtime_8hpp_source.xhtml#l00073">INetworkProperties::m_OutputSource</a>, and <a class="el" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a>.</p>
-
-<p class="reference">Referenced by <a class="el" href="_loaded_network_8cpp_source.xhtml#l00170">LoadedNetwork::MakeLoadedNetwork()</a>.</p>
-<div class="fragment"><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">// Find the &quot;Global&quot; backend options. During the optimize phase the values of importEnabled and exportEnabled are</span></div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="comment">// added as backend options.</span></div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keyword">const</span> vector&lt;BackendOptions&gt;::iterator&amp; backendItr =</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; find_if(optimizedOptions.begin(), optimizedOptions.end(), [](<span class="keyword">const</span> BackendOptions&amp; backend) {</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keywordflow">if</span> (backend.GetBackendId().Get() == <span class="stringliteral">&quot;Global&quot;</span>)</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">return</span> <span class="keyword">true</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">else</span></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">return</span> <span class="keyword">false</span>;</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="keywordtype">bool</span> importEnabled = <span class="keyword">false</span>;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keywordtype">bool</span> exportEnabled = <span class="keyword">false</span>;</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordflow">if</span> (backendItr != optimizedOptions.end())</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="comment">// Find the importEnabled and exportEnabled values.</span></div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; backendItr-&gt;GetOptionCount(); 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="keyword">const</span> BackendOptions::BackendOption&amp; option = backendItr-&gt;GetOption(i);</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordflow">if</span> (option.GetName() == <span class="stringliteral">&quot;ImportEnabled&quot;</span>)</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; importEnabled = option.GetValue().AsBool();</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">if</span> (option.GetName() == <span class="stringliteral">&quot;ExportEnabled&quot;</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; exportEnabled = option.GetValue().AsBool();</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="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;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="comment">// Now that we have values for import and export compare them to the MemorySource variables.</span></div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="comment">// Any value of MemorySource that&#39;s not &quot;Undefined&quot; implies that we need to do an import of some kind.</span></div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">if</span> ((networkProperties.m_InputSource == MemorySource::Undefined &amp;&amp; importEnabled) ||</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; (networkProperties.m_InputSource != MemorySource::Undefined &amp;&amp; !importEnabled))</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; {</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keyword">auto</span> message = fmt::format(<span class="stringliteral">&quot;The input memory source specified, &#39;{0}&#39;,&quot;</span>, networkProperties.m_InputSource);</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keywordflow">if</span> (!importEnabled)</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; message.append(<span class="stringliteral">&quot; requires that memory import be enabled. However, &quot;</span></div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="stringliteral">&quot;it was disabled when this network was optimized.&quot;</span>);</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">else</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; message.append(<span class="stringliteral">&quot; requires that memory import be disabled. However, &quot;</span></div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="stringliteral">&quot;it was enabled when this network was optimized.&quot;</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; <span class="keywordflow">throw</span> InvalidArgumentException(message);</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="keywordflow">if</span> ((networkProperties.m_OutputSource == MemorySource::Undefined &amp;&amp; exportEnabled) ||</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; (networkProperties.m_OutputSource != MemorySource::Undefined &amp;&amp; !exportEnabled))</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">auto</span> message = fmt::format(<span class="stringliteral">&quot;The output memory source specified, &#39;{0}&#39;,&quot;</span>, networkProperties.m_OutputSource);</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keywordflow">if</span> (!exportEnabled)</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; message.append(<span class="stringliteral">&quot; requires that memory export be enabled. However, &quot;</span></div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="stringliteral">&quot;it was disabled when this network was optimized.&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; <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; message.append(<span class="stringliteral">&quot; requires that memory export be disabled. However, &quot;</span></div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="stringliteral">&quot;it was enabled when this network was optimized.&quot;</span>);</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">throw</span> InvalidArgumentException(message);</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="comment">// anonymous</span></div></div><!-- fragment -->
+<div class="fragment"><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">// Find the &quot;Global&quot; backend options. During the optimize phase the values of importEnabled and exportEnabled are</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="comment">// added as backend options.</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keyword">const</span> vector&lt;BackendOptions&gt;::iterator&amp; backendItr =</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; find_if(optimizedOptions.begin(), optimizedOptions.end(), [](<span class="keyword">const</span> BackendOptions&amp; backend) {</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; if (backend.GetBackendId().Get() == <span class="stringliteral">&quot;Global&quot;</span>)</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; return true;</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">else</span></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; return false;</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="keywordtype">bool</span> importEnabled = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keywordtype">bool</span> exportEnabled = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordflow">if</span> (backendItr != optimizedOptions.end())</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="comment">// Find the importEnabled and exportEnabled values.</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; backendItr-&gt;GetOptionCount(); 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="keyword">const</span> BackendOptions::BackendOption&amp; option = backendItr-&gt;GetOption(i);</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordflow">if</span> (option.GetName() == <span class="stringliteral">&quot;ImportEnabled&quot;</span>)</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; importEnabled = option.GetValue().AsBool();</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">if</span> (option.GetName() == <span class="stringliteral">&quot;ExportEnabled&quot;</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; exportEnabled = option.GetValue().AsBool();</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="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; </div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="comment">// Now that we have values for import and export compare them to the MemorySource variables.</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="comment">// Any value of MemorySource that&#39;s not &quot;Undefined&quot; implies that we need to do an import of some kind.</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">if</span> ((networkProperties.m_InputSource == MemorySource::Undefined &amp;&amp; importEnabled) ||</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; (networkProperties.m_InputSource != MemorySource::Undefined &amp;&amp; !importEnabled))</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; {</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keyword">auto</span> message = fmt::format(<span class="stringliteral">&quot;The input memory source specified, &#39;{0}&#39;,&quot;</span>, networkProperties.m_InputSource);</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keywordflow">if</span> (!importEnabled)</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; message.append(<span class="stringliteral">&quot; requires that memory import be enabled. However, &quot;</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="stringliteral">&quot;it was disabled when this network was optimized.&quot;</span>);</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">else</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; message.append(<span class="stringliteral">&quot; requires that memory import be disabled. However, &quot;</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="stringliteral">&quot;it was enabled when this network was optimized.&quot;</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; <span class="keywordflow">throw</span> InvalidArgumentException(message);</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="keywordflow">if</span> ((networkProperties.m_OutputSource == MemorySource::Undefined &amp;&amp; exportEnabled) ||</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; (networkProperties.m_OutputSource != MemorySource::Undefined &amp;&amp; !exportEnabled))</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">auto</span> message = fmt::format(<span class="stringliteral">&quot;The output memory source specified, &#39;{0}&#39;,&quot;</span>, networkProperties.m_OutputSource);</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keywordflow">if</span> (!exportEnabled)</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; message.append(<span class="stringliteral">&quot; requires that memory export be enabled. However, &quot;</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="stringliteral">&quot;it was disabled when this network was optimized.&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; <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; message.append(<span class="stringliteral">&quot; requires that memory export be disabled. However, &quot;</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="stringliteral">&quot;it was enabled when this network was optimized.&quot;</span>);</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">throw</span> InvalidArgumentException(message);</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="comment">// anonymous</span></div>
+</div><!-- fragment -->
</div>
</div>
<a id="acda1e285d7be5f9b456d98bd29be4591"></a>
@@ -29629,10 +41131,12 @@ Variables</h2></td></tr>
</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 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><!-- fragment -->
+<p class="reference">References <a class="el" href="_cl_context_schema__generated_8h_source.xhtml#l00148">ClContextIdentifier()</a>.</p>
+
</div>
</div>
<a id="acc7af054e783ad1bf6dce0111366d64c"></a>
@@ -29660,10 +41164,12 @@ Variables</h2></td></tr>
</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 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><!-- fragment -->
+<p class="reference">References <a class="el" href="_cl_context_schema__generated_8h_source.xhtml#l00148">ClContextIdentifier()</a>.</p>
+
</div>
</div>
<a id="a9667bea652e3a5ef81fea59b71513ced"></a>
@@ -29701,13 +41207,19 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_types_utils_8hpp_source.xhtml#l00355">355</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#l00206">GetDataTypeName()</a>, and <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetShape()</a>.</p>
-<div class="fragment"><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160;{</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <span class="keywordflow">if</span> (info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>() != dataType)</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::stringstream ss;</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</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="l00361"></a><span class="lineno"> 361</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="l00362"></a><span class="lineno"> 362</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="l00363"></a><span class="lineno"> 363</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="l00364"></a><span class="lineno"> 364</span>&#160; }</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</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#l00206">TypesUtils.hpp:206</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 class="fragment"><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160;{</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetDataType() != dataType)</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::stringstream ss;</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</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>(<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetDataType())</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; &lt;&lt; <span class="stringliteral">&quot; for tensor:&quot;</span> &lt;&lt; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.GetShape()</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</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="l00363"></a><span class="lineno"> 363</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="l00364"></a><span class="lineno"> 364</span>&#160; }</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160;}</div>
</div><!-- fragment -->
+<p class="reference">References <a class="el" href="_types_utils_8hpp_source.xhtml#l00206">GetDataTypeName()</a>, and <a class="el" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.</p>
+
</div>
</div>
<a id="a2192b5ff59aacdb27f8b0238323915dc"></a>
@@ -29722,7 +41234,7 @@ Variables</h2></td></tr>
<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="paramtype">const cl::Error &amp;&#160;</td>
<td class="paramname"><em>clError</em>, </td>
</tr>
<tr>
@@ -29745,11 +41257,17 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_cl_workload_utils_8hpp_source.xhtml#l00152">152</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="l00153"></a><span class="lineno"> 153</span>&#160;{</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; std::stringstream message;</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</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="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">return</span> RuntimeException(message.str(), location);</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;}</div>
+</div><!-- fragment -->
<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#l00160">RunClFunction()</a>.</p>
-<div class="fragment"><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; std::stringstream message;</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</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="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">return</span> RuntimeException(message.str(), location);</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;}</div></div><!-- fragment -->
+<p class="reference">Referenced by <a class="el" href="_cl_workload_utils_8hpp_source.xhtml#l00160">RunClFunction()</a>.</p>
+
</div>
</div>
<h2 class="groupheader">Variable Documentation</h2>
@@ -29790,19 +41308,25 @@ Variables</h2></td></tr>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr unsigned int EXPIRE_RATE = 3U</td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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#l00037">37</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>
@@ -29810,15 +41334,25 @@ Variables</h2></td></tr>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr bool g_AggregateProfilingEventsByInference = true</td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
+<p class="reference">Referenced by <a class="el" href="_profiling_8cpp_source.xhtml#l00481">ProfilerImpl::AnalyzeEventsAndWriteResults()</a>.</p>
+
</div>
</div>
<a id="a43ecd194778b7653578044060ba8695e"></a>
@@ -29826,15 +41360,25 @@ Variables</h2></td></tr>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr std::size_t g_ProfilingEventCountHint = 1024</td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
+<p class="reference">Referenced by <a class="el" href="_profiling_8cpp_source.xhtml#l00164">ProfilerImpl::ProfilerImpl()</a>.</p>
+
</div>
</div>
<a id="a41794552ff67b0dad16de60f9b8e7d7c"></a>
@@ -29842,15 +41386,25 @@ Variables</h2></td></tr>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr bool g_WriteProfilingEventSequence = true</td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
+<p class="reference">Referenced by <a class="el" href="_profiling_8cpp_source.xhtml#l00113">ProfilerImpl::AnalyzeEventSequenceAndWriteResults()</a>.</p>
+
</div>
</div>
<a id="a6ce7e56eb10e440463f09eee8f213adc"></a>
@@ -29858,15 +41412,25 @@ Variables</h2></td></tr>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr bool g_WriteReportToStdOutOnProfilerDestruction = false</td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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>
+<p class="reference">Referenced by <a class="el" href="_profiling_8cpp_source.xhtml#l00176">ProfilerImpl::~ProfilerImpl()</a>.</p>
+
</div>
</div>
<a id="a15bdba6c60d1926c973764e74da4e30f"></a>
@@ -29890,11 +41454,19 @@ Variables</h2></td></tr>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr unsigned int LOWEST_CAPTURE_PERIOD = 10000u</td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
+ </tr>
+</table>
</div><div class="memdoc">
<p>The lowest performance data capture interval we support is 10 miliseconds. </p>
@@ -29908,16 +41480,24 @@ Variables</h2></td></tr>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr unsigned int MaxNumOfTensorDimensions = 5U</td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
+ </tr>
+</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00031">31</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#l03957">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#l02882">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="_tosa_layer_support_rules_8hpp_source.xhtml#l00036">TosaTensorNumDimensionsWithinBounds::TosaTensorNumDimensionsWithinBounds()</a>, <a class="el" href="_deserializer_8cpp_source.xhtml#l00616">armnnDeserializer::ToTensorInfo()</a>, and <a class="el" href="_transpose_8cpp_source.xhtml#l00098">armnnUtils::TransposeTensorShape()</a>.</p>
+<p class="reference">Referenced by <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="_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="_tosa_layer_support_rules_8hpp_source.xhtml#l00036">TosaTensorNumDimensionsWithinBounds::TosaTensorNumDimensionsWithinBounds()</a>, <a class="el" href="_deserializer_8cpp_source.xhtml#l00616">armnnDeserializer::ToTensorInfo()</a>, and <a class="el" href="_transpose_8cpp_source.xhtml#l00098">armnnUtils::TransposeTensorShape()</a>.</p>
</div>
</div>
@@ -29932,7 +41512,9 @@ Variables</h2></td></tr>
</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>
+<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><!-- 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>
@@ -29949,15 +41531,23 @@ Variables</h2></td></tr>
</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#a4f1a1b88b01d8dfda3803776e0778a49">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_a4f1a1b88b01d8dfda3803776e0778a49"><div class="ttname"><a href="namespacearmnn.xhtml#a4f1a1b88b01d8dfda3803776e0778a49">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_int)</div><div class="ttdef"><b>Definition:</b> <a href="_gather_8cpp_source.xhtml#l00014">Gather.cpp:14</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="_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="_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_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="_fully_connected_8cpp_source.xhtml#l00015">FullyConnected.cpp:15</a></div></div>
+<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#a4f1a1b88b01d8dfda3803776e0778a49">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><!-- 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>
@@ -29979,7 +41569,7 @@ Variables</h2></td></tr>
<p class="definition">Definition at line <a class="el" href="_profiling_8cpp_source.xhtml#l00591">591</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#l00605">ProfilerManager::GetProfiler()</a>.</p>
+<p class="reference">Referenced by <a class="el" href="_profiling_8cpp_source.xhtml#l00605">ProfilerManager::GetProfiler()</a>, and <a class="el" href="_profiling_8cpp_source.xhtml#l00600">ProfilerManager::RegisterProfiler()</a>.</p>
</div>
</div>
@@ -29988,28 +41578,451 @@ Variables</h2></td></tr>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr size_t wordSize = sizeof(size_t) * 8</td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">constexpr</span></span> </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 -->
+<div class="ttc" id="anamespacearmnn_1_1optimizations_xhtml_a9c0a3a9a388a01bc21e20a16e70055f0"><div class="ttname"><a href="namespacearmnn_1_1optimizations.xhtml#a9c0a3a9a388a01bc21e20a16e70055f0">armnn::optimizations::InsertDebugToFileLayer</a></div><div class="ttdeci">OptimizeForType&lt; Layer, AddDebugToFileImpl &gt; InsertDebugToFileLayer</div><div class="ttdef"><b>Definition:</b> <a href="_add_debug_8hpp_source.xhtml#l00054">AddDebug.hpp:54</a></div></div>
+<div class="ttc" id="anamespacearmnn_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 class="ttc" id="aclassarmnn_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="anamespacearmnn_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="anamespacearmnn_xhtml_a044ea0cc993d4d1fbe4ec877b17b8d39"><div class="ttname"><a href="namespacearmnn.xhtml#a044ea0cc993d4d1fbe4ec877b17b8d39">armnn::Slice</a></div><div class="ttdeci">void Slice(const TensorInfo &amp;inputInfo, const SliceDescriptor &amp;descriptor, const void *inputData, void *outputData, unsigned int dataTypeSize)</div><div class="ttdef"><b>Definition:</b> <a href="_slice_8cpp_source.xhtml#l00014">Slice.cpp:14</a></div></div>
+<div class="ttc" id="anamespacearmnn_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 class="ttc" id="anamespacearmnn_xhtml_a56297e0f7b215eea46c818cb7528d9eaa1e34af023adeb7d5f484f8eb4b9826b6"><div class="ttname"><a href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa1e34af023adeb7d5f484f8eb4b9826b6">armnn::ActivationFunction::Abs</a></div><div class="ttdeci">@ Abs</div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a56297e0f7b215eea46c818cb7528d9eaaed67cf7d54c570e4c4891800f085f41d"><div class="ttname"><a href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaaed67cf7d54c570e4c4891800f085f41d">armnn::ActivationFunction::Elu</a></div><div class="ttdeci">@ Elu</div></div>
+<div class="ttc" id="a_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="anamespacearmnn_xhtml_acbf7c9a630f03ece800f807d946239ab"><div class="ttname"><a href="namespacearmnn.xhtml#acbf7c9a630f03ece800f807d946239ab">armnn::SelectTensorHandleStrategy</a></div><div class="ttdeci">OptimizationResult SelectTensorHandleStrategy(Graph &amp;optGraph, BackendsMap &amp;backends, TensorHandleFactoryRegistry &amp;registry, bool importEnabled, bool exportEnabled, Optional&lt; std::vector&lt; std::string &gt; &amp; &gt; errMessages)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.xhtml#l01502">Network.cpp:1502</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a0ea4ff80d0075ff847e96dc12e734368"><div class="ttname"><a href="namespacearmnn.xhtml#a0ea4ff80d0075ff847e96dc12e734368">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#l01007">Network.cpp:1007</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a8e1f31031ad31cd8cc22d7c9daa32681ab4b379bf7ded74c07595ccb85bc6fdc3"><div class="ttname"><a href="namespacearmnn.xhtml#a8e1f31031ad31cd8cc22d7c9daa32681ab4b379bf7ded74c07595ccb85bc6fdc3">armnn::Dimensionality::Specified</a></div><div class="ttdeci">@ Specified</div></div>
+<div class="ttc" id="anamespacearmnn_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 class="ttc" id="astructarmnn_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#l00447">Descriptors.hpp:447</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a56943a0946e5f15e5e58054b8e7a04a4a4dd48794eb3305a0f5aece88b111a97b"><div class="ttname"><a href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a4dd48794eb3305a0f5aece88b111a97b">armnn::LayerType::MemCopy</a></div><div class="ttdeci">@ MemCopy</div></div>
+<div class="ttc" id="astructarmnn_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#l00389">Descriptors.hpp:389</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a8746512fab5ec10c2c57800c66311ba7"><div class="ttname"><a href="namespacearmnn.xhtml#a8746512fab5ec10c2c57800c66311ba7">armnn::BatchToSpaceNd</a></div><div class="ttdeci">void BatchToSpaceNd(const DataLayoutIndexed &amp;dataLayout, const TensorInfo &amp;inputTensorInfo, const TensorInfo &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, Decoder&lt; float &gt; &amp;inputDecoder, Encoder&lt; float &gt; &amp;outputEncoder)</div><div class="ttdef"><b>Definition:</b> <a href="_batch_to_space_nd_8cpp_source.xhtml#l00035">BatchToSpaceNd.cpp:35</a></div></div>
+<div class="ttc" id="anamespacearmnn_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 class="ttc" id="anamespacearmnn_xhtml_abc05539fc6e7907f32ef0fb242e3b3b0a3d6c9ac08ada31c184094bbc67afe00d"><div class="ttname"><a href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0a3d6c9ac08ada31c184094bbc67afe00d">armnn::ReduceOperation::Mean</a></div><div class="ttdeci">@ Mean</div></div>
+<div class="ttc" id="anamespacearmnn_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 class="ttc" id="anamespacearmnn_xhtml_ac40d3e4035af5fbe68d9e126a8d6367c"><div class="ttname"><a href="namespacearmnn.xhtml#ac40d3e4035af5fbe68d9e126a8d6367c">armnn::CalculateGatherNdKeyIndices</a></div><div class="ttdeci">std::map&lt; std::string, unsigned int &gt; CalculateGatherNdKeyIndices(TensorInfo inputInfo0, TensorInfo inputInfo1)</div><div class="ttdoc">Calculates the key index values needed for GatherNd: N, ND, K, W, C (N is always 1)</div><div class="ttdef"><b>Definition:</b> <a href="_workload_utils_8cpp_source.xhtml#l00300">WorkloadUtils.cpp:300</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a56943a0946e5f15e5e58054b8e7a04a4a31d953b9d49a6b4378f45097047976d0"><div class="ttname"><a href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a31d953b9d49a6b4378f45097047976d0">armnn::LayerType::Softmax</a></div><div class="ttdeci">@ Softmax</div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_adf2e5515c4c36a3e7e46bb8b83c6754ea3237fbc8204064c106cb9080088a17cb"><div class="ttname"><a href="namespacearmnn.xhtml#adf2e5515c4c36a3e7e46bb8b83c6754ea3237fbc8204064c106cb9080088a17cb">armnn::OutputShapeRounding::Ceiling</a></div><div class="ttdeci">@ Ceiling</div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_aff209afc1dc598da399e3e78617ce016a78d1be0baa31e083ae8da99aaedaf650"><div class="ttname"><a href="namespacearmnn.xhtml#aff209afc1dc598da399e3e78617ce016a78d1be0baa31e083ae8da99aaedaf650">armnn::EdgeStrategy::DirectCompatibility</a></div><div class="ttdeci">@ DirectCompatibility</div><div class="ttdoc">No strategy has been defined. Used internally to verify integrity of optimizations.</div></div>
+<div class="ttc" id="astructarmnn_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="anamespacearmnn_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#l00289">TypesUtils.hpp:289</a></div></div>
+<div class="ttc" id="anamespacearmnn_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#l00015">BackendRegistry.cpp:15</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a93a3ba385cad27c4774e5fe64c025d3da0eaadb4fcb48a0a0ed7bc9868be9fbaa"><div class="ttname"><a href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da0eaadb4fcb48a0a0ed7bc9868be9fbaa">armnn::LogSeverity::Warning</a></div><div class="ttdeci">@ Warning</div></div>
+<div class="ttc" id="anamespacearmnn_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="astructarmnn_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#l00461">Descriptors.hpp:461</a></div></div>
+<div class="ttc" id="anamespacearmnn_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#l00254">FoldPadIntoLayer2d.hpp:254</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a8e1f31031ad31cd8cc22d7c9daa32681a4b7d504abac49ba24b4df86c129d3cbc"><div class="ttname"><a href="namespacearmnn.xhtml#a8e1f31031ad31cd8cc22d7c9daa32681a4b7d504abac49ba24b4df86c129d3cbc">armnn::Dimensionality::NotSpecified</a></div><div class="ttdeci">@ NotSpecified</div></div>
+<div class="ttc" id="anamespacearmnn_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="_depth_to_space_8cpp_source.xhtml#l00018">DepthToSpace.cpp:18</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a10c50bc964cc8cc559eebcd7df5a8af3a280957607e14bb2ccc1155ae6569aee1"><div class="ttname"><a href="namespacearmnn.xhtml#a10c50bc964cc8cc559eebcd7df5a8af3a280957607e14bb2ccc1155ae6569aee1">armnn::CapabilityClass::CapabilityClassMax</a></div><div class="ttdeci">@ CapabilityClassMax</div></div>
+<div class="ttc" id="anamespacearmnn_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="_reduce_8cpp_source.xhtml#l00040">Reduce.cpp:40</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a707090747256af276c389e0cf1cb0a9aa6adf97f83acf6453d4a6a4b1070f3754"><div class="ttname"><a href="namespacearmnn.xhtml#a707090747256af276c389e0cf1cb0a9aa6adf97f83acf6453d4a6a4b1070f3754">armnn::TuningLevel::None</a></div><div class="ttdeci">@ None</div></div>
+<div class="ttc" id="anamespacearmnn_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="anamespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">armnn::DataType::QAsymmU8</a></div><div class="ttdeci">@ QAsymmU8</div></div>
+<div class="ttc" id="a_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="anamespacearmnn_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 class="ttc" id="anamespacearmnn_xhtml_a2d299363c9fc33334c571fa29ca4f58caf5f286e73bda105e538310b3190f75c5"><div class="ttname"><a href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58caf5f286e73bda105e538310b3190f75c5">armnn::ComparisonOperation::Equal</a></div><div class="ttdeci">@ Equal</div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a56297e0f7b215eea46c818cb7528d9eaa32a843da6ea40ab3b17a3421ccdf671b"><div class="ttname"><a href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa32a843da6ea40ab3b17a3421ccdf671b">armnn::ActivationFunction::Linear</a></div><div class="ttdeci">@ Linear</div></div>
+<div class="ttc" id="anamespacearmnn_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 class="ttc" id="anamespacearmnn_1_1optimizations_xhtml_ad668074369437a111649f51296ff8959"><div class="ttname"><a href="namespacearmnn_1_1optimizations.xhtml#ad668074369437a111649f51296ff8959">armnn::optimizations::FusePermuteIntoConstLayer</a></div><div class="ttdeci">OptimizeForConnection&lt; ConstantLayer, PermuteLayer, ConvertConstPermuteLayersToConstLayers &gt; FusePermuteIntoConstLayer</div><div class="ttdef"><b>Definition:</b> <a href="_convert_const_permute_layers_to_const_layers_8hpp_source.xhtml#l00124">ConvertConstPermuteLayersToConstLayers.hpp:124</a></div></div>
+<div class="ttc" id="anamespacearmnn_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#l00079">NetworkUtils.cpp:79</a></div></div>
+<div class="ttc" id="anamespacearmnn_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#l00253">INetwork.hpp:253</a></div></div>
+<div class="ttc" id="anamespacearmnn_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#l00012">Utils.hpp:12</a></div></div>
+<div class="ttc" id="anamespacearmnn_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#l00062">Types.hpp:62</a></div></div>
+<div class="ttc" id="anamespacearmnn_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 class="ttc" id="a_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#l00021">ClWorkloadUtils.hpp:21</a></div></div>
+<div class="ttc" id="aclassarmnn_1_1_tensor_shape_xhtml_a5a212540c00931bd2a4b4041beda33ae"><div class="ttname"><a href="classarmnn_1_1_tensor_shape.xhtml#a5a212540c00931bd2a4b4041beda33ae">armnn::TensorShape::GetDimensionality</a></div><div class="ttdeci">Dimensionality GetDimensionality() const</div><div class="ttdoc">Function that returns the tensor type.</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00092">Tensor.hpp:92</a></div></div>
+<div class="ttc" id="anamespacearmnn_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="anamespacearmnn_xhtml_a2da4db0140d1a6dc69c9c82e9ef5379ea103aa83df42877d5f9baeafdbf620b55"><div class="ttname"><a href="namespacearmnn.xhtml#a2da4db0140d1a6dc69c9c82e9ef5379ea103aa83df42877d5f9baeafdbf620b55">armnn::LogicalBinaryOperation::LogicalAnd</a></div><div class="ttdeci">@ LogicalAnd</div></div>
+<div class="ttc" id="anamespacearmnn_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#l00054">ArmComputeSubgraphUtils.hpp:54</a></div></div>
+<div class="ttc" id="aclassarmnn_1_1_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_exception.xhtml">armnn::Exception</a></div><div class="ttdoc">Base class for all ArmNN exceptions so that users can filter to just those.</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00046">Exceptions.hpp:46</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_ae060224135f57f926cbda9d2732a2b1fa497ab261a562e316736c2cb59b839d32"><div class="ttname"><a href="namespacearmnn.xhtml#ae060224135f57f926cbda9d2732a2b1fa497ab261a562e316736c2cb59b839d32">armnn::ProfilingDetailsMethod::DetailsWithEvents</a></div><div class="ttdeci">@ DetailsWithEvents</div></div>
+<div class="ttc" id="anamespacearmnn_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="_detection_post_process_8cpp_source.xhtml#l00017">DetectionPostProcess.cpp:17</a></div></div>
+<div class="ttc" id="anamespacearmnn_utils_xhtml_ab53d94ea22b51c6bcdf9584644bd67bb"><div class="ttname"><a href="namespacearmnn_utils.xhtml#ab53d94ea22b51c6bcdf9584644bd67bb">armnnUtils::GetTensorShape</a></div><div class="ttdeci">armnn::TensorShape GetTensorShape(unsigned int numberOfBatches, unsigned int numberOfChannels, unsigned int height, unsigned int width, const armnn::DataLayout dataLayout)</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_utils_8cpp_source.xhtml#l00019">TensorUtils.cpp:19</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a56943a0946e5f15e5e58054b8e7a04a4a46f3ea056caa3126b91f3f70beea068c"><div class="ttname"><a href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a46f3ea056caa3126b91f3f70beea068c">armnn::LayerType::Map</a></div><div class="ttdeci">@ Map</div></div>
+<div class="ttc" id="a_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#l00035">Utils.hpp:35</a></div></div>
+<div class="ttc" id="a_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="anamespacearmnn_xhtml_a14fcd7f88d11cea0a018269dca5f9277a966e13d8aabbff3966a5cd28d67b4846"><div class="ttname"><a href="namespacearmnn.xhtml#a14fcd7f88d11cea0a018269dca5f9277a966e13d8aabbff3966a5cd28d67b4846">armnn::MemorySource::DmaBuf</a></div><div class="ttdeci">@ DmaBuf</div></div>
+<div class="ttc" id="anamespacearmnn_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="_arg_min_max_8cpp_source.xhtml#l00016">ArgMinMax.cpp:16</a></div></div>
+<div class="ttc" id="astructarmnn_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#l00597">Descriptors.hpp:597</a></div></div>
+<div class="ttc" id="a_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="anamespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">armnn::DataType::Float16</a></div><div class="ttdeci">@ Float16</div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_aeee4e55e6ad4fe12b2168f9fd1e88141"><div class="ttname"><a href="namespacearmnn.xhtml#aeee4e55e6ad4fe12b2168f9fd1e88141">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#l00556">Network.cpp:556</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a56943a0946e5f15e5e58054b8e7a04a4a324118a6721dd6b8a9b9f4e327df2bf5"><div class="ttname"><a href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a324118a6721dd6b8a9b9f4e327df2bf5">armnn::LayerType::Input</a></div><div class="ttdeci">@ Input</div></div>
+<div class="ttc" id="anamespacearmnn_utils_1_1_filesystem_xhtml_a0477efb2c6f5b41fbfe937fef6db312d"><div class="ttname"><a href="namespacearmnn_utils_1_1_filesystem.xhtml#a0477efb2c6f5b41fbfe937fef6db312d">armnnUtils::Filesystem::CreateDirectory</a></div><div class="ttdeci">std::string CreateDirectory(std::string sPath)</div><div class="ttdoc">Returns full path to temporary folder.</div><div class="ttdef"><b>Definition:</b> <a href="_filesystem_8cpp_source.xhtml#l00047">Filesystem.cpp:47</a></div></div>
+<div class="ttc" id="aclassarmnn_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="anamespacearmnn_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#l00262">Network.hpp:262</a></div></div>
+<div class="ttc" id="anamespacearmnn_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#l00290">Types.hpp:290</a></div></div>
+<div class="ttc" id="a_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="anamespacearmnn_xhtml_adf2e5515c4c36a3e7e46bb8b83c6754eaf3f6d0343d56ce88ce7958170ed05cb3"><div class="ttname"><a href="namespacearmnn.xhtml#adf2e5515c4c36a3e7e46bb8b83c6754eaf3f6d0343d56ce88ce7958170ed05cb3">armnn::OutputShapeRounding::Floor</a></div><div class="ttdeci">@ Floor</div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_adf57837d00e8352d9b5cc5ab1fb5fee9af6486a22a9bb11959bfae60a3e5174b1"><div class="ttname"><a href="namespacearmnn.xhtml#adf57837d00e8352d9b5cc5ab1fb5fee9af6486a22a9bb11959bfae60a3e5174b1">armnn::ShapeInferenceMethod::ValidateOnly</a></div><div class="ttdeci">@ ValidateOnly</div><div class="ttdoc">Validate all output shapes.</div></div>
+<div class="ttc" id="astructarmnn_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#l00445">Descriptors.hpp:445</a></div></div>
+<div class="ttc" id="anamespacearmnn_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="anamespacearmnn_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="_reduce_8cpp_source.xhtml#l00019">Reduce.cpp:19</a></div></div>
+<div class="ttc" id="aclassarmnn_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="anamespacearmnn_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="_detection_post_process_8cpp_source.xhtml#l00030">DetectionPostProcess.cpp:30</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_ad605d1661fa0d8c7fea651d82fbe11c9aa94d2fcabc6b001015aeddfa19266e6f"><div class="ttname"><a href="namespacearmnn.xhtml#ad605d1661fa0d8c7fea651d82fbe11c9aa94d2fcabc6b001015aeddfa19266e6f">armnn::NormalizationAlgorithmMethod::LocalContrast</a></div><div class="ttdeci">@ LocalContrast</div><div class="ttdoc">Jarret 2009: Local Contrast Normalization.</div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a2d299363c9fc33334c571fa29ca4f58ca19bb0af2c3c530538cb41aff7f235b96"><div class="ttname"><a href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58ca19bb0af2c3c530538cb41aff7f235b96">armnn::ComparisonOperation::NotEqual</a></div><div class="ttdeci">@ NotEqual</div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a8e72227ebe5ac505cf44790f2e6eb488a655d20c1ca69519ca647684edbb2db35"><div class="ttname"><a href="namespacearmnn.xhtml#a8e72227ebe5ac505cf44790f2e6eb488a655d20c1ca69519ca647684edbb2db35">armnn::QosExecPriority::High</a></div><div class="ttdeci">@ High</div></div>
+<div class="ttc" id="aclassarmnn_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 class="ttc" id="anamespacearmnn_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#l01253">Network.cpp:1253</a></div></div>
+<div class="ttc" id="astructarmnn_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#l00617">Descriptors.hpp:617</a></div></div>
+<div class="ttc" id="astructarmnn_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="anamespacearmnn_xhtml_abd660675ae5a9df777dcdb30c50224f6"><div class="ttname"><a href="namespacearmnn.xhtml#abd660675ae5a9df777dcdb30c50224f6">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#l00608">Network.cpp:608</a></div></div>
+<div class="ttc" id="a_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="anamespacearmnn_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#l00284">TypesUtils.hpp:284</a></div></div>
+<div class="ttc" id="astructarmnn_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,...</div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01016">Descriptors.hpp:1016</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_ac39f2b15d34d3e2fc74d586fc3e26231"><div class="ttname"><a href="namespacearmnn.xhtml#ac39f2b15d34d3e2fc74d586fc3e26231">armnn::ApplyBackendOptimizations</a></div><div class="ttdeci">OptimizationResult ApplyBackendOptimizations(OptimizedNetworkImpl *optNetObjPtr, BackendSettings &amp;backendSettings, BackendsMap &amp;backends, const ModelOptions &amp;modelOptions, Optional&lt; std::vector&lt; std::string &gt; &amp; &gt; errMessages)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.xhtml#l01040">Network.cpp:1040</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_ab432cc781460dbb619afabeb88139a15"><div class="ttname"><a href="namespacearmnn.xhtml#ab432cc781460dbb619afabeb88139a15">armnn::IsLayerOptimizable</a></div><div class="ttdeci">bool IsLayerOptimizable(const armnn::Layer &amp;layer)</div><div class="ttdef"><b>Definition:</b> <a href="_mock_backend_8cpp_source.xhtml#l00096">MockBackend.cpp:96</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a8e1f31031ad31cd8cc22d7c9daa32681af60357a8d17e45793298323f1b372a74"><div class="ttname"><a href="namespacearmnn.xhtml#a8e1f31031ad31cd8cc22d7c9daa32681af60357a8d17e45793298323f1b372a74">armnn::Dimensionality::Scalar</a></div><div class="ttdeci">@ Scalar</div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_ae2f04a162585c0a5222a537efd5456aea39f8662ca778258e9c6a14f26fec5ec1"><div class="ttname"><a href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea39f8662ca778258e9c6a14f26fec5ec1">armnn::Compute::CpuAcc</a></div><div class="ttdeci">@ CpuAcc</div><div class="ttdoc">CPU Execution: NEON: ArmCompute.</div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_aa1e93ef5f9ee3dbb5e7faa9578f180ae"><div class="ttname"><a href="namespacearmnn.xhtml#aa1e93ef5f9ee3dbb5e7faa9578f180ae">armnn::ConvertLstmActivationFuncToAclLayerInfo</a></div><div class="ttdeci">arm_compute::ActivationLayerInfo ConvertLstmActivationFuncToAclLayerInfo(uint32_t activationFunction)</div><div class="ttdef"><b>Definition:</b> <a href="_arm_compute_utils_8hpp_source.xhtml#l00116">ArmComputeUtils.hpp:116</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_ae2f04a162585c0a5222a537efd5456aeafaa4524e3df19ada32643ce9a222362b"><div class="ttname"><a href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeafaa4524e3df19ada32643ce9a222362b">armnn::Compute::GpuAcc</a></div><div class="ttdeci">@ GpuAcc</div><div class="ttdoc">GPU Execution: OpenCL: ArmCompute.</div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a14fcd7f88d11cea0a018269dca5f9277a1131a914388fac73e5f07b0ba0aad523"><div class="ttname"><a href="namespacearmnn.xhtml#a14fcd7f88d11cea0a018269dca5f9277a1131a914388fac73e5f07b0ba0aad523">armnn::MemorySource::Malloc</a></div><div class="ttdeci">@ Malloc</div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a707090747256af276c389e0cf1cb0a9aab571ef5b2664270d25bea4f4b61ffe68"><div class="ttname"><a href="namespacearmnn.xhtml#a707090747256af276c389e0cf1cb0a9aab571ef5b2664270d25bea4f4b61ffe68">armnn::TuningLevel::Rapid</a></div><div class="ttdeci">@ Rapid</div></div>
+<div class="ttc" id="anamespacearmnn_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#l00037">BackendHelper.cpp:37</a></div></div>
+<div class="ttc" id="astructarmnn_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#l00385">Descriptors.hpp:385</a></div></div>
+<div class="ttc" id="anamespacearmnn_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#l00264">ArmComputeUtils.hpp:264</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a34eaed09302a4d7bfe930c13a7673e0bad6e393dc30fd33cbcb5f6ab199093528"><div class="ttname"><a href="namespacearmnn.xhtml#a34eaed09302a4d7bfe930c13a7673e0bad6e393dc30fd33cbcb5f6ab199093528">armnn::GraphEvent::LayerErased</a></div><div class="ttdeci">@ LayerErased</div></div>
+<div class="ttc" id="anamespacearmnn_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="anamespacearmnn_xhtml_a56943a0946e5f15e5e58054b8e7a04a4adb033d2f81b68f9a17e8f62de69fed4a"><div class="ttname"><a href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4adb033d2f81b68f9a17e8f62de69fed4a">armnn::LayerType::Convolution2d</a></div><div class="ttdeci">@ Convolution2d</div></div>
+<div class="ttc" id="a_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="anamespacearmnn_xhtml_a1cfaa710db2a54673b21d2ea2da757c8acad39a154bffb61175f674d6eefaf6d0"><div class="ttname"><a href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8acad39a154bffb61175f674d6eefaf6d0">armnn::UnaryOperation::Exp</a></div><div class="ttdeci">@ Exp</div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a3c62b52d21e28088f040a4b6c2a06022"><div class="ttname"><a href="namespacearmnn.xhtml#a3c62b52d21e28088f040a4b6c2a06022">armnn::Pad</a></div><div class="ttdeci">void Pad(const TensorInfo &amp;inputInfo, const TensorInfo &amp;outputInfo, const ITensorHandle *inputHandle, ITensorHandle *outputHandle, const PadQueueDescriptor &amp;data)</div><div class="ttdef"><b>Definition:</b> <a href="_pad_8cpp_source.xhtml#l00039">Pad.cpp:39</a></div></div>
+<div class="ttc" id="aclassarmnn_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="astructarmnn_1_1_backend_options_xhtml"><div class="ttname"><a href="structarmnn_1_1_backend_options.xhtml">armnn::BackendOptions</a></div><div class="ttdoc">Struct for the users to pass backend specific options.</div><div class="ttdef"><b>Definition:</b> <a href="_backend_options_8hpp_source.xhtml#l00022">BackendOptions.hpp:22</a></div></div>
+<div class="ttc" id="anamespacearmnn_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="anamespacearmnn_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="_batch_to_space_nd_8cpp_source.xhtml#l00019">BatchToSpaceNd.cpp:19</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a5b6893cda5b69359a4244c06054da18f"><div class="ttname"><a href="namespacearmnn.xhtml#a5b6893cda5b69359a4244c06054da18f">armnn::ModelOptions</a></div><div class="ttdeci">std::vector&lt; BackendOptions &gt; ModelOptions</div><div class="ttdef"><b>Definition:</b> <a href="_backend_options_8hpp_source.xhtml#l00018">BackendOptions.hpp:18</a></div></div>
+<div class="ttc" id="anamespacearmnn_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="_fully_connected_8cpp_source.xhtml#l00015">FullyConnected.cpp:15</a></div></div>
+<div class="ttc" id="astructarmnn_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#l00455">Descriptors.hpp:455</a></div></div>
+<div class="ttc" id="anamespacearmnn_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#l00104">ITensorHandleFactory.hpp:104</a></div></div>
+<div class="ttc" id="aclassarmnn_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="anamespacearmnn_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="anamespacearmnn_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="anamespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">armnn::DataType::Signed32</a></div><div class="ttdeci">@ Signed32</div></div>
+<div class="ttc" id="astructarmnn_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#l00373">Descriptors.hpp:373</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a1cfaa710db2a54673b21d2ea2da757c8afb278fa5defd7e699fcbc930c3e76ccd"><div class="ttname"><a href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8afb278fa5defd7e699fcbc930c3e76ccd">armnn::UnaryOperation::Neg</a></div><div class="ttdeci">@ Neg</div></div>
+<div class="ttc" id="a_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 class="ttc" id="anamespacearmnn_xhtml_ab24d74259a053475f6040dd701a01952a0be89c9a624a5de3925150e3cd476245"><div class="ttname"><a href="namespacearmnn.xhtml#ab24d74259a053475f6040dd701a01952a0be89c9a624a5de3925150e3cd476245">armnn::BackendCapability::NonConstWeights</a></div><div class="ttdeci">@ NonConstWeights</div><div class="ttdoc">Constant weights can be accessed through the descriptors, On the other hand, non-const weights can be...</div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a56297e0f7b215eea46c818cb7528d9eaa0877e5b3fbe9d7569df6399609ed0186"><div class="ttname"><a href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa0877e5b3fbe9d7569df6399609ed0186">armnn::ActivationFunction::HardSwish</a></div><div class="ttdeci">@ HardSwish</div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a86d7a7168ac00b75b4971f9aad623698"><div class="ttname"><a href="namespacearmnn.xhtml#a86d7a7168ac00b75b4971f9aad623698">armnn::StridedSlice</a></div><div class="ttdeci">void StridedSlice(const TensorInfo &amp;inputInfo, const StridedSliceDescriptor &amp;params, const void *inputData, void *outputData, unsigned int dataTypeSize)</div><div class="ttdef"><b>Definition:</b> <a href="_strided_slice_8cpp_source.xhtml#l00090">StridedSlice.cpp:90</a></div></div>
+<div class="ttc" id="aclassarmnn_1_1_exception_xhtml_abf843cbb29dec939d0731e491bab6f70"><div class="ttname"><a href="classarmnn_1_1_exception.xhtml#abf843cbb29dec939d0731e491bab6f70">armnn::Exception::what</a></div><div class="ttdeci">virtual const char * what() const noexcept override</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8cpp_source.xhtml#l00032">Exceptions.cpp:32</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a56943a0946e5f15e5e58054b8e7a04a4afa662c6eb71caef475b2b981ce8eccd7"><div class="ttname"><a href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4afa662c6eb71caef475b2b981ce8eccd7">armnn::LayerType::Permute</a></div><div class="ttdeci">@ Permute</div></div>
+<div class="ttc" id="astructarmnn_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#l00676">Descriptors.hpp:676</a></div></div>
+<div class="ttc" id="astructarmnn_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#l00443">Descriptors.hpp:443</a></div></div>
+<div class="ttc" id="astructarmnn_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#l00395">Descriptors.hpp:395</a></div></div>
+<div class="ttc" id="a_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#l00388">Types.hpp:388</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a8e72227ebe5ac505cf44790f2e6eb488a87f8a6ab85c9ced3702b4ea641ad4bb5"><div class="ttname"><a href="namespacearmnn.xhtml#a8e72227ebe5ac505cf44790f2e6eb488a87f8a6ab85c9ced3702b4ea641ad4bb5">armnn::QosExecPriority::Medium</a></div><div class="ttdeci">@ Medium</div></div>
+<div class="ttc" id="anamespacearmnn_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="aclassarmnn_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 class="ttc" id="astructarmnn_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#l00615">Descriptors.hpp:615</a></div></div>
+<div class="ttc" id="anamespacearmnn_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#l00352">ArmComputeUtils.hpp:352</a></div></div>
+<div class="ttc" id="anamespacearmnn_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#l01021">Network.cpp:1021</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a2d299363c9fc33334c571fa29ca4f58caa4cbdbb6070a5abb35fc95ecf1e22c14"><div class="ttname"><a href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58caa4cbdbb6070a5abb35fc95ecf1e22c14">armnn::ComparisonOperation::LessOrEqual</a></div><div class="ttdeci">@ LessOrEqual</div></div>
+<div class="ttc" id="astructarmnn_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#l00619">Descriptors.hpp:619</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a56943a0946e5f15e5e58054b8e7a04a4a7c5531bbefed0945814f874baf9e0e0f"><div class="ttname"><a href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a7c5531bbefed0945814f874baf9e0e0f">armnn::LayerType::Addition</a></div><div class="ttdeci">@ Addition</div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">armnn::DataType::QAsymmS8</a></div><div class="ttdeci">@ QAsymmS8</div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a3888429b6ebc79f9a7df549e5e4d9a2faad301514192636ad34210adce598a45a"><div class="ttname"><a href="namespacearmnn.xhtml#a3888429b6ebc79f9a7df549e5e4d9a2faad301514192636ad34210adce598a45a">armnn::PaddingMethod::IgnoreValue</a></div><div class="ttdeci">@ IgnoreValue</div><div class="ttdoc">The padding fields count, but are ignored.</div></div>
+<div class="ttc" id="anamespacearmnn_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="astructarmnn_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#l00387">Descriptors.hpp:387</a></div></div>
+<div class="ttc" id="anamespacearmnn_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="anamespacearmnn_xhtml_a93a3ba385cad27c4774e5fe64c025d3da4059b0251f66a18cb56f544728796875"><div class="ttname"><a href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da4059b0251f66a18cb56f544728796875">armnn::LogSeverity::Info</a></div><div class="ttdeci">@ Info</div></div>
+<div class="ttc" id="anamespacearmnn_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#l01148">Network.cpp:1148</a></div></div>
+<div class="ttc" id="astructarmnn_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#l00672">Descriptors.hpp:672</a></div></div>
+<div class="ttc" id="a_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#l00212">Logging.hpp:212</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a4dc0adc6737b5944e7671bee71788407adf6402fd9ecc60f5a2159fdf45711cd4"><div class="ttname"><a href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407adf6402fd9ecc60f5a2159fdf45711cd4">armnn::BoostLogSeverityMapping::fatal</a></div><div class="ttdeci">@ fatal</div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a7100de49939c3e393101f78d425a98c6ab093fa975bc79c72c686e6d9773a0d1f"><div class="ttname"><a href="namespacearmnn.xhtml#a7100de49939c3e393101f78d425a98c6ab093fa975bc79c72c686e6d9773a0d1f">armnn::MemBlockStrategyType::MultiAxisPacking</a></div><div class="ttdeci">@ MultiAxisPacking</div></div>
+<div class="ttc" id="anamespacearmnn_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="anamespacearmnn_xhtml_a14d24d90ab4ba2956e92e27890ba4c91acb17869fe51048b5a5c4c6106551a255"><div class="ttname"><a href="namespacearmnn.xhtml#a14d24d90ab4ba2956e92e27890ba4c91acb17869fe51048b5a5c4c6106551a255">armnn::PaddingMode::Constant</a></div><div class="ttdeci">@ Constant</div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a961bbfe1db71a848eff5a1f0ab775718a7e6aa2d53f6ee2b1a34b017fa403cb76"><div class="ttname"><a href="namespacearmnn.xhtml#a961bbfe1db71a848eff5a1f0ab775718a7e6aa2d53f6ee2b1a34b017fa403cb76">armnn::PoolingAlgorithm::L2</a></div><div class="ttdeci">@ L2</div></div>
+<div class="ttc" id="astructarmnn_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="anamespacearmnn_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#l00155">TypesUtils.hpp:155</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_abe18a5033f2ab9c0de82c676b48f5437a37bac6dce4f46277d89bfa3003e2e39b"><div class="ttname"><a href="namespacearmnn.xhtml#abe18a5033f2ab9c0de82c676b48f5437a37bac6dce4f46277d89bfa3003e2e39b">armnn::NormalizationAlgorithmChannel::Within</a></div><div class="ttdeci">@ Within</div></div>
+<div class="ttc" id="anamespacearmnn_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="anamespacearmnn_xhtml_a8e72227ebe5ac505cf44790f2e6eb488a28d0edd045e05cf5af64e35ae0c4c6ef"><div class="ttname"><a href="namespacearmnn.xhtml#a8e72227ebe5ac505cf44790f2e6eb488a28d0edd045e05cf5af64e35ae0c4c6ef">armnn::QosExecPriority::Low</a></div><div class="ttdeci">@ Low</div></div>
+<div class="ttc" id="astructarmnn_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#l00601">Descriptors.hpp:601</a></div></div>
+<div class="ttc" id="anamespacearmnn_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="anamespacearmnn_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#l00099">ConvertConstants.hpp:99</a></div></div>
+<div class="ttc" id="aclassarmnn_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 class="ttc" id="aclassarmnn_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="a_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="anamespacearmnn_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 class="ttc" id="anamespacearmnn_xhtml_a070307e9ee0f7969f7d4320145d1dddb"><div class="ttname"><a href="namespacearmnn.xhtml#a070307e9ee0f7969f7d4320145d1dddb">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#l00544">Network.cpp:544</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a4dc0adc6737b5944e7671bee71788407a7b83d3f08fa392b79e3f553b585971cd"><div class="ttname"><a href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407a7b83d3f08fa392b79e3f553b585971cd">armnn::BoostLogSeverityMapping::warning</a></div><div class="ttdeci">@ warning</div></div>
+<div class="ttc" id="anamespacearmnn_1_1optimizations_xhtml_a58a79c101b088880733afee089a1ec7f"><div class="ttname"><a href="namespacearmnn_1_1optimizations.xhtml#a58a79c101b088880733afee089a1ec7f">armnn::optimizations::PermuteDepthwiseConv2dWeights</a></div><div class="ttdeci">OptimizeForType&lt; Layer, PermuteDepthwiseConv2dWeightsImpl &gt; PermuteDepthwiseConv2dWeights</div><div class="ttdef"><b>Definition:</b> <a href="_permute_depthwise_conv2d_weights_8hpp_source.xhtml#l00078">PermuteDepthwiseConv2dWeights.hpp:78</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a8c88a8a91827e9ccc3cf3ce6b14fcd17"><div class="ttname"><a href="namespacearmnn.xhtml#a8c88a8a91827e9ccc3cf3ce6b14fcd17">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 class="ttc" id="anamespacearmnn_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="aclassarmnn_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="astructarmnn_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#l00605">Descriptors.hpp:605</a></div></div>
+<div class="ttc" id="aclassarmnn_1_1_runtime_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_runtime_exception.xhtml">armnn::RuntimeException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00120">Exceptions.hpp:120</a></div></div>
+<div class="ttc" id="anamespacearmnn_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="anamespacearmnn_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#l00131">NeonWorkloadUtils.hpp:131</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a69acbef24cd1cc572b93fc3e1e6ac030"><div class="ttname"><a href="namespacearmnn.xhtml#a69acbef24cd1cc572b93fc3e1e6ac030">armnn::Pooling3d</a></div><div class="ttdeci">void Pooling3d(Decoder&lt; float &gt; &amp;rInputDecoder, Encoder&lt; float &gt; &amp;rOutputEncoder, const TensorInfo &amp;inputInfo, const TensorInfo &amp;outputInfo, const Pooling3dDescriptor &amp;params)</div><div class="ttdoc">Computes the Pooling3d operation.</div><div class="ttdef"><b>Definition:</b> <a href="_pooling3d_8cpp_source.xhtml#l00172">Pooling3d.cpp:172</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a34eaed09302a4d7bfe930c13a7673e0ba23c3efdd3f80798660ecf0b9af6dd5dd"><div class="ttname"><a href="namespacearmnn.xhtml#a34eaed09302a4d7bfe930c13a7673e0ba23c3efdd3f80798660ecf0b9af6dd5dd">armnn::GraphEvent::LayerAdded</a></div><div class="ttdeci">@ LayerAdded</div></div>
+<div class="ttc" id="anamespacearmnn_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#l00139">ArmComputeUtils.hpp:139</a></div></div>
+<div class="ttc" id="anamespacearmnn_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="anamespacearmnn_xhtml_a93a3ba385cad27c4774e5fe64c025d3da882384ec38ce8d9582b57e70861730e4"><div class="ttname"><a href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da882384ec38ce8d9582b57e70861730e4">armnn::LogSeverity::Fatal</a></div><div class="ttdeci">@ Fatal</div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a2b8ec686784330e8f20e4444f1ed7e98"><div class="ttname"><a href="namespacearmnn.xhtml#a2b8ec686784330e8f20e4444f1ed7e98">armnn::GetLayerInOutDatatype</a></div><div class="ttdeci">std::vector&lt; DataType &gt; GetLayerInOutDatatype(const Layer *layer)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.xhtml#l00777">Network.cpp:777</a></div></div>
+<div class="ttc" id="anamespacearmnn_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 class="ttc" id="anamespacearmnn_xhtml_a181ecb133401da6ff2916c192ca04d48"><div class="ttname"><a href="namespacearmnn.xhtml#a181ecb133401da6ff2916c192ca04d48">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, bool outputsToFile)</div><div class="ttdef"><b>Definition:</b> <a href="_debug_8cpp_source.xhtml#l00097">Debug.cpp:97</a></div></div>
+<div class="ttc" id="anamespacearmnn_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#l00192">ArmComputeUtils.hpp:192</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a9a2af2f8c4af4f9efa8e79417d505ac4aaa020331bb30d2fa2ecf7c3a0777823f"><div class="ttname"><a href="namespacearmnn.xhtml#a9a2af2f8c4af4f9efa8e79417d505ac4aaa020331bb30d2fa2ecf7c3a0777823f">armnn::ResizeMethod::NearestNeighbor</a></div><div class="ttdeci">@ NearestNeighbor</div></div>
+<div class="ttc" id="anamespacearmnn_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 class="ttc" id="aclassarmnn_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="anamespacearmnn_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="astructarmnn_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#l00613">Descriptors.hpp:613</a></div></div>
+<div class="ttc" id="anamespacearmnn_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#l00466">Types.hpp:466</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a0b49aa352b84d572942185ce72cef751"><div class="ttname"><a href="namespacearmnn.xhtml#a0b49aa352b84d572942185ce72cef751">armnn::Half</a></div><div class="ttdeci">half_float::half Half</div><div class="ttdef"><b>Definition:</b> <a href="_half_8hpp_source.xhtml#l00022">Half.hpp:22</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_ad64b7a275169ba1b1ba2d15679f7e8b1"><div class="ttname"><a href="namespacearmnn.xhtml#ad64b7a275169ba1b1ba2d15679f7e8b1">armnn::Reduce</a></div><div class="ttdeci">void Reduce(const TensorInfo &amp;inputInfo, const TensorInfo &amp;outputInfo, Decoder&lt; float &gt; &amp;input, Encoder&lt; float &gt; &amp;output, const std::vector&lt; uint32_t &gt; axis, const ReduceOperation reduceOperation)</div><div class="ttdef"><b>Definition:</b> <a href="_reduce_8cpp_source.xhtml#l00070">Reduce.cpp:70</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_abc05539fc6e7907f32ef0fb242e3b3b0aa0ec87054b5e5b7847d0d8780a01a3d5"><div class="ttname"><a href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0aa0ec87054b5e5b7847d0d8780a01a3d5">armnn::ReduceOperation::Sum</a></div><div class="ttdeci">@ Sum</div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a2da4db0140d1a6dc69c9c82e9ef5379ea74ce78827b02c650a20b149765388247"><div class="ttname"><a href="namespacearmnn.xhtml#a2da4db0140d1a6dc69c9c82e9ef5379ea74ce78827b02c650a20b149765388247">armnn::LogicalBinaryOperation::LogicalOr</a></div><div class="ttdeci">@ LogicalOr</div></div>
+<div class="ttc" id="anamespacearmnn_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#l00071">ClWorkloadUtils.hpp:71</a></div></div>
+<div class="ttc" id="astructarmnn_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#l01042">Descriptors.hpp:1042</a></div></div>
+<div class="ttc" id="astructarmnn_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#l00674">Descriptors.hpp:674</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a></div><div class="ttdeci">@ NCHW</div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a56943a0946e5f15e5e58054b8e7a04a4ae66a93a31fb93839c8369265cd44695c"><div class="ttname"><a href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4ae66a93a31fb93839c8369265cd44695c">armnn::LayerType::FirstLayer</a></div><div class="ttdeci">@ FirstLayer</div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a4dc0adc6737b5944e7671bee71788407a04a75036e9d520bb983c5ed03b8d0182"><div class="ttname"><a href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407a04a75036e9d520bb983c5ed03b8d0182">armnn::BoostLogSeverityMapping::trace</a></div><div class="ttdeci">@ trace</div></div>
+<div class="ttc" id="astructarmnn_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#l00451">Descriptors.hpp:451</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_ab24d74259a053475f6040dd701a01952ac7fdc1b70472b8558fdba30db193d58f"><div class="ttname"><a href="namespacearmnn.xhtml#ab24d74259a053475f6040dd701a01952ac7fdc1b70472b8558fdba30db193d58f">armnn::BackendCapability::AsyncExecution</a></div><div class="ttdeci">@ AsyncExecution</div><div class="ttdoc">Asynchronous Execution.</div></div>
+<div class="ttc" id="a_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="astructarmnn_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#l00678">Descriptors.hpp:678</a></div></div>
+<div class="ttc" id="anamespacearmnn_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="_detection_post_process_8cpp_source.xhtml#l00024">DetectionPostProcess.cpp:24</a></div></div>
+<div class="ttc" id="anamespacearmnn_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#l00092">ClWorkloadUtils.hpp:92</a></div></div>
+<div class="ttc" id="aclassarmnn_1_1_tensor_info_xhtml_a945263e85c27f3216a8323cfc16d8919"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a945263e85c27f3216a8323cfc16d8919">armnn::TensorInfo::IsConstant</a></div><div class="ttdeci">bool IsConstant() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8cpp_source.xhtml#l00509">Tensor.cpp:509</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_abe18a5033f2ab9c0de82c676b48f5437a810f43f3996922151c39b76143faeecc"><div class="ttname"><a href="namespacearmnn.xhtml#abe18a5033f2ab9c0de82c676b48f5437a810f43f3996922151c39b76143faeecc">armnn::NormalizationAlgorithmChannel::Across</a></div><div class="ttdeci">@ Across</div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_ad605d1661fa0d8c7fea651d82fbe11c9ac65d2e51c610dd3853a3c777aa8bfe9d"><div class="ttname"><a href="namespacearmnn.xhtml#ad605d1661fa0d8c7fea651d82fbe11c9ac65d2e51c610dd3853a3c777aa8bfe9d">armnn::NormalizationAlgorithmMethod::LocalBrightness</a></div><div class="ttdeci">@ LocalBrightness</div><div class="ttdoc">Krichevsky 2012: Local Brightness Normalization.</div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a56297e0f7b215eea46c818cb7528d9eaa21eebb164e4b8b9bcf64fdb4d8d5dff4"><div class="ttname"><a href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa21eebb164e4b8b9bcf64fdb4d8d5dff4">armnn::ActivationFunction::Sigmoid</a></div><div class="ttdeci">@ Sigmoid</div></div>
+<div class="ttc" id="aclassarmnn_1_1_tensor_info_xhtml_a157e27d41e9f6b21f0d3c025fa47dc24"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">armnn::TensorInfo::GetNumDimensions</a></div><div class="ttdeci">unsigned int GetNumDimensions() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00195">Tensor.hpp:195</a></div></div>
+<div class="ttc" id="aclassarmnn_1_1_tensor_shape_xhtml_a3919600d4aa8d5cd801a0e0740f62308"><div class="ttname"><a href="classarmnn_1_1_tensor_shape.xhtml#a3919600d4aa8d5cd801a0e0740f62308">armnn::TensorShape::GetDimensionSpecificity</a></div><div class="ttdeci">bool GetDimensionSpecificity(unsigned int i) const</div><div class="ttdoc">Gets information about if the dimension size has been specified or not.</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8cpp_source.xhtml#l00211">Tensor.cpp:211</a></div></div>
+<div class="ttc" id="astructarmnn_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#l00453">Descriptors.hpp:453</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0a884e0167ebf9bbe6cfd6ca5ab97ab015"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a884e0167ebf9bbe6cfd6ca5ab97ab015">armnn::DataLayout::NCDHW</a></div><div class="ttdeci">@ NCDHW</div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a56943a0946e5f15e5e58054b8e7a04a4a33cae35d37c1b558ecd35dd5e37dd80f"><div class="ttname"><a href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a33cae35d37c1b558ecd35dd5e37dd80f">armnn::LayerType::LastLayer</a></div><div class="ttdeci">@ LastLayer</div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a2d299363c9fc33334c571fa29ca4f58ca8768a6821cd735aea4f5b0df88c1fc6a"><div class="ttname"><a href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58ca8768a6821cd735aea4f5b0df88c1fc6a">armnn::ComparisonOperation::Greater</a></div><div class="ttdeci">@ Greater</div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70bae139a585510a502bbf1841cf589f5086"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70bae139a585510a502bbf1841cf589f5086">armnn::Status::Failure</a></div><div class="ttdeci">@ Failure</div></div>
+<div class="ttc" id="aclassarmnn_1_1_layer_xhtml_ad8e15c530c929ab823d89ae9fd2d3f11"><div class="ttname"><a href="classarmnn_1_1_layer.xhtml#ad8e15c530c929ab823d89ae9fd2d3f11">armnn::Layer::GetType</a></div><div class="ttdeci">LayerType GetType() const override</div><div class="ttdoc">Returns the armnn::LayerType of this layer.</div><div class="ttdef"><b>Definition:</b> <a href="_layer_8hpp_source.xhtml#l00273">Layer.hpp:273</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a56297e0f7b215eea46c818cb7528d9eaa6bba7052636d1740303b1b2ef3b53fef"><div class="ttname"><a href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa6bba7052636d1740303b1b2ef3b53fef">armnn::ActivationFunction::SoftReLu</a></div><div class="ttdeci">@ SoftReLu</div></div>
+<div class="ttc" id="anamespacearmnn_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#l00152">ClWorkloadUtils.hpp:152</a></div></div>
+<div class="ttc" id="astructarmnn_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#l00381">Descriptors.hpp:381</a></div></div>
+<div class="ttc" id="astructarmnn_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#l00465">Descriptors.hpp:465</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a3cf1cee98e0ed8b54263ec7279f6ec69"><div class="ttname"><a href="namespacearmnn.xhtml#a3cf1cee98e0ed8b54263ec7279f6ec69">armnn::ReportError</a></div><div class="ttdeci">void ReportError(const std::string &amp;errorMessage, Optional&lt; std::vector&lt; std::string &gt; &amp; &gt; errorMessages)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.xhtml#l00532">Network.cpp:532</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_ac52e04c0e349e25bcdaa72c27395ef8f"><div class="ttname"><a href="namespacearmnn.xhtml#ac52e04c0e349e25bcdaa72c27395ef8f">armnn::LogSoftmax</a></div><div class="ttdeci">void LogSoftmax(Decoder&lt; float &gt; &amp;input, Encoder&lt; float &gt; &amp;output, const TensorInfo &amp;inputInfo, const LogSoftmaxDescriptor &amp;descriptor)</div><div class="ttdef"><b>Definition:</b> <a href="_log_softmax_8cpp_source.xhtml#l00029">LogSoftmax.cpp:29</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a2d299363c9fc33334c571fa29ca4f58ca6f2f0aefb3d22da0f3839453add5f937"><div class="ttname"><a href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58ca6f2f0aefb3d22da0f3839453add5f937">armnn::ComparisonOperation::GreaterOrEqual</a></div><div class="ttdeci">@ GreaterOrEqual</div></div>
+<div class="ttc" id="aclassarmnn_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#l00814">INetwork.hpp:814</a></div></div>
+<div class="ttc" id="a_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="anamespacearmnn_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#l00293">ArmComputeUtils.hpp:293</a></div></div>
+<div class="ttc" id="anamespacearmnn_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="anamespacearmnn_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#l00170">WorkloadUtils.cpp:170</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a></div><div class="ttdeci">@ Float32</div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a10c50bc964cc8cc559eebcd7df5a8af3a5a3e0409dae79a7940aade8d399dcd5d"><div class="ttname"><a href="namespacearmnn.xhtml#a10c50bc964cc8cc559eebcd7df5a8af3a5a3e0409dae79a7940aade8d399dcd5d">armnn::CapabilityClass::FallbackImportDisabled</a></div><div class="ttdeci">@ FallbackImportDisabled</div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a9a2af2f8c4af4f9efa8e79417d505ac4aaf17c98bbd83c27d6426d2ff3fa81d7f"><div class="ttname"><a href="namespacearmnn.xhtml#a9a2af2f8c4af4f9efa8e79417d505ac4aaf17c98bbd83c27d6426d2ff3fa81d7f">armnn::ResizeMethod::Bilinear</a></div><div class="ttdeci">@ Bilinear</div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_ae7e8cbf71db6a490789ca6dcaa8deeaea78d811e98514cd165dda532286610fd2"><div class="ttname"><a href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea78d811e98514cd165dda532286610fd2">armnn::ArgMinMaxFunction::Min</a></div><div class="ttdeci">@ Min</div></div>
+<div class="ttc" id="anamespacearmnn_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="anamespacearmnn_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#l00338">ArmComputeUtils.hpp:338</a></div></div>
+<div class="ttc" id="anamespacearmnn_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="_arm_compute_tuning_utils_8hpp_source.xhtml#l00018">ArmComputeTuningUtils.hpp:18</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_ae76ce23fa9fc18e56448d52b37dd3f32"><div class="ttname"><a href="namespacearmnn.xhtml#ae76ce23fa9fc18e56448d52b37dd3f32">armnn::DetectionPostProcess</a></div><div class="ttdeci">void DetectionPostProcess(const TensorInfo &amp;boxEncodingsInfo, const TensorInfo &amp;scoresInfo, const TensorInfo &amp;anchorsInfo, const TensorInfo &amp;detectionBoxesInfo, const TensorInfo &amp;detectionClassesInfo, const TensorInfo &amp;detectionScoresInfo, const TensorInfo &amp;numDetectionsInfo, const DetectionPostProcessDescriptor &amp;desc, Decoder&lt; float &gt; &amp;boxEncodings, Decoder&lt; float &gt; &amp;scores, Decoder&lt; float &gt; &amp;anchors, float *detectionBoxes, float *detectionClasses, float *detectionScores, float *numDetections)</div><div class="ttdef"><b>Definition:</b> <a href="_detection_post_process_8cpp_source.xhtml#l00140">DetectionPostProcess.cpp:140</a></div></div>
+<div class="ttc" id="anamespacearmnn_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#l00108">Types.hpp:108</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a15e2ba06d2ecd7ff6013118838e5d1be"><div class="ttname"><a href="namespacearmnn.xhtml#a15e2ba06d2ecd7ff6013118838e5d1be">armnn::GeneratePermutationVectorOnLastTwoDimensions</a></div><div class="ttdeci">armnn::PermutationVector GeneratePermutationVectorOnLastTwoDimensions(unsigned int rank)</div><div class="ttdoc">Generates a permutation vector of size rank that permutes the 2 most right dimensions.</div><div class="ttdef"><b>Definition:</b> <a href="_workload_utils_8cpp_source.xhtml#l00344">WorkloadUtils.cpp:344</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_aa999ff2585ad75b95954a9323f63c32b"><div class="ttname"><a href="namespacearmnn.xhtml#aa999ff2585ad75b95954a9323f63c32b">armnn::Softmax</a></div><div class="ttdeci">void Softmax(Decoder&lt; float &gt; &amp;in, Encoder&lt; float &gt; &amp;out, const TensorInfo &amp;inputTensorInfo, float beta, int axis)</div><div class="ttdoc">Computes the softmax function on some inputs, into outputs, with a shape given by tensorInfo.</div><div class="ttdef"><b>Definition:</b> <a href="_softmax_8cpp_source.xhtml#l00017">Softmax.cpp:17</a></div></div>
+<div class="ttc" id="aclassarmnn_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="anamespacearmnn_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="anamespacearmnn_xhtml_a56943a0946e5f15e5e58054b8e7a04a4acb17869fe51048b5a5c4c6106551a255"><div class="ttname"><a href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4acb17869fe51048b5a5c4c6106551a255">armnn::LayerType::Constant</a></div><div class="ttdeci">@ Constant</div></div>
+<div class="ttc" id="anamespacearmnn_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#l00186">Types.hpp:186</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6ae1b3c9c6087a93b07c83e0b04f377a8d"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6ae1b3c9c6087a93b07c83e0b04f377a8d">armnn::DataType::Signed64</a></div><div class="ttdeci">@ Signed64</div></div>
+<div class="ttc" id="astructarmnn_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#l01018">Descriptors.hpp:1018</a></div></div>
+<div class="ttc" id="astructarmnn_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#l01039">Descriptors.hpp:1039</a></div></div>
+<div class="ttc" id="astructarmnn_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#l00383">Descriptors.hpp:383</a></div></div>
+<div class="ttc" id="anamespacearmnn_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="anamespacearmnn_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#l00053">AddDebug.hpp:53</a></div></div>
+<div class="ttc" id="astructarmnn_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#l00441">Descriptors.hpp:441</a></div></div>
+<div class="ttc" id="anamespacearmnn_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#l00174">TypesUtils.hpp:174</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a4f1a1b88b01d8dfda3803776e0778a49"><div class="ttname"><a href="namespacearmnn.xhtml#a4f1a1b88b01d8dfda3803776e0778a49">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_int)</div><div class="ttdef"><b>Definition:</b> <a href="_gather_8cpp_source.xhtml#l00014">Gather.cpp:14</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70ba505a83f220c02df2f85c3810cd9ceb38"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70ba505a83f220c02df2f85c3810cd9ceb38">armnn::Status::Success</a></div><div class="ttdeci">@ Success</div></div>
+<div class="ttc" id="astructarmnn_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#l00459">Descriptors.hpp:459</a></div></div>
+<div class="ttc" id="astructarmnn_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#l00609">Descriptors.hpp:609</a></div></div>
+<div class="ttc" id="aclassarmnn_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="anamespacearmnn_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 class="ttc" id="astructarmnn_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#l00469">Descriptors.hpp:469</a></div></div>
+<div class="ttc" id="a_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="anamespacearmnn_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#l00237">FuseBatchNorm.hpp:237</a></div></div>
+<div class="ttc" id="astructarmnn_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="anamespacearmnn_xhtml_ae7e8cbf71db6a490789ca6dcaa8deeaea6a061313d22e51e0f25b7cd4dc065233"><div class="ttname"><a href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea6a061313d22e51e0f25b7cd4dc065233">armnn::ArgMinMaxFunction::Max</a></div><div class="ttdeci">@ Max</div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70b"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">armnn::Status</a></div><div class="ttdeci">Status</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00042">Types.hpp:42</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a4e2dd387ba6f0dc5164b4cdf8de3262aaa4ecfc70574394990cf17bd83df499f7"><div class="ttname"><a href="namespacearmnn.xhtml#a4e2dd387ba6f0dc5164b4cdf8de3262aaa4ecfc70574394990cf17bd83df499f7">armnn::JsonObjectType::Event</a></div><div class="ttdeci">@ Event</div></div>
+<div class="ttc" id="anamespacearmnn_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="anamespacearmnn_utils_xhtml_a2bff2aae3ae824ff74ba550488373886"><div class="ttname"><a href="namespacearmnn_utils.xhtml#a2bff2aae3ae824ff74ba550488373886">armnnUtils::ReduceDims</a></div><div class="ttdeci">armnn::TensorShape ReduceDims(const armnn::TensorShape &amp;tensorInfo, unsigned int dimensions)</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_utils_8cpp_source.xhtml#l00106">TensorUtils.cpp:106</a></div></div>
+<div class="ttc" id="astructarmnn_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#l00611">Descriptors.hpp:611</a></div></div>
+<div class="ttc" id="anamespacearmnn_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#l00182">TensorUtils.cpp:182</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a10c50bc964cc8cc559eebcd7df5a8af3aa47abd1077ef632a38ada05b6edbf389"><div class="ttname"><a href="namespacearmnn.xhtml#a10c50bc964cc8cc559eebcd7df5a8af3aa47abd1077ef632a38ada05b6edbf389">armnn::CapabilityClass::PaddingRequired</a></div><div class="ttdeci">@ PaddingRequired</div></div>
+<div class="ttc" id="astructarmnn_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#l00375">Descriptors.hpp:375</a></div></div>
+<div class="ttc" id="aclassarmnn_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="astructarmnn_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#l00599">Descriptors.hpp:599</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_ae4b69405416c09ee6878e01d27c9450b"><div class="ttname"><a href="namespacearmnn.xhtml#ae4b69405416c09ee6878e01d27c9450b">armnn::FoldPadLayer</a></div><div class="ttdeci">LayerType * FoldPadLayer(OptimizationViews &amp;optimizationViews, LayerType *baseLayer, LayerType *replacementLayer, PadLayer *padLayer)</div><div class="ttdef"><b>Definition:</b> <a href="_subgraph_utils_8hpp_source.xhtml#l00066">SubgraphUtils.hpp:66</a></div></div>
+<div class="ttc" id="anamespacearmnn_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="_space_to_batch_nd_8cpp_source.xhtml#l00015">SpaceToBatchNd.cpp:15</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360"><div class="ttname"><a href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">armnn::Compute::Undefined</a></div><div class="ttdeci">@ Undefined</div></div>
+<div class="ttc" id="aclassarmnn_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="aclassarmnn_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="anamespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a></div><div class="ttdeci">@ NHWC</div></div>
+<div class="ttc" id="a_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="anamespacearmnn_xhtml_a56297e0f7b215eea46c818cb7528d9eaaceb46ca115d05c51aa5a16a8867c3304"><div class="ttname"><a href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaaceb46ca115d05c51aa5a16a8867c3304">armnn::ActivationFunction::Square</a></div><div class="ttdeci">@ Square</div></div>
+<div class="ttc" id="astructarmnn_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#l00379">Descriptors.hpp:379</a></div></div>
+<div class="ttc" id="anamespacearmnn_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="anamespacearmnn_xhtml_a14d24d90ab4ba2956e92e27890ba4c91a74de3e45e4491e956e8dc18d841d9b00"><div class="ttname"><a href="namespacearmnn.xhtml#a14d24d90ab4ba2956e92e27890ba4c91a74de3e45e4491e956e8dc18d841d9b00">armnn::PaddingMode::Reflect</a></div><div class="ttdeci">@ Reflect</div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a7100de49939c3e393101f78d425a98c6a568437eb3752bdf14546b5c221ba5be7"><div class="ttname"><a href="namespacearmnn.xhtml#a7100de49939c3e393101f78d425a98c6a568437eb3752bdf14546b5c221ba5be7">armnn::MemBlockStrategyType::SingleAxisPacking</a></div><div class="ttdeci">@ SingleAxisPacking</div></div>
+<div class="ttc" id="anamespacearmnn_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#l00041">WorkloadUtils.cpp:41</a></div></div>
+<div class="ttc" id="anamespacearmnn_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#l00018">WorkloadUtils.cpp:18</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a88bebdfe6309aa2cd6831cfa73c296f0"><div class="ttname"><a href="namespacearmnn.xhtml#a88bebdfe6309aa2cd6831cfa73c296f0">armnn::Fill</a></div><div class="ttdeci">void Fill(Encoder&lt; float &gt; &amp;output, const TensorShape &amp;desiredOutputShape, const float value)</div><div class="ttdoc">Creates a tensor and fills it with a scalar value.</div><div class="ttdef"><b>Definition:</b> <a href="_fill_8cpp_source.xhtml#l00013">Fill.cpp:13</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a93a3ba385cad27c4774e5fe64c025d3dadd4ec0ac4e58f7c32a01244ae91150b1"><div class="ttname"><a href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3dadd4ec0ac4e58f7c32a01244ae91150b1">armnn::LogSeverity::Trace</a></div><div class="ttdeci">@ Trace</div></div>
+<div class="ttc" id="aclassarmnn_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="anamespacearmnn_xhtml_a4dc0adc6737b5944e7671bee71788407aad42f6697b035b7580e4fef93be20b4d"><div class="ttname"><a href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407aad42f6697b035b7580e4fef93be20b4d">armnn::BoostLogSeverityMapping::debug</a></div><div class="ttdeci">@ debug</div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a138ca3929b888fa8d9088c076e9de48c"><div class="ttname"><a href="namespacearmnn.xhtml#a138ca3929b888fa8d9088c076e9de48c">armnn::IsLayerSupported</a></div><div class="ttdeci">bool IsLayerSupported(const armnn::Layer *layer)</div><div class="ttdef"><b>Definition:</b> <a href="_mock_backend_8cpp_source.xhtml#l00060">MockBackend.cpp:60</a></div></div>
+<div class="ttc" id="aclassarmnn_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#l00295">Types.hpp:295</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a0fdab6fc39d90c5beea97f4ca0a584c4"><div class="ttname"><a href="namespacearmnn.xhtml#a0fdab6fc39d90c5beea97f4ca0a584c4">armnn::Splitter</a></div><div class="ttdeci">void Splitter(const SplitterQueueDescriptor &amp;data, std::vector&lt; ITensorHandle * &gt; inputs, std::vector&lt; ITensorHandle * &gt; outputs)</div><div class="ttdef"><b>Definition:</b> <a href="_splitter_8hpp_source.xhtml#l00017">Splitter.hpp:17</a></div></div>
+<div class="ttc" id="astructarmnn_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#l01013">Descriptors.hpp:1013</a></div></div>
+<div class="ttc" id="anamespacearmnn_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#l00211">ArmComputeUtils.hpp:211</a></div></div>
+<div class="ttc" id="anamespacearmnn_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 class="ttc" id="anamespacearmnn_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#l01413">Network.cpp:1413</a></div></div>
+<div class="ttc" id="anamespacearmnn_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#l00021">TypesUtils.hpp:21</a></div></div>
+<div class="ttc" id="anamespacearmnn_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#l00258">FoldPadIntoLayer2d.hpp:258</a></div></div>
+<div class="ttc" id="astructarmnn_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="_workload_data_8hpp_source.xhtml#l00066">WorkloadData.hpp:66</a></div></div>
+<div class="ttc" id="aclassarmnn_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="anamespacearmnn_xhtml_a707090747256af276c389e0cf1cb0a9aafaf34f09ea1e93bfbf591e19dc0dfb9f"><div class="ttname"><a href="namespacearmnn.xhtml#a707090747256af276c389e0cf1cb0a9aafaf34f09ea1e93bfbf591e19dc0dfb9f">armnn::TuningLevel::Exhaustive</a></div><div class="ttdeci">@ Exhaustive</div></div>
+<div class="ttc" id="aclassarmnn_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 class="ttc" id="anamespacearmnn_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#l00048">Types.hpp:48</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_af52a698836d638d0a71263c6c1496a05"><div class="ttname"><a href="namespacearmnn.xhtml#af52a698836d638d0a71263c6c1496a05">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#l00788">Network.cpp:788</a></div></div>
+<div class="ttc" id="anamespacearmnn_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="anamespacearmnn_xhtml_a707090747256af276c389e0cf1cb0a9aa960b44c579bc2f6818d2daaf9e4c16f0"><div class="ttname"><a href="namespacearmnn.xhtml#a707090747256af276c389e0cf1cb0a9aa960b44c579bc2f6818d2daaf9e4c16f0">armnn::TuningLevel::Normal</a></div><div class="ttdeci">@ Normal</div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">armnn::DataType::BFloat16</a></div><div class="ttdeci">@ BFloat16</div></div>
+<div class="ttc" id="a_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="anamespacearmnn_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="aclassarmnn_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="anamespacearmnn_xhtml_a4e2dd387ba6f0dc5164b4cdf8de3262aa911842b19d8b2f9bbed8cfe909d52975"><div class="ttname"><a href="namespacearmnn.xhtml#a4e2dd387ba6f0dc5164b4cdf8de3262aa911842b19d8b2f9bbed8cfe909d52975">armnn::JsonObjectType::Measurement</a></div><div class="ttdeci">@ Measurement</div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a56297e0f7b215eea46c818cb7528d9eaa23b68da1de2b77d74da9da2635722a3e"><div class="ttname"><a href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa23b68da1de2b77d74da9da2635722a3e">armnn::ActivationFunction::TanH</a></div><div class="ttdeci">@ TanH</div></div>
+<div class="ttc" id="anamespacearmnn_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="anamespacearmnn_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#l00327">ArmComputeUtils.hpp:327</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a14d24d90ab4ba2956e92e27890ba4c91af334649ef5e5d0ffe200751d07012626"><div class="ttname"><a href="namespacearmnn.xhtml#a14d24d90ab4ba2956e92e27890ba4c91af334649ef5e5d0ffe200751d07012626">armnn::PaddingMode::Symmetric</a></div><div class="ttdeci">@ Symmetric</div></div>
+<div class="ttc" id="astructarmnn_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#l00463">Descriptors.hpp:463</a></div></div>
+<div class="ttc" id="astructarmnn_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#l00449">Descriptors.hpp:449</a></div></div>
+<div class="ttc" id="a_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#l00405">ArmComputeUtils.hpp:405</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_ad52508167694d6d259525b3eec1a4267"><div class="ttname"><a href="namespacearmnn.xhtml#ad52508167694d6d259525b3eec1a4267">armnn::CalculateSlotOption</a></div><div class="ttdeci">ITensorHandleFactory::FactoryId CalculateSlotOption(BackendsMap &amp;backends, OutputSlot &amp;outputSlot, TensorHandleFactoryRegistry &amp;registry, bool exportEnabled)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.xhtml#l01263">Network.cpp:1263</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a1cfaa710db2a54673b21d2ea2da757c8a2a25ebd8c909241e3f7818389b804ecc"><div class="ttname"><a href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8a2a25ebd8c909241e3f7818389b804ecc">armnn::UnaryOperation::LogicalNot</a></div><div class="ttdeci">@ LogicalNot</div></div>
+<div class="ttc" id="anamespacearmnn_1_1optimizations_xhtml_a4dfbdc8cc90b67e74eccd146d977ff66"><div class="ttname"><a href="namespacearmnn_1_1optimizations.xhtml#a4dfbdc8cc90b67e74eccd146d977ff66">armnn::optimizations::ConvertConstDequantisationLayersToConstLayers</a></div><div class="ttdeci">OptimizeForConnection&lt; ConstantLayer, DequantizeLayer, ConvertConstDequantisationLayersToConstLayersImpl &gt; ConvertConstDequantisationLayersToConstLayers</div><div class="ttdef"><b>Definition:</b> <a href="_convert_const_dequantisation_layers_to_const_layers_8hpp_source.xhtml#l00173">ConvertConstDequantisationLayersToConstLayers.hpp:173</a></div></div>
+<div class="ttc" id="anamespacearmnn_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="anamespacearmnn_xhtml_a1cfaa710db2a54673b21d2ea2da757c8a0986d137604183312e6d3599578bc6cd"><div class="ttname"><a href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8a0986d137604183312e6d3599578bc6cd">armnn::UnaryOperation::Sin</a></div><div class="ttdeci">@ Sin</div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a961bbfe1db71a848eff5a1f0ab775718ab1897515d548a960afe49ecf66a29021"><div class="ttname"><a href="namespacearmnn.xhtml#a961bbfe1db71a848eff5a1f0ab775718ab1897515d548a960afe49ecf66a29021">armnn::PoolingAlgorithm::Average</a></div><div class="ttdeci">@ Average</div></div>
+<div class="ttc" id="anamespacearmnn_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#l00153">NeonWorkloadUtils.hpp:153</a></div></div>
+<div class="ttc" id="anamespacearmnn_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 class="ttc" id="anamespacearmnn_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#l00227">FuseBatchNorm.hpp:227</a></div></div>
+<div class="ttc" id="astructarmnn_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#l00377">Descriptors.hpp:377</a></div></div>
+<div class="ttc" id="anamespacearmnn_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="aclassarmnn_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="anamespacearmnn_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#l00260">FoldPadIntoLayer2d.hpp:260</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">armnn::DataType::QSymmS8</a></div><div class="ttdeci">@ QSymmS8</div></div>
+<div class="ttc" id="a_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="anamespacearmnn_xhtml_aa4e89c644c511e255f6a7ecbd5d14686"><div class="ttname"><a href="namespacearmnn.xhtml#aa4e89c644c511e255f6a7ecbd5d14686">armnn::PolymorphicDowncast</a></div><div class="ttdeci">DestType PolymorphicDowncast(SourceType *value)</div><div class="ttdoc">Polymorphic downcast for build in pointers only.</div><div class="ttdef"><b>Definition:</b> <a href="_polymorphic_downcast_8hpp_source.xhtml#l00074">PolymorphicDowncast.hpp:74</a></div></div>
+<div class="ttc" id="anamespacearmnn_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#l00286">WorkloadUtils.cpp:286</a></div></div>
+<div class="ttc" id="anamespacearmnn_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#l00221">TensorUtils.cpp:221</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a4e2dd387ba6f0dc5164b4cdf8de3262aaf7a45ae663528701f33ee482ce67af62"><div class="ttname"><a href="namespacearmnn.xhtml#a4e2dd387ba6f0dc5164b4cdf8de3262aaf7a45ae663528701f33ee482ce67af62">armnn::JsonObjectType::ExecObjectDesc</a></div><div class="ttdeci">@ ExecObjectDesc</div></div>
+<div class="ttc" id="aclassarmnn_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="anamespacearmnn_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#l00222">FuseBatchNorm.hpp:222</a></div></div>
+<div class="ttc" id="anamespacearmnn_utils_xhtml_a405d5f966ec992d1717711e5a2d7909d"><div class="ttname"><a href="namespacearmnn_utils.xhtml#a405d5f966ec992d1717711e5a2d7909d">armnnUtils::Transpose</a></div><div class="ttdeci">void Transpose(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="_transpose_8cpp_source.xhtml#l00120">Transpose.cpp:120</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a1cfaa710db2a54673b21d2ea2da757c8a09bb7f6e2118c85a6a55bd4bf2beeca4"><div class="ttname"><a href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8a09bb7f6e2118c85a6a55bd4bf2beeca4">armnn::UnaryOperation::Rsqrt</a></div><div class="ttdeci">@ Rsqrt</div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">armnn::DataType::QSymmS16</a></div><div class="ttdeci">@ QSymmS16</div></div>
+<div class="ttc" id="aclassarmnn_1_1_tensor_info_xhtml_abe8889e8150beef5fd204b2d87b49298"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">armnn::TensorInfo::SetShape</a></div><div class="ttdeci">void SetShape(const TensorShape &amp;newShape)</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00193">Tensor.hpp:193</a></div></div>
+<div class="ttc" id="anamespacearmnn_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="anamespacearmnn_xhtml_abc05539fc6e7907f32ef0fb242e3b3b0a362a33c23b08e4a32a4ec53fbb82cccd"><div class="ttname"><a href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0a362a33c23b08e4a32a4ec53fbb82cccd">armnn::ReduceOperation::Prod</a></div><div class="ttdeci">@ Prod</div></div>
+<div class="ttc" id="astructarmnn_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#l00457">Descriptors.hpp:457</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a56297e0f7b215eea46c818cb7528d9eaa3d90c0a5ab3fcf8e6f6608cb3d3a1559"><div class="ttname"><a href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa3d90c0a5ab3fcf8e6f6608cb3d3a1559">armnn::ActivationFunction::ReLu</a></div><div class="ttdeci">@ ReLu</div></div>
+<div class="ttc" id="aclassarmnn_1_1_layer_xhtml_a7ddf0cf6f620d59c10e63495ace795d0"><div class="ttname"><a href="classarmnn_1_1_layer.xhtml#a7ddf0cf6f620d59c10e63495ace795d0">armnn::Layer::GetName</a></div><div class="ttdeci">const char * GetName() const override</div><div class="ttdoc">Returns the name of the layer.</div><div class="ttdef"><b>Definition:</b> <a href="_layer_8hpp_source.xhtml#l00319">Layer.hpp:319</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a8bf1222ae8931bf663fa076b3e3b6f0e"><div class="ttname"><a href="namespacearmnn.xhtml#a8bf1222ae8931bf663fa076b3e3b6f0e">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#l00571">Network.cpp:571</a></div></div>
+<div class="ttc" id="anamespacearmnn_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="anamespacearmnn_xhtml_a56943a0946e5f15e5e58054b8e7a04a4a9882ff3cfed27d6161c20a305e7a3484"><div class="ttname"><a href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a9882ff3cfed27d6161c20a305e7a3484">armnn::LayerType::BatchMatMul</a></div><div class="ttdeci">@ BatchMatMul</div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a56297e0f7b215eea46c818cb7528d9eaaae77f3ad25595e35b327334d89410054"><div class="ttname"><a href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaaae77f3ad25595e35b327334d89410054">armnn::ActivationFunction::Sqrt</a></div><div class="ttdeci">@ Sqrt</div></div>
+<div class="ttc" id="anamespacearmnn_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#l00040">NetworkUtils.cpp:40</a></div></div>
+<div class="ttc" id="a_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 class="ttc" id="anamespacearmnn_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#l00232">FuseBatchNorm.hpp:232</a></div></div>
+<div class="ttc" id="astructarmnn_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#l00607">Descriptors.hpp:607</a></div></div>
+<div class="ttc" id="astructarmnn_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#l00393">Descriptors.hpp:393</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a5e1dc69443b64ad16b669388a6023f7a"><div class="ttname"><a href="namespacearmnn.xhtml#a5e1dc69443b64ad16b669388a6023f7a">armnn::SpaceToDepth</a></div><div class="ttdeci">void SpaceToDepth(const TensorInfo &amp;inputInfo, const TensorInfo &amp;outputInfo, const SpaceToDepthDescriptor &amp;params, Decoder&lt; float &gt; &amp;inputData, Encoder&lt; float &gt; &amp;outputData)</div><div class="ttdef"><b>Definition:</b> <a href="_space_to_depth_8cpp_source.xhtml#l00036">SpaceToDepth.cpp:36</a></div></div>
+<div class="ttc" id="aclassarmnn_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="anamespacearmnn_xhtml_a7d4e24d8e296ccced976d626e08b742a"><div class="ttname"><a href="namespacearmnn.xhtml#a7d4e24d8e296ccced976d626e08b742a">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="anamespacearmnn_xhtml_aff209afc1dc598da399e3e78617ce016a46e8b7bfd6fd3c0cb34a100478a39189"><div class="ttname"><a href="namespacearmnn.xhtml#aff209afc1dc598da399e3e78617ce016a46e8b7bfd6fd3c0cb34a100478a39189">armnn::EdgeStrategy::ExportToTarget</a></div><div class="ttdeci">@ ExportToTarget</div><div class="ttdoc">Destination backend can work directly with tensors on source backend.</div></div>
+<div class="ttc" id="anamespacearmnn_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#l00098">ConvertConstants.hpp:98</a></div></div>
+<div class="ttc" id="anamespacearmnn_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="_detection_post_process_8cpp_source.xhtml#l00049">DetectionPostProcess.cpp:49</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a3888429b6ebc79f9a7df549e5e4d9a2fa843f2812f595e7ec7c5036e89fde02d6"><div class="ttname"><a href="namespacearmnn.xhtml#a3888429b6ebc79f9a7df549e5e4d9a2fa843f2812f595e7ec7c5036e89fde02d6">armnn::PaddingMethod::Exclude</a></div><div class="ttdeci">@ Exclude</div><div class="ttdoc">The padding fields don't count and are ignored.</div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a6894316aa645fd5e837739135bef04bb"><div class="ttname"><a href="namespacearmnn.xhtml#a6894316aa645fd5e837739135bef04bb">armnn::Resize</a></div><div class="ttdeci">void Resize(Decoder&lt; float &gt; &amp;in, const TensorInfo &amp;inputInfo, Encoder&lt; float &gt; &amp;out, const TensorInfo &amp;outputInfo, DataLayoutIndexed dataLayout, armnn::ResizeMethod resizeMethod, bool alignCorners, bool halfPixelCenters)</div><div class="ttdef"><b>Definition:</b> <a href="_resize_8cpp_source.xhtml#l00065">Resize.cpp:65</a></div></div>
+<div class="ttc" id="ainclude_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 class="ttc" id="anamespacearmnn_xhtml_a2783360b253135639f4c63cfcaed6d48"><div class="ttname"><a href="namespacearmnn.xhtml#a2783360b253135639f4c63cfcaed6d48">armnn::Optimize</a></div><div class="ttdeci">IOptimizedNetworkPtr Optimize(const INetwork &amp;network, const std::vector&lt; BackendId &gt; &amp;backendPreferences, const IDeviceSpec &amp;deviceSpec, const OptimizerOptions &amp;options=OptimizerOptions(), Optional&lt; std::vector&lt; std::string &gt; &amp; &gt; messages=EmptyOptional())</div><div class="ttdoc">Create an optimized version of the network.</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.xhtml#l01773">Network.cpp:1773</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a56943a0946e5f15e5e58054b8e7a04a4a29c2c02a361c9d7028472e5d92cd4a54"><div class="ttname"><a href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a29c2c02a361c9d7028472e5d92cd4a54">armnn::LayerType::Output</a></div><div class="ttdeci">@ Output</div></div>
+<div class="ttc" id="anamespacearmnn_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#l00056">ClWorkloadUtils.hpp:56</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0a4dd0194b114cbf51da5b3a72569863ef"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a4dd0194b114cbf51da5b3a72569863ef">armnn::DataLayout::NDHWC</a></div><div class="ttdeci">@ NDHWC</div></div>
+<div class="ttc" id="anamespacearmnn_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="anamespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">armnn::DataType::Boolean</a></div><div class="ttdeci">@ Boolean</div></div>
+<div class="ttc" id="astructarmnn_1_1_optimization_result_xhtml_a955b65059e7f9429a5d6041136bc1487"><div class="ttname"><a href="structarmnn_1_1_optimization_result.xhtml#a955b65059e7f9429a5d6041136bc1487">armnn::OptimizationResult::IsOk</a></div><div class="ttdeci">bool IsOk() const</div><div class="ttdef"><b>Definition:</b> <a href="_network_8hpp_source.xhtml#l00253">Network.hpp:253</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a14fcd7f88d11cea0a018269dca5f9277a7f9067c59dd34aca0ad09a7f283ed1f8"><div class="ttname"><a href="namespacearmnn.xhtml#a14fcd7f88d11cea0a018269dca5f9277a7f9067c59dd34aca0ad09a7f283ed1f8">armnn::MemorySource::DmaBufProtected</a></div><div class="ttdeci">@ DmaBufProtected</div></div>
+<div class="ttc" id="anamespacearmnn_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#l00206">TypesUtils.hpp:206</a></div></div>
+<div class="ttc" id="anamespacearmnn_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 class="ttc" id="a_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 class="ttc" id="aclassarmnn_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="aclassarmnn_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="anamespacearmnn_xhtml_a93a3ba385cad27c4774e5fe64c025d3da902b0d55fddef6f8d651fe1035b7d4bd"><div class="ttname"><a href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da902b0d55fddef6f8d651fe1035b7d4bd">armnn::LogSeverity::Error</a></div><div class="ttdeci">@ Error</div></div>
+<div class="ttc" id="astructarmnn_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#l00471">Descriptors.hpp:471</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a4dc0adc6737b5944e7671bee71788407acb5e100e5a9a3e7f6d1fd97512215282"><div class="ttname"><a href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acb5e100e5a9a3e7f6d1fd97512215282">armnn::BoostLogSeverityMapping::error</a></div><div class="ttdeci">@ error</div></div>
+<div class="ttc" id="anamespacearmnn_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#l00226">TypesUtils.hpp:226</a></div></div>
+<div class="ttc" id="anamespacearmnn_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="_detection_post_process_8cpp_source.xhtml#l00102">DetectionPostProcess.cpp:102</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a2d299363c9fc33334c571fa29ca4f58ca1cfdf0e8d0c87a228c1f40d9bee7888b"><div class="ttname"><a href="namespacearmnn.xhtml#a2d299363c9fc33334c571fa29ca4f58ca1cfdf0e8d0c87a228c1f40d9bee7888b">armnn::ComparisonOperation::Less</a></div><div class="ttdeci">@ Less</div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a56297e0f7b215eea46c818cb7528d9eaabc5a0f0d6e7cf7fca73299dcd46c0f0d"><div class="ttname"><a href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaabc5a0f0d6e7cf7fca73299dcd46c0f0d">armnn::ActivationFunction::BoundedReLu</a></div><div class="ttdeci">@ BoundedReLu</div><div class="ttdoc">min(a, max(b, input)) ReLu1 &amp; ReLu6.</div></div>
+<div class="ttc" id="anamespacearmnn_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="anamespacearmnn_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#l00031">Types.hpp:31</a></div></div>
+<div class="ttc" id="anamespacearmnn_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 class="ttc" id="anamespacearmnn_xhtml_ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64"><div class="ttname"><a href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64">armnn::Compute::CpuRef</a></div><div class="ttdeci">@ CpuRef</div><div class="ttdoc">CPU Execution: Reference C++ kernels.</div></div>
+<div class="ttc" id="anamespacearmnn_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="anamespacearmnn_xhtml_aff209afc1dc598da399e3e78617ce016ac366da48cc11956ae377a77751936852"><div class="ttname"><a href="namespacearmnn.xhtml#aff209afc1dc598da399e3e78617ce016ac366da48cc11956ae377a77751936852">armnn::EdgeStrategy::CopyToTarget</a></div><div class="ttdeci">@ CopyToTarget</div><div class="ttdoc">Source backends tensor data can be exported to destination backend tensor without copy.</div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a0c99a284637e7c8d3547dac8686bed3a"><div class="ttname"><a href="namespacearmnn.xhtml#a0c99a284637e7c8d3547dac8686bed3a">armnn::IsLayerSupported</a></div><div class="ttdeci">bool IsLayerSupported(const armnn::Layer &amp;layer)</div><div class="ttdef"><b>Definition:</b> <a href="_mock_backend_8cpp_source.xhtml#l00080">MockBackend.cpp:80</a></div></div>
+<div class="ttc" id="astructarmnn_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#l00603">Descriptors.hpp:603</a></div></div>
+<div class="ttc" id="anamespacearmnn_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="a_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="anamespacearmnn_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="anamespacearmnn_xhtml_a1cfaa710db2a54673b21d2ea2da757c8ace0be71e33226e4c1db2bcea5959f16b"><div class="ttname"><a href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8ace0be71e33226e4c1db2bcea5959f16b">armnn::UnaryOperation::Log</a></div><div class="ttdeci">@ Log</div></div>
+<div class="ttc" id="anamespacearmnn_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#l00065">BackendHelper.cpp:65</a></div></div>
+<div class="ttc" id="anamespacearmnn_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="anamespacearmnn_xhtml_a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c"><div class="ttname"><a href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">armnn::BoostLogSeverityMapping::info</a></div><div class="ttdeci">@ info</div></div>
+<div class="ttc" id="astructarmnn_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 class="ttc" id="a_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="anamespacearmnn_xhtml_ae060224135f57f926cbda9d2732a2b1fa566666dfc3a9a82da0d7b0816b19f278"><div class="ttname"><a href="namespacearmnn.xhtml#ae060224135f57f926cbda9d2732a2b1fa566666dfc3a9a82da0d7b0816b19f278">armnn::ProfilingDetailsMethod::DetailsOnly</a></div><div class="ttdeci">@ DetailsOnly</div></div>
+<div class="ttc" id="anamespacearmnn_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#l01168">Network.cpp:1168</a></div></div>
+<div class="ttc" id="anamespacearmnn_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="anamespacearmnn_xhtml_a4a180e425d4c19b2cdea4ce5760180e1"><div class="ttname"><a href="namespacearmnn.xhtml#a4a180e425d4c19b2cdea4ce5760180e1">armnn::SpaceToBatchNd</a></div><div class="ttdeci">void SpaceToBatchNd(const TensorInfo &amp;inputInfo, const TensorInfo &amp;outputInfo, const SpaceToBatchNdDescriptor &amp;params, Decoder&lt; float &gt; &amp;inputData, Encoder&lt; float &gt; &amp;outputData)</div><div class="ttdef"><b>Definition:</b> <a href="_space_to_batch_nd_8cpp_source.xhtml#l00034">SpaceToBatchNd.cpp:34</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_adf57837d00e8352d9b5cc5ab1fb5fee9a5dd7c525cb1500a2181fd4cc079d7acb"><div class="ttname"><a href="namespacearmnn.xhtml#adf57837d00e8352d9b5cc5ab1fb5fee9a5dd7c525cb1500a2181fd4cc079d7acb">armnn::ShapeInferenceMethod::InferAndValidate</a></div><div class="ttdeci">@ InferAndValidate</div><div class="ttdoc">Infer missing output shapes and validate all output shapes.</div></div>
+<div class="ttc" id="anamespacearmnn_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#l00196">TensorUtils.cpp:196</a></div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a14fcd7f88d11cea0a018269dca5f9277a4bafe7f8ad22a8eca972a7ac5eb6702e"><div class="ttname"><a href="namespacearmnn.xhtml#a14fcd7f88d11cea0a018269dca5f9277a4bafe7f8ad22a8eca972a7ac5eb6702e">armnn::MemorySource::Gralloc</a></div><div class="ttdeci">@ Gralloc</div></div>
+<div class="ttc" id="anamespacearmnn_xhtml_a56297e0f7b215eea46c818cb7528d9eaacb7667f5ec2f6e8a5943b781ba6c2735"><div class="ttname"><a href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaacb7667f5ec2f6e8a5943b781ba6c2735">armnn::ActivationFunction::LeakyReLu</a></div><div class="ttdeci">@ LeakyReLu</div></div>
+<div class="ttc" id="anamespacearmnn_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#l00086">Types.hpp:86</a></div></div>
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="namespacearmnn.xhtml">armnn</a></li>
- <li class="footer">Generated on Fri Feb 24 2023 10:24:28 for ArmNN by
+ <li class="footer">Generated on Wed Mar 22 2023 15:53:04 for ArmNN by
<a href="http://www.doxygen.org/index.html">
- <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.17 </li>
</ul>
</div>
</body>